11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
36PROMEKI_NAMESPACE_BEGIN
124class TpgMediaIO :
public SharedThreadMediaIO {
125 PROMEKI_OBJECT(TpgMediaIO, SharedThreadMediaIO)
132 TpgMediaIO(ObjectBase *parent =
nullptr);
135 ~TpgMediaIO()
override;
137 Error describe(MediaIODescription *out)
const override;
138 Error proposeOutput(
const MediaDesc &requested, MediaDesc *achievable,
139 MediaConfig *configDelta =
nullptr)
const override;
142 Error executeCmd(MediaIOCommandOpen &cmd)
override;
143 Error executeCmd(MediaIOCommandClose &cmd)
override;
144 Error executeCmd(MediaIOCommandRead &cmd)
override;
151 MediaDesc producedFromConfig(
const MediaIO::Config &cfg)
const;
154 VideoTestPattern _videoPattern;
155 ImageDesc _imageDesc;
156 double _motion = 0.0;
157 double _motionOffset = 0.0;
158 bool _videoEnabled =
false;
159 bool _burnEnabled =
false;
160 String _burnTextTemplate;
161 bool _motionBandEnabled =
false;
164 ImageDataEncoder _dataEncoder;
165 bool _dataEncoderEnabled =
false;
166 uint32_t _dataEncoderRepeat = 16;
167 uint32_t _streamId = 0;
170 AudioTestPattern::UPtr _audioPattern;
171 AudioDesc _audioDesc;
172 bool _audioEnabled =
false;
175 TimecodeGenerator _tcGen;
176 bool _timecodeEnabled =
false;
179 bool _ancCaptionsEnabled =
false;
180 String _ancCaptionsFile;
181 Duration _ancCaptionsOffset;
182 uint16_t _ancCaptionsLine = 11;
183 uint16_t _ancSequenceCounter = 0;
184 uint8_t _ancFrameRateCode = 0;
185 AncTranslator _ancTranslator;
191 SubtitleList _ancCaptions;
201 List<UniquePtr<CaptionEncoder>> _ancCaptionEncoders;
207 CaptionCodec _ancCaptionsCodec = CaptionCodec::Cea608;
219 Map<int64_t, Cea708Cdp::CcDataList> _ancSccByFrame;
220 bool _ancSccBypassActive =
false;
223 FrameRate _frameRate;
224 FrameCount _frameCount{0};
231class TpgFactory :
public MediaIOFactory {
233 TpgFactory() =
default;
235 String name()
const override {
return String(
"TPG"); }
236 String displayName()
const override {
return String(
"Test Pattern Generator"); }
237 String description()
const override {
238 return String(
"Video/audio/timecode test pattern generator");
240 bool canBeSource()
const override {
return true; }
242 Config::SpecMap configSpecs()
const override;
243 Metadata defaultMetadata()
const override;
244 MediaIO *create(
const Config &config, ObjectBase *parent =
nullptr)
const override;