libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
burnmediaio.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>
17#include <promeki/list.h>
18#include <promeki/string.h>
19
20PROMEKI_NAMESPACE_BEGIN
21
109class BurnMediaIO : public SharedThreadMediaIO {
110 PROMEKI_OBJECT(BurnMediaIO, SharedThreadMediaIO)
111 public:
113 static inline const MediaIOStats::ID StatsFramesBurned{"FramesBurned"};
114
115 BurnMediaIO(ObjectBase *parent = nullptr);
116 ~BurnMediaIO() override;
117
118 Error proposeInput(const MediaDesc &offered, MediaDesc *preferred) const override;
119 Error proposeOutput(const MediaDesc &requested, MediaDesc *achievable,
120 MediaConfig *configDelta = nullptr) const override;
121 int pendingInternalWrites() const override;
122
123 protected:
124 Error executeCmd(MediaIOCommandOpen &cmd) override;
125 Error executeCmd(MediaIOCommandClose &cmd) override;
126 Error executeCmd(MediaIOCommandRead &cmd) override;
127 Error executeCmd(MediaIOCommandWrite &cmd) override;
128 Error executeCmd(MediaIOCommandStats &cmd) override;
129
130 private:
131 Error burnFrame(const Frame &input, Frame &output);
132
133 VideoTestPattern _pattern;
134 String _burnTextTemplate;
135 bool _burnEnabled = false;
136 int _capacity = 4;
137
138 Frame::List _outputQueue;
139 FrameCount _frameCount{0};
140 int64_t _readCount = 0;
141 FrameCount _framesBurned{0};
142 bool _capacityWarned = false;
143 bool _notPaintableWarned = false;
144};
145
150class BurnFactory : public MediaIOFactory {
151 public:
152 BurnFactory() = default;
153
154 String name() const override { return String("Burn"); }
155 String displayName() const override { return String("Burn-in (Timecode / Text)"); }
156 String description() const override { return String("Text burn-in overlay on video frames"); }
157 bool canBeTransform() const override { return true; }
158
159 Config::SpecMap configSpecs() const override;
160 MediaIO *create(const Config &config, ObjectBase *parent = nullptr) const override;
161};
162
163PROMEKI_NAMESPACE_END
164
165#endif // PROMEKI_ENABLE_PROAV