libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
frame.h
Go to the documentation of this file.
1
9#pragma once
10
11
12#include <promeki/config.h>
13#if PROMEKI_ENABLE_PROAV
14#include <optional>
15#include <type_traits>
16#include <promeki/namespace.h>
17#include <promeki/sharedptr.h>
21#include <promeki/ancpayload.h>
23#include <promeki/metadata.h>
24#include <promeki/list.h>
25#include <promeki/stringlist.h>
26#include <promeki/mediaconfig.h>
27#include <promeki/videoformat.h>
29
30PROMEKI_NAMESPACE_BEGIN
31
32class MediaDesc;
33
65class Frame {
66 public:
68 using List = ::promeki::List<Frame>;
69
71 Frame() = default;
72
93 bool isValid() const {
94 if (!_d.isValid()) return false;
95 return !_d->_payloads.isEmpty() || !_d->_metadata.isEmpty()
96 || _d->_captureTime.isValid() || !_d->_configUpdate.isEmpty();
97 }
98
103 const MediaPayload::PtrList &payloadList() const { return _d->_payloads; }
104
114 MediaPayload::PtrList &payloadList() { return _d.modify()->_payloads; }
115
119 void addPayload(MediaPayload::Ptr p) { _d.modify()->_payloads.pushToBack(std::move(p)); }
120
141 VideoPayload::PtrList videoPayloads() const;
142
151 AudioPayload::PtrList audioPayloads() const;
152
167 AncPayload::PtrList ancPayloads() const;
168
173 const Metadata &metadata() const { return _d->_metadata; }
174
183 Metadata &metadata() { return _d.modify()->_metadata; }
184
199 VideoFormat videoFormat(size_t index) const;
200
217 MediaDesc mediaDesc() const;
218
254 const MediaTimeStamp &captureTime() const { return _d->_captureTime; }
255
270 void setCaptureTime(const MediaTimeStamp &ts) { _d.modify()->_captureTime = ts; }
271
283 const MediaConfig &configUpdate() const { return _d->_configUpdate; }
284
286 MediaConfig &configUpdate() { return _d.modify()->_configUpdate; }
287
289 void setConfigUpdate(MediaConfig cfg) { _d.modify()->_configUpdate = std::move(cfg); }
290
300 enum CutPointScope {
301 CutPointVideoOnly = 0,
302 CutPointAudioOnly = 1,
303 CutPointAudioVideo = 2
304 };
305
327 bool isSafeCutPoint(CutPointScope scope = CutPointAudioVideo) const;
328
355 StringList dump(const String &indent = String()) const;
356
357 private:
369 struct Data {
370 PROMEKI_SHARED_FINAL(Data)
371 MediaPayload::PtrList _payloads;
372 Metadata _metadata;
373 MediaConfig _configUpdate;
374 MediaTimeStamp _captureTime;
375 };
376 SharedPtr<Data> _d = SharedPtr<Data>::create();
377};
378
379PROMEKI_NAMESPACE_END
380
381#endif // PROMEKI_ENABLE_PROAV