libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
ancdesc.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>
14#include <promeki/sharedptr.h>
15#include <promeki/ancformat.h>
16#include <promeki/size2d.h>
17#include <promeki/framerate.h>
18#include <promeki/metadata.h>
19#include <promeki/list.h>
20#include <promeki/enums_anc.h>
21#include <promeki/enums_video.h>
22
23PROMEKI_NAMESPACE_BEGIN
24
25class DataStream;
26class SdpMediaDescription;
27
92class AncDesc {
93 public:
95 using List = ::promeki::List<AncDesc>;
96
103 AncDesc();
104
123 AncDesc(const Size2Du32 &raster, const VideoScanMode &scanMode, const FrameRate &frameRate);
124
126 const Size2Du32 &sourceRaster() const;
127
129 void setSourceRaster(const Size2Du32 &raster);
130
132 const VideoScanMode &scanMode() const;
133
135 void setScanMode(const VideoScanMode &scanMode);
136
138 const FrameRate &frameRate() const;
139
141 void setFrameRate(const FrameRate &frameRate);
142
147 const AncFormat::IDList &allowedFormats() const;
148
150 void setAllowedFormats(AncFormat::IDList ids);
151
156 const ::promeki::List<AncCategory> &allowedCategories() const;
157
159 void setAllowedCategories(::promeki::List<AncCategory> categories);
160
162 const Metadata &metadata() const;
163
165 Metadata &metadata();
166
168 void setMetadata(Metadata m);
169
180 int pairedVideoStreamIndex() const;
181
183 void setPairedVideoStreamIndex(int index);
184
197 int pairedAudioStreamIndex() const;
198
200 void setPairedAudioStreamIndex(int index);
201
212 uint32_t troff() const;
213
215 void setTroff(uint32_t ticks);
216
228 uint8_t vpidCode() const;
229
231 void setVpidCode(uint8_t code);
232
245 AncTransmissionModel transmissionModel() const;
246
248 void setTransmissionModel(const AncTransmissionModel &tm);
249
263 bool isValid() const;
264
276 bool acceptsFormat(const AncFormat &fmt) const;
277
288 bool formatEquals(const AncDesc &other) const;
289
314 static AncDesc fromSdp(const SdpMediaDescription &md);
315
346 SdpMediaDescription toSdp(uint8_t payloadType) const;
347
352 bool operator==(const AncDesc &other) const;
353
355 bool operator!=(const AncDesc &other) const { return !(*this == other); }
356
368 struct Impl {
369 PROMEKI_SHARED_FINAL(Impl)
370
371 Size2Du32 sourceRaster;
372 VideoScanMode scanMode;
373 FrameRate frameRate;
374 AncFormat::IDList allowedFormats;
375 ::promeki::List<AncCategory> allowedCategories;
376 Metadata metadata;
377 int pairedVideoStreamIndex = -1;
378 int pairedAudioStreamIndex = -1;
379 uint32_t troff = 0;
380 uint8_t vpidCode = 0;
381 AncTransmissionModel transmissionModel = AncTransmissionModel::Unsignalled;
382 };
383
384 private:
385 SharedPtr<Impl> _d;
386};
387
392DataStream &operator<<(DataStream &stream, const AncDesc &desc);
393
395DataStream &operator>>(DataStream &stream, AncDesc &desc);
396
397PROMEKI_NAMESPACE_END
398
399#endif // PROMEKI_ENABLE_PROAV