11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
35PROMEKI_NAMESPACE_BEGIN
123class TpgMediaIO :
public SharedThreadMediaIO {
124 PROMEKI_OBJECT(TpgMediaIO, SharedThreadMediaIO)
131 TpgMediaIO(ObjectBase *parent =
nullptr);
134 ~TpgMediaIO()
override;
136 Error describe(MediaIODescription *out)
const override;
137 Error proposeOutput(
const MediaDesc &requested, MediaDesc *achievable,
138 MediaConfig *configDelta =
nullptr)
const override;
141 Error executeCmd(MediaIOCommandOpen &cmd)
override;
142 Error executeCmd(MediaIOCommandClose &cmd)
override;
143 Error executeCmd(MediaIOCommandRead &cmd)
override;
150 MediaDesc producedFromConfig(
const MediaIO::Config &cfg)
const;
153 VideoTestPattern _videoPattern;
154 ImageDesc _imageDesc;
155 double _motion = 0.0;
156 double _motionOffset = 0.0;
157 bool _videoEnabled =
false;
158 bool _burnEnabled =
false;
159 String _burnTextTemplate;
160 bool _motionBandEnabled =
false;
163 ImageDataEncoder _dataEncoder;
164 bool _dataEncoderEnabled =
false;
165 uint32_t _dataEncoderRepeat = 16;
166 uint32_t _streamId = 0;
169 AudioTestPattern::UPtr _audioPattern;
170 AudioDesc _audioDesc;
171 bool _audioEnabled =
false;
174 TimecodeGenerator _tcGen;
175 bool _timecodeEnabled =
false;
178 bool _ancCaptionsEnabled =
false;
179 String _ancCaptionsFile;
180 Duration _ancCaptionsOffset;
181 uint16_t _ancCaptionsLine = 11;
182 uint16_t _ancSequenceCounter = 0;
183 uint8_t _ancFrameRateCode = 0;
184 AncTranslator _ancTranslator;
190 SubtitleList _ancCaptions;
200 List<UniquePtr<CaptionEncoder>> _ancCaptionEncoders;
206 CaptionCodec _ancCaptionsCodec = CaptionCodec::Cea608;
218 Map<int64_t, Cea708Cdp::CcDataList> _ancSccByFrame;
219 bool _ancSccBypassActive =
false;
222 FrameRate _frameRate;
223 FrameCount _frameCount{0};
230class TpgFactory :
public MediaIOFactory {
232 TpgFactory() =
default;
234 String name()
const override {
return String(
"TPG"); }
235 String displayName()
const override {
return String(
"Test Pattern Generator"); }
236 String description()
const override {
237 return String(
"Video/audio/timecode test pattern generator");
239 bool canBeSource()
const override {
return true; }
241 Config::SpecMap configSpecs()
const override;
242 Metadata defaultMetadata()
const override;
243 MediaIO *create(
const Config &config, ObjectBase *parent =
nullptr)
const override;