| // Copyright 2024 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef QUICHE_QUIC_MOQT_MOQT_OBJECT_H_ |
| #define QUICHE_QUIC_MOQT_MOQT_OBJECT_H_ |
| |
| #include <cstdint> |
| #include <memory> |
| |
| #include "quiche/quic/core/quic_time.h" |
| #include "quiche/quic/moqt/moqt_messages.h" |
| #include "quiche/quic/moqt/moqt_priority.h" |
| #include "quiche/common/quiche_mem_slice.h" |
| |
| namespace moqt { |
| |
| struct PublishedObjectMetadata { |
| Location location; |
| uint64_t subgroup; // Equal to object_id for datagrams. |
| MoqtObjectStatus status; |
| MoqtPriority publisher_priority; |
| quic::QuicTime arrival_time = quic::QuicTime::Zero(); |
| }; |
| |
| // PublishedObject is a description of an object that is sufficient to publish |
| // it on a given track. |
| struct PublishedObject { |
| PublishedObjectMetadata metadata; |
| quiche::QuicheMemSlice payload; |
| bool fin_after_this = false; |
| }; |
| |
| // CachedObject is a version of PublishedObject with a reference counted |
| // payload. |
| struct CachedObject { |
| PublishedObjectMetadata metadata; |
| std::shared_ptr<quiche::QuicheMemSlice> payload; |
| bool fin_after_this; // This is the last object before FIN. |
| }; |
| |
| // Transforms a CachedObject into a PublishedObject. |
| PublishedObject CachedObjectToPublishedObject(const CachedObject& object); |
| |
| } // namespace moqt |
| |
| #endif // QUICHE_QUIC_MOQT_MOQT_OBJECT_H_ |