libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
ancpayload.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <promeki/namespace.h>
15#include <promeki/ancdesc.h>
16#include <promeki/ancpacket.h>
17#include <promeki/duration.h>
18#include <promeki/fourcc.h>
19#include <promeki/list.h>
21
22PROMEKI_NAMESPACE_BEGIN
23
56class AncPayload : public MediaPayload {
57 public:
58 PROMEKI_MEDIAPAYLOAD_LOOKUP_DISPATCH(AncPayload)
59
60
61 using Ptr = SharedPtr<AncPayload, /*CopyOnWrite=*/true, AncPayload>;
62
64 using PtrList = ::promeki::List<Ptr>;
65
67 static constexpr FourCC kSubclassFourCC{'A', 'N', 'C', 'p'};
68
70 AncPayload() = default;
71
79 explicit AncPayload(const AncDesc &desc) : _desc(desc) {}
80
85 AncPayload(const AncDesc &desc, AncPacket::List packets)
86 : _desc(desc), _packets(std::move(packets)) {}
87
89 const MediaPayloadKind &kind() const override { return MediaPayloadKind::AncillaryData; }
90
92 bool isCompressed() const override { return false; }
93
95 const Metadata &metadata() const override { return _desc.metadata(); }
96
98 Metadata &metadata() override { return _desc.metadata(); }
99
101 bool hasDuration() const override { return true; }
102
104 Duration duration() const override { return _duration; }
105
107 Error setDuration(const Duration &val) override {
108 _duration = val;
109 return Error::Ok;
110 }
111
113 uint32_t subclassFourCC() const override { return kSubclassFourCC.value(); }
114
127 bool isExclusiveExtras() const override { return true; }
128
130 const AncDesc &desc() const { return _desc; }
131
133 AncDesc &desc() { return _desc; }
134
136 void setDesc(const AncDesc &d) { _desc = d; }
137
139 const AncPacket::List &packets() const { return _packets; }
140
142 AncPacket::List &packets() { return _packets; }
143
145 void addPacket(const AncPacket &pkt) { _packets.pushToBack(pkt); }
146
148 void clearPackets() { _packets.clear(); }
149
151 AncPacket::List packetsOfFormat(const AncFormat &fmt) const;
152
157 AncPacket::List packetsOfCategory(const AncCategory &category) const;
158
160 AncPacket::List packetsOfTransport(const AncTransport &transport) const;
161
163 bool hasFormat(const AncFormat &fmt) const;
164
169 bool hasCategory(const AncCategory &category) const;
170
172 AncPayload *_promeki_clone() const override { return new AncPayload(*this); }
173
174 void serialisePayload(DataStream &s) const override;
175 void deserialisePayload(DataStream &s) override;
176
177 AncPayload(const AncPayload &) = default;
178 AncPayload(AncPayload &&) = default;
179 AncPayload &operator=(const AncPayload &) = default;
180 AncPayload &operator=(AncPayload &&) = default;
181
182 private:
183 AncDesc _desc;
184 AncPacket::List _packets;
185 Duration _duration;
186};
187
188PROMEKI_NAMESPACE_END
189
190#endif // PROMEKI_ENABLE_PROAV