11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
22PROMEKI_NAMESPACE_BEGIN
56class AncPayload :
public MediaPayload {
58 PROMEKI_MEDIAPAYLOAD_LOOKUP_DISPATCH(AncPayload)
61 using Ptr = SharedPtr<AncPayload,
true, AncPayload>;
64 using PtrList = ::promeki::List<Ptr>;
67 static constexpr FourCC kSubclassFourCC{
'A',
'N',
'C',
'p'};
70 AncPayload() =
default;
79 explicit AncPayload(
const AncDesc &desc) : _desc(desc) {}
85 AncPayload(
const AncDesc &desc, AncPacket::List packets)
86 : _desc(desc), _packets(std::move(packets)) {}
89 const MediaPayloadKind &kind()
const override {
return MediaPayloadKind::AncillaryData; }
92 bool isCompressed()
const override {
return false; }
95 const Metadata &metadata()
const override {
return _desc.metadata(); }
98 Metadata &metadata()
override {
return _desc.metadata(); }
101 bool hasDuration()
const override {
return true; }
104 Duration duration()
const override {
return _duration; }
107 Error setDuration(
const Duration &val)
override {
113 uint32_t subclassFourCC()
const override {
return kSubclassFourCC.value(); }
127 bool isExclusiveExtras()
const override {
return true; }
130 const AncDesc &desc()
const {
return _desc; }
133 AncDesc &desc() {
return _desc; }
136 void setDesc(
const AncDesc &d) { _desc = d; }
139 const AncPacket::List &packets()
const {
return _packets; }
142 AncPacket::List &packets() {
return _packets; }
145 void addPacket(
const AncPacket &pkt) { _packets.pushToBack(pkt); }
148 void clearPackets() { _packets.clear(); }
151 AncPacket::List packetsOfFormat(
const AncFormat &fmt)
const;
157 AncPacket::List packetsOfCategory(
const AncCategory &category)
const;
160 AncPacket::List packetsOfTransport(
const AncTransport &transport)
const;
163 bool hasFormat(
const AncFormat &fmt)
const;
169 bool hasCategory(
const AncCategory &category)
const;
172 AncPayload *_promeki_clone()
const override {
return new AncPayload(*
this); }
174 void serialisePayload(DataStream &s)
const override;
175 void deserialisePayload(DataStream &s)
override;
177 AncPayload(
const AncPayload &) =
default;
178 AncPayload(AncPayload &&) =
default;
179 AncPayload &operator=(
const AncPayload &) =
default;
180 AncPayload &operator=(AncPayload &&) =
default;
184 AncPacket::List _packets;