11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
50PROMEKI_NAMESPACE_BEGIN
88class MediaConfig :
public VariantDatabase<"MediaConfig"> {
91 using Base = VariantDatabase<
"MediaConfig">;
109 PROMEKI_DECLARE_ID(Filename, VariantSpec()
110 .setType(DataTypeString)
111 .setDefault(String())
112 .setDescription(
"Filesystem path to the media resource."));
126 PROMEKI_DECLARE_ID(Url, VariantSpec()
127 .setType(DataTypeUrl)
128 .setDefault(promeki::Url())
129 .setDescription(
"URL the MediaIO was opened from."));
132 PROMEKI_DECLARE_ID(Type, VariantSpec()
133 .setType(DataTypeString)
134 .setDefault(String())
135 .setDescription(
"Registered backend type name."));
145 PROMEKI_DECLARE_ID(OpenMode,
147 .setType(DataTypeEnum)
148 .setEnumType(MediaIOOpenMode::Type)
149 .setDefault(MediaIOOpenMode(MediaIOOpenMode::Read))
150 .setDescription(
"Read or Write open direction for file-style backends."));
155 PROMEKI_DECLARE_ID(Name, VariantSpec()
156 .setType(DataTypeString)
157 .setDefault(String())
158 .setDescription(
"Human-readable instance name; empty by default."));
161 PROMEKI_DECLARE_ID(FrameRate, VariantSpec()
162 .setType(DataTypeFrameRate)
163 .setDefault(promeki::FrameRate())
164 .setDescription(
"Stream or target frame rate."));
171 PROMEKI_DECLARE_ID(VideoFormat,
173 .setType(DataTypeVideoFormat)
174 .setDefault(promeki::VideoFormat())
175 .setDescription(
"Combined video raster, frame rate, and scan mode."));
178 PROMEKI_DECLARE_ID(VideoEnabled, VariantSpec()
179 .setType(DataTypeBool)
181 .setDescription(
"Enable video generation or decode."));
184 PROMEKI_DECLARE_ID(VideoSize, VariantSpec()
185 .setType(DataTypeSize2D)
186 .setDefault(Size2Du32())
187 .setDescription(
"Image dimensions."));
191 PROMEKI_DECLARE_ID(VideoPixelFormat, VariantSpec()
192 .setType(DataTypePixelFormat)
193 .setDefault(PixelFormat())
194 .setDescription(
"Video pixel description."));
197 PROMEKI_DECLARE_ID(VideoTrack, VariantSpec()
198 .setType(DataTypeInt32)
199 .setDefault(int32_t(-1))
201 .setDescription(
"0-based video track index (-1 = auto)."));
214 PROMEKI_DECLARE_ID(SdiInputSignal,
216 .setType(DataTypeSdiSignalConfig)
217 .setDefault(SdiSignalConfig())
219 "SDI input port(s) and SMPTE link standard "
220 "for hardware MediaIO backends."));
223 PROMEKI_DECLARE_ID(SdiOutputSignal,
225 .setType(DataTypeSdiSignalConfig)
226 .setDefault(SdiSignalConfig())
228 "SDI output port(s) and SMPTE link standard "
229 "for hardware MediaIO backends."));
239 PROMEKI_DECLARE_ID(HdmiInputSignal,
241 .setType(DataTypeHdmiSignalConfig)
242 .setDefault(HdmiSignalConfig())
244 "HDMI input port and version hint "
245 "for hardware MediaIO backends."));
248 PROMEKI_DECLARE_ID(HdmiOutputSignal,
250 .setType(DataTypeHdmiSignalConfig)
251 .setDefault(HdmiSignalConfig())
253 "HDMI output port and version hint "
254 "for hardware MediaIO backends."));
263 PROMEKI_DECLARE_ID(VideoReference,
265 .setType(DataTypeVideoReferenceConfig)
266 .setDefault(VideoReferenceConfig())
268 "Device-wide reference clock configuration "
269 "for hardware MediaIO backends."));
284 PROMEKI_DECLARE_ID(SdiOutputFanout,
286 .setType(DataTypeSdiOutputFanoutConfig)
287 .setDefault(SdiOutputFanoutConfig())
289 "Multi-destination SDI fanout: one signal driven "
290 "out N matching port groups via the device's "
291 "crosspoint fabric. Standard form: "
292 "'dl_3g:p1+p2,p3+p4'."));
299 PROMEKI_DECLARE_ID(VideoPattern, VariantSpec()
300 .setType(DataTypeEnum)
301 .setDefault(promeki::VideoPattern::ColorBars)
302 .setEnumType(promeki::VideoPattern::Type)
303 .setDescription(
"Selected video test pattern."));
306 PROMEKI_DECLARE_ID(VideoSolidColor, VariantSpec()
307 .setType(DataTypeColor)
309 .setDescription(
"Fill color for the SolidColor pattern."));
312 PROMEKI_DECLARE_ID(VideoMotion, VariantSpec()
313 .setType(DataTypeDouble)
315 .setDescription(
"Horizontal motion in pixels per frame."));
322 PROMEKI_DECLARE_ID(VideoBurnEnabled, VariantSpec()
323 .setType(DataTypeBool)
325 .setDescription(
"Enable text burn-in overlay."));
328 PROMEKI_DECLARE_ID(VideoBurnFontPath,
330 .setType(DataTypeString)
331 .setDefault(String())
332 .setDescription(
"TrueType or OpenType font path for burn-in."));
335 PROMEKI_DECLARE_ID(VideoBurnFontSize, VariantSpec()
336 .setType(DataTypeInt32)
337 .setDefault(int32_t(0))
339 .setDescription(
"Burn-in font size in pixels."));
342 PROMEKI_DECLARE_ID(VideoBurnText,
344 .setType(DataTypeString)
345 .setDefault(String())
346 .setDescription(
"Burn-in text as a VariantLookup<Frame>::format "
347 "template, resolved per-frame against the "
348 "frame's metadata. Use \\n for multi-line."));
351 PROMEKI_DECLARE_ID(VideoBurnPosition, VariantSpec()
352 .setType(DataTypeEnum)
353 .setDefault(BurnPosition::BottomCenter)
354 .setEnumType(BurnPosition::Type)
355 .setDescription(
"On-screen burn-in text position."));
358 PROMEKI_DECLARE_ID(VideoBurnTextColor, VariantSpec()
359 .setType(DataTypeColor)
361 .setDescription(
"Burn-in text color."));
364 PROMEKI_DECLARE_ID(VideoBurnBgColor, VariantSpec()
365 .setType(DataTypeColor)
367 .setDescription(
"Burn-in background color."));
370 PROMEKI_DECLARE_ID(VideoBurnDrawBg,
372 .setType(DataTypeBool)
374 .setDescription(
"Draw background rectangle behind burn-in text."));
382 PROMEKI_DECLARE_ID(VideoSubtitleBurnEnabled,
384 .setType(DataTypeBool)
386 .setDescription(
"Enable subtitle burn-in overlay rendering the active "
387 "Metadata::Subtitle cue (or a CEA-608 decoded cue when "
388 "VideoSubtitleBurnDecodeAnc is set) onto the video."));
391 PROMEKI_DECLARE_ID(VideoSubtitleBurnFontPath,
393 .setType(DataTypeString)
394 .setDefault(String())
395 .setDescription(
"TrueType or OpenType font path for subtitle burn-in. "
396 "Empty = the library's bundled default font."));
400 PROMEKI_DECLARE_ID(VideoSubtitleBurnFontSize,
402 .setType(DataTypeInt32)
403 .setDefault(int32_t(0))
405 .setDescription(
"Subtitle burn-in font size in pixels (0 = auto from "
410 PROMEKI_DECLARE_ID(VideoSubtitleBurnTextColor,
412 .setType(DataTypeColor)
413 .setDefault(Color::White)
414 .setDescription(
"Default subtitle text colour; spans with an explicit "
415 "SubtitleSpan::color override this."));
418 PROMEKI_DECLARE_ID(VideoSubtitleBurnBgColor,
420 .setType(DataTypeColor)
421 .setDefault(Color::Black)
422 .setDescription(
"Subtitle background colour (used behind the cue "
423 "when VideoSubtitleBurnDrawBg is set)."));
426 PROMEKI_DECLARE_ID(VideoSubtitleBurnDrawBg,
428 .setType(DataTypeBool)
430 .setDescription(
"Draw a solid background rectangle behind the subtitle "
431 "cue for legibility."));
437 PROMEKI_DECLARE_ID(VideoSubtitleBurnAnchor,
439 .setType(DataTypeEnum)
440 .setDefault(SubtitleAnchor::Default)
441 .setEnumType(SubtitleAnchor::Type)
442 .setDescription(
"Anchor override for subtitle burn-in. Default = "
443 "honour the cue's Subtitle::anchor (which falls back "
444 "to BottomCenter when itself Default)."));
471 PROMEKI_DECLARE_ID(VideoSubtitleBurnSources,
473 .setType(DataTypeEnumList)
475 EnumList l = EnumList::forType<SubtitleSource>();
476 l.append(SubtitleSource::Metadata);
479 .setEnumType(SubtitleSource::Type)
480 .setDescription(
"Ordered preference list of subtitle cue sources for "
481 "burn-in. Queries each source in turn and paints the "
482 "first cue it finds. Empty list disables rendering."));
489 PROMEKI_DECLARE_ID(VideoMotionBandEnabled,
491 .setType(DataTypeBool)
493 .setDescription(
"Enable the scrolling motion band overlay used to "
494 "make frame stutter / drop / repeat visually obvious."));
497 PROMEKI_DECLARE_ID(VideoMotionBandHeight,
499 .setType(DataTypeInt32)
500 .setDefault(int32_t(0))
502 .setDescription(
"Motion band height in scan lines (0 = default)."));
509 PROMEKI_DECLARE_ID(AudioEnabled, VariantSpec()
510 .setType(DataTypeBool)
512 .setDescription(
"Enable audio generation or decode."));
515 PROMEKI_DECLARE_ID(AudioRate, VariantSpec()
516 .setType(DataTypeFloat)
519 .setDescription(
"Audio sample rate in Hz."));
522 PROMEKI_DECLARE_ID(AudioChannels, VariantSpec()
523 .setType(DataTypeInt32)
524 .setDefault(int32_t(0))
526 .setDescription(
"Audio channel count."));
529 PROMEKI_DECLARE_ID(AudioTrack, VariantSpec()
530 .setType(DataTypeInt32)
531 .setDefault(int32_t(-1))
533 .setDescription(
"0-based audio track index (-1 = auto)."));
542 PROMEKI_DECLARE_ID(AudioChannelModes,
544 .setType(DataTypeEnumList)
545 .setDefault(EnumList::forType<AudioPattern>())
546 .setEnumType(AudioPattern::Type)
547 .setDescription(
"Comma-separated list of per-channel audio test "
548 "patterns (extra channels silenced)."));
551 PROMEKI_DECLARE_ID(AudioToneFrequency,
553 .setType(DataTypeDouble)
556 .setDescription(
"Tone frequency in Hz (Tone / AvSync channels)."));
559 PROMEKI_DECLARE_ID(AudioToneLevel, VariantSpec()
560 .setType(DataTypeDouble)
563 .setDescription(
"Tone level in dBFS."));
566 PROMEKI_DECLARE_ID(AudioLtcLevel, VariantSpec()
567 .setType(DataTypeDouble)
570 .setDescription(
"LTC burn-in level in dBFS."));
575 PROMEKI_DECLARE_ID(AudioChannelIdBaseFreq,
577 .setType(DataTypeDouble)
580 .setDescription(
"ChannelId base tone frequency in Hz."));
583 PROMEKI_DECLARE_ID(AudioChannelIdStepFreq,
585 .setType(DataTypeDouble)
588 .setDescription(
"ChannelId per-channel tone step in Hz."));
591 PROMEKI_DECLARE_ID(AudioChirpStartFreq,
593 .setType(DataTypeDouble)
596 .setDescription(
"Chirp log-sweep start frequency in Hz."));
599 PROMEKI_DECLARE_ID(AudioChirpEndFreq, VariantSpec()
600 .setType(DataTypeDouble)
603 .setDescription(
"Chirp log-sweep end frequency in Hz."));
606 PROMEKI_DECLARE_ID(AudioChirpDurationSec,
608 .setType(DataTypeDouble)
611 .setDescription(
"Chirp log-sweep period in seconds."));
617 .setType(DataTypeDouble)
620 .setDescription(
"DualTone low-side frequency in Hz (SMPTE IMD default 60 Hz)."));
626 .setType(DataTypeDouble)
629 .setDescription(
"DualTone high-side frequency in Hz (SMPTE IMD default 7 kHz)."));
632 PROMEKI_DECLARE_ID(AudioDualToneRatio,
634 .setType(DataTypeDouble)
637 .setDescription(
"DualTone amplitude ratio of freq2 to freq1 "
638 "(SMPTE IMD default 0.25 = 4:1)."));
641 PROMEKI_DECLARE_ID(AudioNoiseBufferSec,
643 .setType(DataTypeDouble)
646 .setDescription(
"WhiteNoise / PinkNoise cached buffer length in seconds."));
649 PROMEKI_DECLARE_ID(AudioNoiseSeed, VariantSpec()
650 .setType(DataTypeUInt32)
651 .setDefault(uint32_t(0x505244A4u))
652 .setDescription(
"WhiteNoise / PinkNoise PRNG seed."));
659 PROMEKI_DECLARE_ID(TimecodeEnabled, VariantSpec()
660 .setType(DataTypeBool)
662 .setDescription(
"Enable timecode generation."));
665 PROMEKI_DECLARE_ID(TimecodeStart,
667 .setType(DataTypeString)
668 .setDefault(String())
669 .setDescription(
"Starting timecode in SMPTE HH:MM:SS:FF form."));
672 PROMEKI_DECLARE_ID(TimecodeValue, VariantSpec()
673 .setType(DataTypeTimecode)
674 .setDefault(Timecode())
675 .setDescription(
"Pre-built starting timecode."));
678 PROMEKI_DECLARE_ID(TimecodeDropFrame,
680 .setType(DataTypeBool)
682 .setDescription(
"Drop-frame flag for 29.97 / 59.94 timecode."));
692 PROMEKI_DECLARE_ID(PlaybackRange,
694 .setType(DataTypeMediaDuration)
695 .setDefault(MediaDuration())
696 .setDescription(
"Playback in/out range (start frame plus length)."));
707 PROMEKI_DECLARE_ID(StreamID, VariantSpec()
708 .setType(DataTypeUInt32)
709 .setDefault(uint32_t(0))
710 .setDescription(
"Opaque per-stream identifier (uint32)."));
717 PROMEKI_DECLARE_ID(TpgDataEncoderEnabled,
719 .setType(DataTypeBool)
721 .setDescription(
"Enable VITC-style binary data encoder pass on TPG video."));
729 PROMEKI_DECLARE_ID(TpgDataEncoderRepeatLines,
731 .setType(DataTypeInt32)
732 .setDefault(int32_t(16))
734 .setDescription(
"Scan lines per ImageDataEncoder item in TPG."));
746 PROMEKI_DECLARE_ID(TpgAncCaptionsEnabled,
748 .setType(DataTypeBool)
750 .setDescription(
"Enable CEA-708 caption ANC injection on TPG frames."));
759 PROMEKI_DECLARE_ID(TpgAncCaptionsFile,
761 .setType(DataTypeString)
762 .setDefault(String())
763 .setDescription(
"Path to SubRip file driving CEA-608 captions on TPG."));
775 PROMEKI_DECLARE_ID(TpgAncCaptionsOffset,
777 .setType(DataTypeDuration)
778 .setDefault(Duration::zero())
779 .setDescription(
"Offset applied to SubRip cue times before scheduling."));
785 PROMEKI_DECLARE_ID(TpgAncCaptionsLine,
787 .setType(DataTypeInt32)
788 .setDefault(int32_t(11))
790 .setDescription(
"VANC line number stamped on TPG CEA-708 ANC packets."));
800 PROMEKI_DECLARE_ID(TpgAncCaptionsCodec,
802 .setType(DataTypeEnum)
803 .setDefault(promeki::CaptionCodec::Cea608)
804 .setEnumType(promeki::CaptionCodec::Type)
805 .setDescription(
"CEA caption codec(s) the TPG emits into the CDP cc_data."));
811 PROMEKI_DECLARE_ID(TpgAncCaptions708Service,
813 .setType(DataTypeInt32)
814 .setDefault(int32_t(1))
817 .setDescription(
"DTVCC service number for TPG CEA-708 caption emission."));
833 PROMEKI_DECLARE_ID(TpgAncCaptionsScc,
835 .setType(DataTypeString)
836 .setDefault(String())
837 .setDescription(
"Path to Scenarist SCC file feeding TPG CEA-708 ANC bytes directly."));
848 PROMEKI_DECLARE_ID(InspectorDropFrames,
850 .setType(DataTypeBool)
852 .setDescription(
"Inspector drops frames after checks (sink behaviour)."));
877 PROMEKI_DECLARE_ID(InspectorTests, VariantSpec()
878 .setType(DataTypeEnumList)
880 EnumList l = EnumList::forType<InspectorTest>();
881 l.append(InspectorTest::ImageData);
882 l.append(InspectorTest::AudioData);
883 l.append(InspectorTest::AvSync);
884 l.append(InspectorTest::Continuity);
885 l.append(InspectorTest::Timestamp);
886 l.append(InspectorTest::AudioSamples);
889 .setEnumType(InspectorTest::Type)
890 .setDescription(
"List of inspector tests to run."));
911 PROMEKI_DECLARE_ID(InspectorSyncOffsetToleranceSamples,
913 .setType(DataTypeInt32)
914 .setDefault(int32_t(0))
916 .setDescription(
"Max allowed sample-to-sample change in "
917 "the marker-based A/V sync offset before "
918 "flagging a discontinuity (default 0 — "
919 "the offset is cadence-free, so any "
920 "movement is a real shift)."));
925 PROMEKI_DECLARE_ID(InspectorImageDataRepeatLines,
927 .setType(DataTypeInt32)
928 .setDefault(int32_t(16))
930 .setDescription(
"Scan lines per ImageDataDecoder band in Inspector."));
933 PROMEKI_DECLARE_ID(InspectorLtcChannel,
935 .setType(DataTypeInt32)
936 .setDefault(int32_t(0))
938 .setDescription(
"Audio channel index carrying LTC for the inspector."));
943 PROMEKI_DECLARE_ID(InspectorLogIntervalSec,
945 .setType(DataTypeDouble)
948 .setDescription(
"Inspector periodic-summary log interval, seconds."));
960 PROMEKI_DECLARE_ID(InspectorAudioPtsToleranceNs,
962 .setType(DataTypeInt64)
963 .setDefault(int64_t(5'000'000))
965 .setDescription(
"Max tolerated audio PTS deviation from prediction "
966 "before re-anchoring (nanoseconds)."));
975 PROMEKI_DECLARE_ID(InspectorVideoPtsToleranceNs,
977 .setType(DataTypeInt64)
978 .setDefault(int64_t(5'000'000))
980 .setDescription(
"Max tolerated video PTS deviation from prediction "
981 "before re-anchoring (nanoseconds)."));
994 PROMEKI_DECLARE_ID(InspectorStatsFile,
996 .setType(DataTypeString)
997 .setDefault(String())
998 .setDescription(
"Output file for Inspector CaptureStats test "
999 "(TSV, one row per frame). Empty = auto-name "
1000 "in Dir::temp()."));
1011 PROMEKI_DECLARE_ID(InspectorAncDataFile,
1013 .setType(DataTypeString)
1014 .setDefault(String())
1015 .setDescription(
"Output JSONL file for Inspector AncData test "
1016 "(one JSON object per frame). Empty = auto-name "
1017 "in Dir::temp()."));
1032 PROMEKI_DECLARE_ID(NullPacingMode, VariantSpec()
1033 .setType(DataTypeEnum)
1034 .setDefault(promeki::NullPacingMode::Wallclock)
1035 .setEnumType(promeki::NullPacingMode::Type)
1036 .setDescription(
"Pacing strategy for the NullPacing sink "
1037 "(Wallclock = drop-between-ticks, Free = "
1038 "drain at upstream rate)."));
1046 PROMEKI_DECLARE_ID(NullPacingTargetFps, VariantSpec()
1047 .setType(DataTypeRational)
1048 .setDefault(Rational<int>(0, 1))
1049 .setDescription(
"Target frame-consumption rate for the "
1050 "NullPacing sink (frames per second). "
1051 "0/1 = follow the source descriptor."));
1059 PROMEKI_DECLARE_ID(NullPacingBurnTimings,
1061 .setType(DataTypeBool)
1063 .setDescription(
"NullPacing sink logs per-frame jitter / "
1064 "period at debug level when true."));
1078 PROMEKI_DECLARE_ID(MjpegMaxFps, VariantSpec()
1079 .setType(DataTypeRational)
1080 .setDefault(Rational<int>(15, 1))
1081 .setDescription(
"Maximum encode rate for the MjpegStream "
1082 "sink (frames per second). 0/1 = no rate "
1090 PROMEKI_DECLARE_ID(MjpegQuality, VariantSpec()
1091 .setType(DataTypeInt32)
1092 .setDefault(int32_t(80))
1094 .setMax(int32_t(100))
1095 .setDescription(
"JPEG quality used by the MjpegStream "
1105 PROMEKI_DECLARE_ID(MjpegMaxQueueFrames,
1107 .setType(DataTypeInt32)
1108 .setDefault(int32_t(1))
1110 .setMax(int32_t(16))
1111 .setDescription(
"Latest-N ring depth for the MjpegStream "
1120 PROMEKI_DECLARE_ID(OutputPixelFormat,
1122 .setType(DataTypePixelFormat)
1123 .setDefault(PixelFormat())
1124 .setDescription(
"Target pixel description (Invalid = pass-through)."));
1128 PROMEKI_DECLARE_ID(OutputAudioDataType,
1130 .setType(DataTypeEnum)
1132 .setEnumType(AudioDataType::Type)
1133 .setDescription(
"Target audio sample format (Invalid = pass-through)."));
1136 PROMEKI_DECLARE_ID(Capacity, VariantSpec()
1137 .setType(DataTypeInt32)
1138 .setDefault(int32_t(0))
1140 .setDescription(
"Internal FIFO capacity in frames."));
1150 PROMEKI_DECLARE_ID(OutputFrameRate, VariantSpec()
1151 .setType(DataTypeFrameRate)
1152 .setDefault(promeki::FrameRate())
1153 .setDescription(
"FrameSync output frame rate "
1154 "(invalid = inherit from source)."));
1160 PROMEKI_DECLARE_ID(OutputAudioRate, VariantSpec()
1161 .setType(DataTypeFloat)
1164 .setDescription(
"FrameSync output audio sample rate "
1165 "(0 = inherit from source)."));
1170 PROMEKI_DECLARE_ID(OutputAudioChannels, VariantSpec()
1171 .setType(DataTypeInt32)
1172 .setDefault(int32_t(0))
1174 .setDescription(
"FrameSync output audio channel count "
1175 "(0 = inherit from source)."));
1178 PROMEKI_DECLARE_ID(InputQueueCapacity, VariantSpec()
1179 .setType(DataTypeInt32)
1180 .setDefault(int32_t(8))
1182 .setDescription(
"FrameSync input queue depth."));
1190 PROMEKI_DECLARE_ID(FrameBridgeName, VariantSpec()
1191 .setType(DataTypeString)
1192 .setDefault(String())
1193 .setDescription(
"FrameBridge logical name (required)."));
1196 PROMEKI_DECLARE_ID(FrameBridgeRingDepth, VariantSpec()
1197 .setType(DataTypeInt32)
1198 .setDefault(int32_t(2))
1200 .setDescription(
"FrameBridge ring-buffer depth."));
1203 PROMEKI_DECLARE_ID(FrameBridgeMetadataReserveBytes,
1205 .setType(DataTypeInt32)
1206 .setDefault(int32_t(64 * 1024))
1207 .setMin(int32_t(512))
1208 .setDescription(
"FrameBridge metadata reserve per slot, bytes."));
1212 PROMEKI_DECLARE_ID(FrameBridgeAudioHeadroomFraction,
1214 .setType(DataTypeDouble)
1217 .setDescription(
"FrameBridge audio headroom fraction."));
1220 PROMEKI_DECLARE_ID(FrameBridgeAccessMode, VariantSpec()
1221 .setType(DataTypeInt32)
1222 .setDefault(int32_t(0600))
1223 .setDescription(
"FrameBridge POSIX access mode."));
1226 PROMEKI_DECLARE_ID(FrameBridgeGroupName,
1228 .setType(DataTypeString)
1229 .setDefault(String())
1230 .setDescription(
"FrameBridge chown group (empty = skip)."));
1241 PROMEKI_DECLARE_ID(FrameBridgeSyncMode, VariantSpec()
1242 .setType(DataTypeBool)
1244 .setDescription(
"FrameBridge input sync mode."));
1257 FrameBridgeWaitForConsumer,
1259 .setType(DataTypeBool)
1261 .setDescription(
"FrameBridge output: block writeFrame until consumer connects."));
1268 PROMEKI_DECLARE_ID(JpegQuality, VariantSpec()
1269 .setType(DataTypeInt32)
1270 .setDefault(int32_t(85))
1271 .setRange(int32_t(1), int32_t(100))
1272 .setDescription(
"JPEG quality 1-100."));
1276 PROMEKI_DECLARE_ID(JpegSubsampling, VariantSpec()
1277 .setType(DataTypeEnum)
1278 .setDefault(ChromaSubsampling::YUV422)
1279 .setEnumType(ChromaSubsampling::Type)
1280 .setDescription(
"JPEG chroma subsampling."));
1289 PROMEKI_DECLARE_ID(JpegXsBpp,
1291 .setTypes({DataTypeInt32, DataTypeFloat, DataTypeDouble})
1292 .setDefault(int32_t(3))
1294 .setDescription(
"JPEG XS target bits per pixel."));
1299 PROMEKI_DECLARE_ID(JpegXsDecomposition,
1301 .setType(DataTypeInt32)
1302 .setDefault(int32_t(5))
1303 .setRange(int32_t(0), int32_t(5))
1304 .setDescription(
"JPEG XS horizontal decomposition depth 0-5."));
1322 PROMEKI_DECLARE_ID(BitrateKbps, VariantSpec()
1323 .setType(DataTypeInt32)
1324 .setDefault(int32_t(5000))
1326 .setDescription(
"Target / average bitrate in kbit/s."));
1331 PROMEKI_DECLARE_ID(MaxBitrateKbps,
1333 .setType(DataTypeInt32)
1334 .setDefault(int32_t(0))
1336 .setDescription(
"Peak bitrate in kbit/s (VBR only; 0 = uncapped)."));
1346 PROMEKI_DECLARE_ID(CodecThreads,
1348 .setType(DataTypeInt32)
1349 .setDefault(int32_t(0))
1351 .setDescription(
"Max software-codec worker threads (0 = auto)."));
1355 PROMEKI_DECLARE_ID(VideoRcMode, VariantSpec()
1356 .setType(DataTypeEnum)
1357 .setDefault(promeki::RateControlMode::VBR)
1358 .setEnumType(promeki::RateControlMode::Type)
1359 .setDescription(
"Video rate-control mode (CBR / VBR / CQP)."));
1364 PROMEKI_DECLARE_ID(GopLength, VariantSpec()
1365 .setType(DataTypeInt32)
1366 .setDefault(int32_t(60))
1368 .setDescription(
"GOP length in frames (0 = codec default)."));
1374 PROMEKI_DECLARE_ID(IdrInterval, VariantSpec()
1375 .setType(DataTypeInt32)
1376 .setDefault(int32_t(0))
1378 .setDescription(
"Maximum frames between IDR keyframes "
1379 "(0 = same as GopLength)."));
1383 PROMEKI_DECLARE_ID(BFrames, VariantSpec()
1384 .setType(DataTypeInt32)
1385 .setDefault(int32_t(0))
1387 .setDescription(
"Number of B-frames between references "
1388 "(0 = no B-frames)."));
1393 PROMEKI_DECLARE_ID(LookaheadFrames, VariantSpec()
1394 .setType(DataTypeInt32)
1395 .setDefault(int32_t(0))
1397 .setDescription(
"Rate-control look-ahead depth in frames "
1398 "(0 = disabled)."));
1403 PROMEKI_DECLARE_ID(VideoPreset, VariantSpec()
1404 .setType(DataTypeEnum)
1405 .setDefault(promeki::VideoEncoderPreset::Balanced)
1406 .setEnumType(promeki::VideoEncoderPreset::Type)
1407 .setDescription(
"Video encoder speed/quality preset."));
1414 PROMEKI_DECLARE_ID(VideoProfile, VariantSpec()
1415 .setType(DataTypeString)
1416 .setDefault(String())
1417 .setDescription(
"Codec-specific profile name "
1418 "(empty = codec default)."));
1424 PROMEKI_DECLARE_ID(VideoLevel, VariantSpec()
1425 .setType(DataTypeString)
1426 .setDefault(String())
1427 .setDescription(
"Codec-specific level name "
1428 "(empty = codec default / auto)."));
1435 PROMEKI_DECLARE_ID(VideoPixelAspect, VariantSpec()
1436 .setType(DataTypePixelAspect)
1437 .setDefault(PixelAspect())
1438 .setDescription(
"Sample aspect ratio (SAR) "
1439 "signalled in the bitstream "
1440 "(default 1:1 = square)."));
1446 PROMEKI_DECLARE_ID(VideoQp, VariantSpec()
1447 .setType(DataTypeInt32)
1448 .setDefault(int32_t(23))
1449 .setRange(int32_t(0), int32_t(51))
1450 .setDescription(
"Constant QP for CQP rate-control mode."));
1453 PROMEKI_DECLARE_ID(VideoSpatialAQ, VariantSpec()
1454 .setType(DataTypeBool)
1456 .setDescription(
"Enable spatial adaptive quantization."));
1459 PROMEKI_DECLARE_ID(VideoSpatialAQStrength,
1461 .setType(DataTypeInt32)
1462 .setDefault(int32_t(0))
1463 .setRange(int32_t(0), int32_t(15))
1464 .setDescription(
"Spatial AQ strength (1-15; 0 = auto)."));
1467 PROMEKI_DECLARE_ID(VideoTemporalAQ, VariantSpec()
1468 .setType(DataTypeBool)
1470 .setDescription(
"Enable temporal adaptive quantization."));
1474 PROMEKI_DECLARE_ID(VideoMultiPass, VariantSpec()
1475 .setType(DataTypeInt32)
1476 .setDefault(int32_t(0))
1477 .setRange(int32_t(0), int32_t(2))
1478 .setDescription(
"Multi-pass mode "
1479 "(0=disabled, 1=quarter-res, 2=full-res)."));
1495 PROMEKI_DECLARE_ID(VideoRepeatHeaders, VariantSpec()
1496 .setType(DataTypeBool)
1498 .setDescription(
"Emit parameter sets / sequence headers "
1499 "with every IDR."));
1507 PROMEKI_DECLARE_ID(VideoTimecodeSEI,
1509 .setType(DataTypeBool)
1511 .setDescription(
"Emit SMPTE timecode SEI "
1512 "(H.264 picture timing / HEVC time code)."));
1527 PROMEKI_DECLARE_ID(VideoEncoderStats,
1529 .setType(DataTypeBool)
1531 .setDescription(
"Populate expensive per-frame encoder "
1532 "RC stats (intra/inter block counts, avg MV)."));
1543 PROMEKI_DECLARE_ID(VideoColorPrimaries, VariantSpec()
1544 .setType(DataTypeEnum)
1545 .setDefault(promeki::ColorPrimaries::Auto)
1546 .setEnumType(promeki::ColorPrimaries::Type)
1547 .setDescription(
"VUI color primaries "
1548 "(Auto = derive from input)."));
1559 PROMEKI_DECLARE_ID(VideoTransferCharacteristics,
1561 .setType(DataTypeEnum)
1562 .setDefault(promeki::TransferCharacteristics::Auto)
1563 .setEnumType(promeki::TransferCharacteristics::Type)
1564 .setDescription(
"VUI transfer characteristics "
1565 "(Auto = derive from input)."));
1574 PROMEKI_DECLARE_ID(VideoMatrixCoefficients, VariantSpec()
1575 .setType(DataTypeEnum)
1576 .setDefault(promeki::MatrixCoefficients::Auto)
1577 .setEnumType(promeki::MatrixCoefficients::Type)
1578 .setDescription(
"VUI matrix coefficients "
1579 "(Auto = derive from input)."));
1591 PROMEKI_DECLARE_ID(VideoRange, VariantSpec()
1592 .setType(DataTypeEnum)
1593 .setDefault(promeki::VideoRange::Unknown)
1594 .setEnumType(promeki::VideoRange::Type)
1595 .setDescription(
"VUI video range "
1596 "(Unknown = derive from input)."));
1611 PROMEKI_DECLARE_ID(VideoChromaSubsampling, VariantSpec()
1612 .setType(DataTypeEnum)
1613 .setDefault(ChromaSubsampling::YUV420)
1614 .setEnumType(ChromaSubsampling::Type)
1615 .setDescription(
"Preferred encoder input "
1616 "chroma subsampling (default "
1641 PROMEKI_DECLARE_ID(VideoScanMode, VariantSpec()
1642 .setType(DataTypeEnum)
1643 .setDefault(promeki::VideoScanMode::Unknown)
1644 .setEnumType(promeki::VideoScanMode::Type)
1645 .setDescription(
"Raster scan mode "
1646 "(Unknown = derive from input)."));
1653 PROMEKI_DECLARE_ID(HdrMasteringDisplay,
1655 .setType(DataTypeMasteringDisplay)
1656 .setDescription(
"Stream-level mastering display metadata "
1657 "(SMPTE ST 2086)."));
1662 PROMEKI_DECLARE_ID(HdrContentLightLevel, VariantSpec()
1663 .setType(DataTypeContentLightLevel)
1664 .setDescription(
"Stream-level content light level "
1665 "(MaxCLL / MaxFALL)."));
1695 PROMEKI_DECLARE_ID(VideoSeiCaptionsEnabled,
1697 .setType(DataTypeBool)
1699 .setDescription(
"Emit ATSC A/53 closed-caption SEI carrying CEA-708 "
1700 "from the source Frame's ANC payloads."));
1711 PROMEKI_DECLARE_ID(VideoCodec, VariantSpec()
1712 .setType(DataTypeVideoCodec)
1713 .setDefault(promeki::VideoCodec())
1714 .setDescription(
"Video codec for the VideoEncoder / "
1715 "VideoDecoder backends "
1716 "(e.g. \"H264\", \"HEVC\", \"JPEG\")."));
1723 PROMEKI_DECLARE_ID(AudioCodec, VariantSpec()
1724 .setType(DataTypeAudioCodec)
1725 .setDefault(promeki::AudioCodec())
1726 .setDescription(
"Audio codec for the audio encoder / "
1728 "(e.g. \"AAC\", \"Opus\", \"FLAC\")."));
1741 PROMEKI_DECLARE_ID(CodecBackend, VariantSpec()
1742 .setType(DataTypeString)
1743 .setDefault(String())
1744 .setDescription(
"Optional codec backend name pinning a "
1745 "specific codec backend (empty = let the "
1746 "registry pick)."));
1761 PROMEKI_DECLARE_ID(AllowCodecBackendOverride,
1763 .setType(DataTypeBool)
1765 .setDescription(
"Allow the planner to pick a different "
1766 "backend than the one pinned by the "
1767 "caller (default: false)."));
1772 PROMEKI_DECLARE_ID(OpusApplication, VariantSpec()
1773 .setType(DataTypeEnum)
1774 .setDefault(promeki::OpusApplication::Audio)
1775 .setEnumType(promeki::OpusApplication::Type)
1776 .setDescription(
"Opus encoder application mode "
1777 "(Voip / Audio / LowDelay)."));
1783 PROMEKI_DECLARE_ID(OpusFrameSizeMs, VariantSpec()
1784 .setType(DataTypeFloat)
1788 .setDescription(
"Opus encoder frame size in milliseconds "
1789 "(2.5, 5, 10, 20, 40, or 60)."));
1797 PROMEKI_DECLARE_ID(CscPath, VariantSpec()
1798 .setType(DataTypeEnum)
1799 .setDefault(promeki::CscPath::Optimized)
1800 .setEnumType(promeki::CscPath::Type)
1801 .setDescription(
"CSC processing path (Optimized or Scalar)."));
1807 PROMEKI_DECLARE_ID(CscToneMapping,
1809 .setType(DataTypeEnum)
1810 .setDefault(promeki::CscToneMapping::Auto)
1811 .setEnumType(promeki::CscToneMapping::Type)
1812 .setDescription(
"HDR tone-mapping policy (Auto / Enabled / Disabled)."));
1818 PROMEKI_DECLARE_ID(CscToneMapOperator,
1820 .setType(DataTypeEnum)
1821 .setDefault(promeki::CscToneMapOperator::Bt2390)
1822 .setEnumType(promeki::CscToneMapOperator::Type)
1823 .setDescription(
"HDR tone-mapping operator "
1824 "(Bt2390 / Reinhard / Hable / Aces / Bt2446a)."));
1832 PROMEKI_DECLARE_ID(CscHdrPeakNits,
1834 .setType(DataTypeFloat)
1835 .setDefault(
float(1000.0f))
1836 .setMin(
float(0.0f))
1837 .setMax(
float(10000.0f))
1838 .setDescription(
"HDR tone-mapping source peak luminance in cd/m² (nits)."));
1844 PROMEKI_DECLARE_ID(CscSdrPeakNits,
1846 .setType(DataTypeFloat)
1847 .setDefault(
float(100.0f))
1848 .setMin(
float(0.0f))
1849 .setMax(
float(10000.0f))
1850 .setDescription(
"HDR tone-mapping target peak luminance in cd/m² (nits)."));
1857 PROMEKI_DECLARE_ID(ImageFileID,
1859 .setType(DataTypeInt32)
1860 .setDefault(int32_t(0))
1862 .setDescription(
"Explicit ImageFile ID (0 = infer from extension)."));
1865 PROMEKI_DECLARE_ID(SequenceHead, VariantSpec()
1866 .setType(DataTypeInt32)
1867 .setDefault(int32_t(0))
1869 .setDescription(
"First frame index for a sequence writer."));
1879 PROMEKI_DECLARE_ID(SaveImgSeqEnabled,
1881 .setType(DataTypeBool)
1883 .setDescription(
"Enable automatic .imgseq sidecar for image sequences."));
1891 PROMEKI_DECLARE_ID(SaveImgSeqPath, VariantSpec()
1892 .setType(DataTypeString)
1893 .setDefault(String())
1894 .setDescription(
"Override path for the .imgseq sidecar."));
1898 PROMEKI_DECLARE_ID(SaveImgSeqPathMode,
1900 .setType(DataTypeEnum)
1901 .setDefault(ImgSeqPathMode::Relative)
1902 .setEnumType(ImgSeqPathMode::Type)
1903 .setDescription(
"Sidecar directory reference mode (Relative or Absolute)."));
1910 PROMEKI_DECLARE_ID(SidecarAudioEnabled,
1912 .setType(DataTypeBool)
1914 .setDescription(
"Enable sidecar audio file for image sequences."));
1922 PROMEKI_DECLARE_ID(SidecarAudioPath,
1924 .setType(DataTypeString)
1925 .setDefault(String())
1926 .setDescription(
"Override path for the sidecar audio file."));
1934 PROMEKI_DECLARE_ID(AudioSource,
1936 .setType(DataTypeEnum)
1937 .setDefault(AudioSourceHint::Sidecar)
1938 .setEnumType(AudioSourceHint::Type)
1939 .setDescription(
"Preferred audio source for image sequence readers."));
1946 PROMEKI_DECLARE_ID(QuickTimeLayout, VariantSpec()
1947 .setType(DataTypeEnum)
1948 .setDefault(promeki::QuickTimeLayout::Fragmented)
1949 .setEnumType(promeki::QuickTimeLayout::Type)
1950 .setDescription(
"QuickTime writer on-disk layout."));
1953 PROMEKI_DECLARE_ID(QuickTimeFragmentFrames,
1955 .setType(DataTypeInt32)
1956 .setDefault(int32_t(0))
1958 .setDescription(
"Video frames per fragment (fragmented writer)."));
1961 PROMEKI_DECLARE_ID(QuickTimeFlushSync, VariantSpec()
1962 .setType(DataTypeBool)
1964 .setDescription(
"Call fdatasync after each flush."));
1972 PROMEKI_DECLARE_ID(QuickTimeAudioCodec,
1974 .setType(DataTypeAudioCodec)
1975 .setDefault(promeki::AudioCodec(promeki::AudioCodec::PCM))
1976 .setDescription(
"QuickTime preferred audio codec (PCM = uncompressed)."));
1985 PROMEKI_DECLARE_ID(QuickTimeVideoCodec,
1987 .setType(DataTypeVideoCodec)
1988 .setDefault(promeki::VideoCodec())
1989 .setDescription(
"QuickTime preferred video codec (Invalid = passthrough)."));
1993 PROMEKI_DECLARE_ID(QuickTimeCaptionReadPolicy,
1995 .setType(DataTypeEnum)
1996 .setDefault(promeki::QuickTimeCaptionReadPolicy::Auto)
1997 .setEnumType(promeki::QuickTimeCaptionReadPolicy::Type)
1998 .setDescription(
"How a c608 caption track feeds the ANC model on read."));
2008 PROMEKI_DECLARE_ID(FfmpegFormat,
2010 .setType(DataTypeString)
2011 .setDefault(String())
2012 .setDescription(
"FFmpeg muxer name (empty = derive from filename)."));
2021 PROMEKI_DECLARE_ID(FfmpegVideoCodec,
2023 .setType(DataTypeVideoCodec)
2024 .setDefault(promeki::VideoCodec())
2025 .setDescription(
"FFmpeg preferred video codec (Invalid = passthrough)."));
2033 PROMEKI_DECLARE_ID(FfmpegAudioCodec,
2035 .setType(DataTypeAudioCodec)
2036 .setDefault(promeki::AudioCodec(promeki::AudioCodec::PCM))
2037 .setDescription(
"FFmpeg preferred audio codec (PCM = uncompressed)."));
2045 PROMEKI_DECLARE_ID(MpegTsVideoPid, VariantSpec()
2046 .setType(DataTypeInt32)
2047 .setDefault(int32_t(0x0100))
2048 .setMin(int32_t(0x0020))
2049 .setMax(int32_t(0x1FFE))
2050 .setDescription(
"MPEG-TS video elementary-stream PID."));
2054 PROMEKI_DECLARE_ID(MpegTsAudioPid, VariantSpec()
2055 .setType(DataTypeInt32)
2056 .setDefault(int32_t(0x0101))
2057 .setMin(int32_t(0x0020))
2058 .setMax(int32_t(0x1FFE))
2059 .setDescription(
"MPEG-TS audio elementary-stream PID."));
2062 PROMEKI_DECLARE_ID(MpegTsPmtPid, VariantSpec()
2063 .setType(DataTypeInt32)
2064 .setDefault(int32_t(0x1000))
2065 .setMin(int32_t(0x0020))
2066 .setMax(int32_t(0x1FFE))
2067 .setDescription(
"MPEG-TS PMT PID."));
2071 PROMEKI_DECLARE_ID(MpegTsProgramNumber, VariantSpec()
2072 .setType(DataTypeInt32)
2073 .setDefault(int32_t(1))
2075 .setMax(int32_t(0xFFFF))
2076 .setDescription(
"MPEG-TS program_number."));
2080 PROMEKI_DECLARE_ID(MpegTsPatPmtIntervalMs,
2082 .setType(DataTypeInt32)
2083 .setDefault(int32_t(100))
2085 .setDescription(
"MPEG-TS PAT / PMT emission interval in ms."));
2093 PROMEKI_DECLARE_ID(MpegTsPcrIntervalMs,
2095 .setType(DataTypeInt32)
2096 .setDefault(int32_t(20))
2098 .setDescription(
"MPEG-TS PCR insertion interval in ms."));
2102 PROMEKI_DECLARE_ID(MpegTsMuxRateBps, VariantSpec()
2103 .setType(DataTypeInt64)
2104 .setDefault(int64_t(0))
2106 .setDescription(
"MPEG-TS CBR target in bits per second."));
2110 PROMEKI_DECLARE_ID(MpegTsAacFraming, VariantSpec()
2111 .setType(DataTypeEnum)
2112 .setDefault(promeki::MpegTsAacFraming::Adts)
2113 .setEnumType(promeki::MpegTsAacFraming::Type)
2114 .setDescription(
"MPEG-TS AAC framing (ADTS or LATM)."));
2120 PROMEKI_DECLARE_ID(MpegTsVideoCodec, VariantSpec()
2121 .setType(DataTypeVideoCodec)
2122 .setDefault(promeki::VideoCodec(promeki::VideoCodec::H264))
2123 .setDescription(
"MPEG-TS preferred video codec."));
2127 PROMEKI_DECLARE_ID(MpegTsAudioCodec, VariantSpec()
2128 .setType(DataTypeAudioCodec)
2129 .setDefault(promeki::AudioCodec(promeki::AudioCodec::AAC))
2130 .setDescription(
"MPEG-TS preferred audio codec."));
2138 PROMEKI_DECLARE_ID(SrtMode, VariantSpec()
2139 .setType(DataTypeEnum)
2140 .setDefault(promeki::SrtMode::Caller)
2141 .setEnumType(promeki::SrtMode::Type)
2142 .setDescription(
"SRT connection role."));
2146 PROMEKI_DECLARE_ID(SrtPeerHost, VariantSpec()
2147 .setType(DataTypeString)
2148 .setDefault(String())
2149 .setDescription(
"SRT peer host (caller/rendezvous)."));
2153 PROMEKI_DECLARE_ID(SrtPeerPort, VariantSpec()
2154 .setType(DataTypeInt32)
2155 .setDefault(int32_t(0))
2157 .setMax(int32_t(65535))
2158 .setDescription(
"SRT peer port."));
2163 PROMEKI_DECLARE_ID(SrtLocalHost, VariantSpec()
2164 .setType(DataTypeString)
2165 .setDefault(String())
2166 .setDescription(
"SRT local bind host."));
2170 PROMEKI_DECLARE_ID(SrtLocalPort, VariantSpec()
2171 .setType(DataTypeInt32)
2172 .setDefault(int32_t(0))
2174 .setMax(int32_t(65535))
2175 .setDescription(
"SRT local bind port."));
2178 PROMEKI_DECLARE_ID(SrtLatencyMs, VariantSpec()
2179 .setType(DataTypeInt32)
2180 .setDefault(int32_t(120))
2182 .setMax(int32_t(60000))
2183 .setDescription(
"SRT receive / peer latency in ms."));
2187 PROMEKI_DECLARE_ID(SrtPassphrase, VariantSpec()
2188 .setType(DataTypeString)
2189 .setDefault(String())
2190 .setDescription(
"SRT AES passphrase (10..79 bytes)."));
2193 PROMEKI_DECLARE_ID(SrtEncryptionKeyLength, VariantSpec()
2194 .setType(DataTypeInt32)
2195 .setDefault(int32_t(0))
2196 .setDescription(
"SRT AES key length (0=auto, 16/24/32)."));
2201 PROMEKI_DECLARE_ID(SrtStreamId, VariantSpec()
2202 .setType(DataTypeString)
2203 .setDefault(String())
2204 .setDescription(
"SRT stream ID (SRTO_STREAMID)."));
2208 PROMEKI_DECLARE_ID(SrtMaxBandwidthBps, VariantSpec()
2209 .setType(DataTypeInt64)
2210 .setDefault(int64_t(0))
2211 .setDescription(
"SRT max bandwidth in bytes/sec."));
2216 PROMEKI_DECLARE_ID(SrtPayloadSize, VariantSpec()
2217 .setType(DataTypeInt32)
2218 .setDefault(int32_t(1316))
2220 .setMax(int32_t(1456))
2221 .setDescription(
"SRT live-mode payload size."));
2225 PROMEKI_DECLARE_ID(SrtAcceptTimeoutMs, VariantSpec()
2226 .setType(DataTypeInt32)
2227 .setDefault(int32_t(0))
2229 .setDescription(
"SRT accept timeout in ms (Listener mode)."));
2233 PROMEKI_DECLARE_ID(SrtVideoPacing, VariantSpec()
2234 .setType(DataTypeEnum)
2235 .setDefault(promeki::SrtVideoPacing::Internal)
2236 .setEnumType(promeki::SrtVideoPacing::Type)
2237 .setDescription(
"SRT sink video pacing mode."));
2240 PROMEKI_DECLARE_ID(SrtPaceSkipThresholdMs, VariantSpec()
2241 .setType(DataTypeInt32)
2242 .setDefault(int32_t(0))
2244 .setDescription(
"Drop video frames when lagging past this many ms."));
2247 PROMEKI_DECLARE_ID(SrtPaceReanchorThresholdMs, VariantSpec()
2248 .setType(DataTypeInt32)
2249 .setDefault(int32_t(0))
2251 .setDescription(
"Re-anchor pacing clock after lag past this many ms."));
2256 PROMEKI_DECLARE_ID(SrtVideoCodec, VariantSpec()
2257 .setType(DataTypeVideoCodec)
2258 .setDefault(promeki::VideoCodec(promeki::VideoCodec::H264))
2259 .setDescription(
"SRT sink preferred video codec."));
2263 PROMEKI_DECLARE_ID(SrtAudioCodec, VariantSpec()
2264 .setType(DataTypeAudioCodec)
2265 .setDefault(promeki::AudioCodec(promeki::AudioCodec::AAC))
2266 .setDescription(
"SRT sink preferred audio codec."));
2280 PROMEKI_DECLARE_ID(SdlTimingSource,
2282 .setType(DataTypeString)
2283 .setDefault(String(
"audio"))
2284 .setDescription(
"Timing source: \"audio\" (default) or \"wall\"."));
2287 PROMEKI_DECLARE_ID(SdlWindowSize, VariantSpec()
2288 .setType(DataTypeSize2D)
2289 .setDefault(Size2Du32())
2290 .setDescription(
"Initial SDL window size."));
2293 PROMEKI_DECLARE_ID(SdlWindowTitle, VariantSpec()
2294 .setType(DataTypeString)
2295 .setDefault(String())
2296 .setDescription(
"SDL window title bar text."));
2313 PROMEKI_DECLARE_ID(RtpLocalAddress, VariantSpec()
2314 .setType(DataTypeSocketAddress)
2315 .setDescription(
"Local bind address for all RTP streams."));
2318 PROMEKI_DECLARE_ID(RtpSessionName, VariantSpec()
2319 .setType(DataTypeString)
2320 .setDefault(String())
2321 .setDescription(
"SDP session name (s= line)."));
2324 PROMEKI_DECLARE_ID(RtpSessionOrigin, VariantSpec()
2325 .setType(DataTypeString)
2326 .setDefault(String())
2327 .setDescription(
"SDP originator username (o= line)."));
2330 PROMEKI_DECLARE_ID(RtpPacingMode, VariantSpec()
2331 .setType(DataTypeEnum)
2332 .setDefault(promeki::RtpPacingMode::Auto)
2333 .setEnumType(promeki::RtpPacingMode::Type)
2334 .setDescription(
"RTP pacing mechanism."));
2337 PROMEKI_DECLARE_ID(RtpMulticastTTL, VariantSpec()
2338 .setType(DataTypeInt32)
2339 .setDefault(int32_t(16))
2340 .setRange(int32_t(1), int32_t(255))
2341 .setDescription(
"Multicast TTL."));
2344 PROMEKI_DECLARE_ID(RtpMulticastInterface,
2346 .setType(DataTypeString)
2347 .setDefault(String())
2348 .setDescription(
"Multicast outgoing interface name."));
2352 PROMEKI_DECLARE_ID(RtpSaveSdpPath, VariantSpec()
2353 .setType(DataTypeString)
2354 .setDefault(String())
2355 .setDescription(
"File path to write generated SDP to."));
2364 PROMEKI_DECLARE_ID(RtpRtcpEnabled, VariantSpec()
2365 .setType(DataTypeBool)
2367 .setDescription(
"Emit RTCP Sender Reports."));
2375 PROMEKI_DECLARE_ID(RtpRtcpIntervalMs,
2377 .setType(DataTypeInt32)
2378 .setDefault(int32_t(5000))
2379 .setMin(int32_t(100))
2380 .setDescription(
"RTCP Sender Report interval in ms."));
2400 PROMEKI_DECLARE_ID(RtpRtcpCname, VariantSpec()
2401 .setType(DataTypeString)
2402 .setDefault(String())
2403 .setDescription(
"RTCP SDES CNAME (empty = auto)."));
2411 .setTypes({DataTypeString, DataTypeSdpSession})
2412 .setDescription(
"SDP input: file path (String) or session object (SdpSession)."));
2415 PROMEKI_DECLARE_ID(RtpRefClock,
2417 .setType(DataTypeEnum)
2418 .setDefault(RtpRefClockMode::Auto)
2419 .setEnumType(RtpRefClockMode::Type)
2420 .setDescription(
"SDP ts-refclk source mode."));
2428 PROMEKI_DECLARE_ID(RtpRefClockLocalMac,
2430 .setType(DataTypeMacAddress)
2431 .setDefault(MacAddress())
2432 .setDescription(
"Override MAC for SDP ts-refclk:localmac."));
2438 PROMEKI_DECLARE_ID(RtpPtpProfile,
2440 .setType(DataTypeString)
2441 .setDefault(String(
"IEEE1588-2008"))
2442 .setDescription(
"PTP profile for SDP ts-refclk:ptp."));
2449 PROMEKI_DECLARE_ID(RtpPtpGrandmaster,
2451 .setType(DataTypeEUI64)
2452 .setDefault(EUI64())
2453 .setDescription(
"PTP grandmaster EUI-64 for SDP ts-refclk:ptp."));
2459 PROMEKI_DECLARE_ID(RtpPtpDomain,
2461 .setType(DataTypeInt32)
2462 .setDefault(int32_t(0))
2463 .setRange(int32_t(0), int32_t(255))
2464 .setDescription(
"PTP domain number for SDP ts-refclk:ptp."));
2472 PROMEKI_DECLARE_ID(RtpMediaClkOffset,
2474 .setType(DataTypeInt32)
2475 .setDefault(int32_t(0))
2476 .setDescription(
"SDP mediaclk:direct=<offset> value."));
2479 PROMEKI_DECLARE_ID(RtpJitterMs, VariantSpec()
2480 .setType(DataTypeInt32)
2481 .setDefault(int32_t(50))
2483 .setDescription(
"Reader jitter buffer depth in ms."));
2491 PROMEKI_DECLARE_ID(RtpMaxReadQueueDepth,
2493 .setType(DataTypeInt32)
2494 .setDefault(int32_t(8))
2496 .setDescription(
"Reader output frame queue capacity."));
2505 PROMEKI_DECLARE_ID(RtpWireSilenceTimeoutMs,
2507 .setType(DataTypeInt32)
2508 .setDefault(int32_t(0))
2510 .setDescription(
"Reader wire-silence EoS timeout in ms (0 = 10 × RTCP)."));
2526 PROMEKI_DECLARE_ID(RtpVideoWatchdogEnabled,
2528 .setType(DataTypeBool)
2530 .setDescription(
"Enable video-stall watchdog (audio-only continuation Frames)."));
2536 .setType(DataTypeInt32)
2537 .setDefault(int32_t(8 * 1024 * 1024))
2539 .setDescription(
"Kernel SO_RCVBUF size for each RTP UDP socket "
2540 "(0 = leave kernel default; Linux clamps to net.core.rmem_max)."));
2546 .setType(DataTypeInt32)
2547 .setDefault(int32_t(8 * 1024 * 1024))
2549 .setDescription(
"Kernel SO_SNDBUF size for each RTP UDP socket "
2550 "(0 = leave kernel default; Linux clamps to net.core.wmem_max)."));
2560 PROMEKI_DECLARE_ID(RtpDontFragment,
2562 .setType(DataTypeBool)
2564 .setDescription(
"Set IP DF (don't fragment) on RTP egress sockets."));
2577 PROMEKI_DECLARE_ID(RtpSourceAddress,
2579 .setType(DataTypeString)
2580 .setDefault(String())
2581 .setDescription(
"Source IP for SDP source-filter (RFC 4570)."));
2586 PROMEKI_DECLARE_ID(VideoRtpDestination,
2588 .setType(DataTypeSocketAddress)
2589 .setDescription(
"Destination for the video RTP stream."));
2592 PROMEKI_DECLARE_ID(VideoRtpPayloadType, VariantSpec()
2593 .setType(DataTypeInt32)
2594 .setDefault(int32_t(96))
2595 .setRange(int32_t(0), int32_t(127))
2596 .setDescription(
"Video RTP payload type."));
2599 PROMEKI_DECLARE_ID(VideoRtpClockRate, VariantSpec()
2600 .setType(DataTypeInt32)
2601 .setDefault(int32_t(90000))
2603 .setDescription(
"Video RTP timestamp clock rate in Hz."));
2606 PROMEKI_DECLARE_ID(VideoRtpSsrc, VariantSpec()
2607 .setType(DataTypeInt32)
2608 .setDefault(int32_t(0))
2610 .setDescription(
"Video RTP SSRC (0 = auto)."));
2619 PROMEKI_DECLARE_ID(VideoRtpDscp, VariantSpec()
2620 .setType(DataTypeInt32)
2621 .setDefault(int32_t(34))
2622 .setRange(int32_t(0), int32_t(63))
2623 .setDescription(
"Video RTP DSCP marking (AF41 by default)."));
2626 PROMEKI_DECLARE_ID(VideoRtpTargetBitrate,
2628 .setType(DataTypeInt32)
2629 .setDefault(int32_t(0))
2631 .setDescription(
"Video RTP target bitrate in bps (0 = auto)."));
2634 PROMEKI_DECLARE_ID(VideoRtpFmtp, VariantSpec()
2635 .setType(DataTypeString)
2636 .setDefault(String())
2637 .setDescription(
"Raw SDP a=fmtp value for the video stream."));
2644 PROMEKI_DECLARE_ID(VideoRtpEncoding,
2646 .setType(DataTypeString)
2647 .setDefault(String())
2648 .setDescription(
"RTP rtpmap encoding name for the video stream."));
2653 PROMEKI_DECLARE_ID(AudioRtpDestination,
2655 .setType(DataTypeSocketAddress)
2656 .setDescription(
"Destination for the audio RTP stream."));
2659 PROMEKI_DECLARE_ID(AudioRtpPayloadType, VariantSpec()
2660 .setType(DataTypeInt32)
2661 .setDefault(int32_t(97))
2662 .setRange(int32_t(0), int32_t(127))
2663 .setDescription(
"Audio RTP payload type."));
2666 PROMEKI_DECLARE_ID(AudioRtpClockRate,
2668 .setType(DataTypeInt32)
2669 .setDefault(int32_t(0))
2671 .setDescription(
"Audio RTP clock rate in Hz (0 = match AudioRate)."));
2674 PROMEKI_DECLARE_ID(AudioRtpSsrc, VariantSpec()
2675 .setType(DataTypeInt32)
2676 .setDefault(int32_t(0))
2678 .setDescription(
"Audio RTP SSRC (0 = auto)."));
2687 PROMEKI_DECLARE_ID(AudioRtpDscp, VariantSpec()
2688 .setType(DataTypeInt32)
2689 .setDefault(int32_t(26))
2690 .setRange(int32_t(0), int32_t(63))
2691 .setDescription(
"Audio RTP DSCP marking (AF31 by default)."));
2694 PROMEKI_DECLARE_ID(AudioRtpPacketTimeUs,
2696 .setType(DataTypeInt32)
2697 .setDefault(int32_t(1000))
2699 .setDescription(
"Audio RTP packet time in microseconds."));
2711 PROMEKI_DECLARE_ID(RtpAudioWireFormat,
2713 .setType(DataTypeEnum)
2714 .setDefault(AudioWireFormat::Auto)
2715 .setEnumType(AudioWireFormat::Type)
2716 .setDescription(
"AES67 / ST 2110-30 on-wire PCM format."));
2748 PROMEKI_DECLARE_ID(AudioRtpPrerollMs,
2750 .setType(DataTypeInt32)
2751 .setDefault(int32_t(0))
2753 .setDescription(
"Audio TX preroll buffer in milliseconds."));
2758 PROMEKI_DECLARE_ID(DataEnabled, VariantSpec()
2759 .setType(DataTypeBool)
2761 .setDescription(
"Enable per-frame metadata transmission."));
2764 PROMEKI_DECLARE_ID(DataRtpDestination,
2766 .setType(DataTypeSocketAddress)
2767 .setDescription(
"Destination for the metadata RTP stream."));
2770 PROMEKI_DECLARE_ID(DataRtpPayloadType, VariantSpec()
2771 .setType(DataTypeInt32)
2772 .setDefault(int32_t(100))
2773 .setRange(int32_t(0), int32_t(127))
2774 .setDescription(
"Metadata RTP payload type."));
2777 PROMEKI_DECLARE_ID(DataRtpClockRate, VariantSpec()
2778 .setType(DataTypeInt32)
2779 .setDefault(int32_t(90000))
2781 .setDescription(
"Metadata RTP clock rate in Hz."));
2784 PROMEKI_DECLARE_ID(DataRtpSsrc, VariantSpec()
2785 .setType(DataTypeInt32)
2786 .setDefault(int32_t(0))
2788 .setDescription(
"Metadata RTP SSRC (0 = auto)."));
2795 PROMEKI_DECLARE_ID(DataRtpDscp, VariantSpec()
2796 .setType(DataTypeInt32)
2797 .setDefault(int32_t(18))
2798 .setRange(int32_t(0), int32_t(63))
2799 .setDescription(
"Metadata RTP DSCP marking (AF21 by default)."));
2802 PROMEKI_DECLARE_ID(DataRtpFormat, VariantSpec()
2803 .setType(DataTypeEnum)
2804 .setDefault(MetadataRtpFormat::JsonMetadata)
2805 .setEnumType(MetadataRtpFormat::Type)
2806 .setDescription(
"Wire format for the metadata RTP stream."));
2816 PROMEKI_DECLARE_ID(RtpVideoMaxUdp,
2818 .setType(DataTypeInt32)
2819 .setDefault(int32_t(0))
2821 .setDescription(
"Video SDP MAXUDP fmtp (0 = standard 1460)."));
2826 PROMEKI_DECLARE_ID(RtpAudioMaxUdp,
2828 .setType(DataTypeInt32)
2829 .setDefault(int32_t(0))
2831 .setDescription(
"Audio SDP MAXUDP fmtp (0 = standard 1460)."));
2835 PROMEKI_DECLARE_ID(RtpDataMaxUdp,
2837 .setType(DataTypeInt32)
2838 .setDefault(int32_t(0))
2840 .setDescription(
"Data / ANC SDP MAXUDP fmtp (0 = standard 1460)."));
2843 PROMEKI_DECLARE_ID(RtpVideoTsMode,
2845 .setType(DataTypeEnum)
2846 .setDefault(RtpTsMode::Samp)
2847 .setEnumType(RtpTsMode::Type)
2848 .setDescription(
"Video SDP TSMODE fmtp."));
2851 PROMEKI_DECLARE_ID(RtpAudioTsMode,
2853 .setType(DataTypeEnum)
2854 .setDefault(RtpTsMode::Samp)
2855 .setEnumType(RtpTsMode::Type)
2856 .setDescription(
"Audio SDP TSMODE fmtp."));
2859 PROMEKI_DECLARE_ID(RtpDataTsMode,
2861 .setType(DataTypeEnum)
2862 .setDefault(RtpTsMode::Samp)
2863 .setEnumType(RtpTsMode::Type)
2864 .setDescription(
"Data / ANC SDP TSMODE fmtp."));
2875 PROMEKI_DECLARE_ID(RtpVideoMediaClkMode,
2877 .setType(DataTypeEnum)
2878 .setDefault(promeki::RtpMediaClkMode::Auto)
2879 .setEnumType(promeki::RtpMediaClkMode::Type)
2880 .setDescription(
"Video SDP mediaclk mode (direct/sender)."));
2884 PROMEKI_DECLARE_ID(RtpAudioMediaClkMode,
2886 .setType(DataTypeEnum)
2887 .setDefault(promeki::RtpMediaClkMode::Auto)
2888 .setEnumType(promeki::RtpMediaClkMode::Type)
2889 .setDescription(
"Audio SDP mediaclk mode (direct/sender)."));
2893 PROMEKI_DECLARE_ID(RtpDataMediaClkMode,
2895 .setType(DataTypeEnum)
2896 .setDefault(promeki::RtpMediaClkMode::Auto)
2897 .setEnumType(promeki::RtpMediaClkMode::Type)
2898 .setDescription(
"Data / ANC SDP mediaclk mode (direct/sender)."));
2903 PROMEKI_DECLARE_ID(RtpVideoTsDelayUs,
2905 .setType(DataTypeInt32)
2906 .setDefault(int32_t(0))
2908 .setDescription(
"Video SDP TSDELAY fmtp in microseconds (0 = omit)."));
2911 PROMEKI_DECLARE_ID(RtpAudioTsDelayUs,
2913 .setType(DataTypeInt32)
2914 .setDefault(int32_t(0))
2916 .setDescription(
"Audio SDP TSDELAY fmtp in microseconds (0 = omit)."));
2919 PROMEKI_DECLARE_ID(RtpDataTsDelayUs,
2921 .setType(DataTypeInt32)
2922 .setDefault(int32_t(0))
2924 .setDescription(
"Data / ANC SDP TSDELAY fmtp in microseconds (0 = omit)."));
2936 PROMEKI_DECLARE_ID(RtpVideoSenderType,
2938 .setType(DataTypeEnum)
2939 .setDefault(promeki::RtpSenderType::Auto)
2940 .setEnumType(promeki::RtpSenderType::Type)
2941 .setDescription(
"Video SDP TP fmtp (2110TPN/NL/W)."));
2944 PROMEKI_DECLARE_ID(RtpAudioSenderType,
2946 .setType(DataTypeEnum)
2947 .setDefault(promeki::RtpSenderType::Auto)
2948 .setEnumType(promeki::RtpSenderType::Type)
2949 .setDescription(
"Audio SDP TP fmtp (2110TPN/NL/W)."));
2952 PROMEKI_DECLARE_ID(RtpDataSenderType,
2954 .setType(DataTypeEnum)
2955 .setDefault(promeki::RtpSenderType::Auto)
2956 .setEnumType(promeki::RtpSenderType::Type)
2957 .setDescription(
"Data / ANC SDP TP fmtp (2110TPN/NL/W)."));
2968 PROMEKI_DECLARE_ID(RtpVideoTrOffsetUs,
2970 .setType(DataTypeInt32)
2971 .setDefault(int32_t(0))
2972 .setDescription(
"Video SDP TROFF fmtp in µs (0 = TRO_DEFAULT)."));
2975 PROMEKI_DECLARE_ID(RtpAudioTrOffsetUs,
2977 .setType(DataTypeInt32)
2978 .setDefault(int32_t(0))
2979 .setDescription(
"Audio SDP TROFF fmtp in µs (0 = TRO_DEFAULT)."));
2987 PROMEKI_DECLARE_ID(RtpDataTrOffsetUs,
2989 .setType(DataTypeInt32)
2990 .setDefault(int32_t(0))
2991 .setDescription(
"Data / ANC SDP TROFF fmtp in µs (0 = TRO_DEFAULT)."));
3002 PROMEKI_DECLARE_ID(RtpVideoCmax,
3004 .setType(DataTypeInt32)
3005 .setDefault(int32_t(0))
3007 .setDescription(
"Video SDP CMAX fmtp (0 = compute from sender type)."));
3010 PROMEKI_DECLARE_ID(RtpAudioCmax,
3012 .setType(DataTypeInt32)
3013 .setDefault(int32_t(0))
3015 .setDescription(
"Audio SDP CMAX fmtp (0 = compute from sender type)."));
3018 PROMEKI_DECLARE_ID(RtpDataCmax,
3020 .setType(DataTypeInt32)
3021 .setDefault(int32_t(0))
3023 .setDescription(
"Data / ANC SDP CMAX fmtp (0 = compute from sender type)."));
3032 PROMEKI_DECLARE_ID(RtpVideoJxsPacketMode,
3034 .setType(DataTypeEnum)
3035 .setDefault(promeki::JxsPacketMode::Codestream)
3036 .setEnumType(promeki::JxsPacketMode::Type)
3037 .setDescription(
"RFC 9134 packetmode (K bit)."));
3046 PROMEKI_DECLARE_ID(RtpVideoJxsTransMode,
3048 .setType(DataTypeEnum)
3049 .setDefault(promeki::JxsTransMode::SequentialOnly)
3050 .setEnumType(promeki::JxsTransMode::Type)
3051 .setDescription(
"RFC 9134 transmode (T bit)."));
3056 PROMEKI_DECLARE_ID(RtpVideoJxsProfile,
3058 .setType(DataTypeEnum)
3059 .setDefault(promeki::JxsProfile::Unspecified)
3060 .setEnumType(promeki::JxsProfile::Type)
3061 .setDescription(
"RFC 9134 JPEG XS profile."));
3066 PROMEKI_DECLARE_ID(RtpVideoJxsLevel,
3068 .setType(DataTypeEnum)
3069 .setDefault(promeki::JxsLevel::Unspecified)
3070 .setEnumType(promeki::JxsLevel::Type)
3071 .setDescription(
"RFC 9134 JPEG XS level."));
3076 PROMEKI_DECLARE_ID(RtpVideoJxsSublevel,
3078 .setType(DataTypeEnum)
3079 .setDefault(promeki::JxsSublevel::Unspecified)
3080 .setEnumType(promeki::JxsSublevel::Type)
3081 .setDescription(
"RFC 9134 JPEG XS sublevel."));
3107 PROMEKI_DECLARE_ID(RtpPtpTraceable,
3109 .setType(DataTypeBool)
3111 .setDescription(
"Emit ts-refclk:ptp=...:traceable instead of GMID+domain."));
3134 PROMEKI_DECLARE_ID(RtpPtpDevicePath,
3136 .setType(DataTypeString)
3137 .setDefault(String())
3139 "Linux PHC device path "
3140 "(/dev/ptpN) for PTP-traceable "
3141 "SR anchors; empty = use "
3158 PROMEKI_DECLARE_ID(RtpVideoSampling,
3160 .setType(DataTypeEnum)
3161 .setDefault(St2110Sampling::Invalid)
3162 .setEnumType(St2110Sampling::Type)
3163 .setDescription(
"Video SDP sampling fmtp (Invalid = derive from PixelFormat)."));
3166 PROMEKI_DECLARE_ID(RtpVideoDepth,
3168 .setType(DataTypeEnum)
3169 .setDefault(St2110Depth::Invalid)
3170 .setEnumType(St2110Depth::Type)
3171 .setDescription(
"Video SDP depth fmtp (Invalid = derive from PixelFormat)."));
3174 PROMEKI_DECLARE_ID(RtpVideoColorimetry,
3176 .setType(DataTypeEnum)
3177 .setDefault(St2110Colorimetry::Invalid)
3178 .setEnumType(St2110Colorimetry::Type)
3179 .setDescription(
"Video SDP colorimetry fmtp (Invalid = derive from PixelFormat)."));
3182 PROMEKI_DECLARE_ID(RtpVideoTcs,
3184 .setType(DataTypeEnum)
3185 .setDefault(St2110Tcs::Invalid)
3186 .setEnumType(St2110Tcs::Type)
3187 .setDescription(
"Video SDP TCS fmtp (Invalid = derive from PixelFormat)."));
3190 PROMEKI_DECLARE_ID(RtpVideoRange,
3192 .setType(DataTypeEnum)
3193 .setDefault(St2110Range::Invalid)
3194 .setEnumType(St2110Range::Type)
3195 .setDescription(
"Video SDP RANGE fmtp (Invalid = derive from PixelFormat)."));
3198 PROMEKI_DECLARE_ID(RtpVideoPackingMode,
3200 .setType(DataTypeEnum)
3201 .setDefault(St2110PackingMode::Gpm)
3202 .setEnumType(St2110PackingMode::Type)
3203 .setDescription(
"Video SDP PM fmtp (default 2110GPM)."));
3211 PROMEKI_DECLARE_ID(RtpVideoPar,
3213 .setType(DataTypePixelAspect)
3214 .setDefault(PixelAspect())
3215 .setDescription(
"Video SDP PAR fmtp (default 1:1 = omit)."));
3226 PROMEKI_DECLARE_ID(RtpVideoDestinationSecondary,
3228 .setType(DataTypeSocketAddress)
3229 .setDescription(
"ST 2022-7 secondary destination for video."));
3232 PROMEKI_DECLARE_ID(RtpAudioDestinationSecondary,
3234 .setType(DataTypeSocketAddress)
3235 .setDescription(
"ST 2022-7 secondary destination for audio."));
3238 PROMEKI_DECLARE_ID(RtpDataDestinationSecondary,
3240 .setType(DataTypeSocketAddress)
3241 .setDescription(
"ST 2022-7 secondary destination for data / ANC."));
3253 PROMEKI_DECLARE_ID(RtpVideoLocalAddressSecondary,
3255 .setType(DataTypeSocketAddress)
3256 .setDescription(
"ST 2022-7 secondary local bind address for video."));
3264 PROMEKI_DECLARE_ID(RtpVideoInterfaceSecondary,
3266 .setType(DataTypeString)
3267 .setDefault(String())
3268 .setDescription(
"ST 2022-7 secondary SO_BINDTODEVICE interface for video."));
3272 PROMEKI_DECLARE_ID(RtpAudioLocalAddressSecondary,
3274 .setType(DataTypeSocketAddress)
3275 .setDescription(
"ST 2022-7 secondary local bind address for audio."));
3279 PROMEKI_DECLARE_ID(RtpAudioInterfaceSecondary,
3281 .setType(DataTypeString)
3282 .setDefault(String())
3283 .setDescription(
"ST 2022-7 secondary SO_BINDTODEVICE interface for audio."));
3287 PROMEKI_DECLARE_ID(RtpDataLocalAddressSecondary,
3289 .setType(DataTypeSocketAddress)
3290 .setDescription(
"ST 2022-7 secondary local bind address for data / ANC."));
3294 PROMEKI_DECLARE_ID(RtpDataInterfaceSecondary,
3296 .setType(DataTypeString)
3297 .setDefault(String())
3298 .setDescription(
"ST 2022-7 secondary SO_BINDTODEVICE interface for data / ANC."));
3316 PROMEKI_DECLARE_ID(RtpAncTransmissionModel,
3318 .setType(DataTypeEnum)
3319 .setDefault(promeki::AncTransmissionModel::Unsignalled)
3320 .setEnumType(promeki::AncTransmissionModel::Type)
3321 .setDescription(
"ST 2110-40 §6 transmission model (TM fmtp)."));
3332 PROMEKI_DECLARE_ID(RtpAncTrOffsetUs,
3334 .setType(DataTypeInt32)
3335 .setDefault(int32_t(0))
3336 .setDescription(
"ST 2110-40 LLTM T_EPO offset in µs."));
3349 PROMEKI_DECLARE_ID(RtpAncTotalLines,
3351 .setType(DataTypeInt32)
3352 .setDefault(int32_t(0))
3354 .setDescription(
"ST 2110-40 LLTM TotalLines (0 = Auto)."));
3366 PROMEKI_DECLARE_ID(RtpAncVpidCode,
3368 .setType(DataTypeInt32)
3369 .setDefault(int32_t(0))
3371 .setDescription(
"ST 2110-40 VPID_Code fmtp (0 = omit)."));
3384 PROMEKI_DECLARE_ID(RtmpUrl, VariantSpec()
3385 .setType(DataTypeUrl)
3386 .setDescription(
"RTMP / RTMPS endpoint URL."));
3390 PROMEKI_DECLARE_ID(RtmpStreamKey, VariantSpec()
3391 .setType(DataTypeString)
3392 .setDefault(String())
3393 .setDescription(
"Stream key override (last URL path segment)."));
3396 PROMEKI_DECLARE_ID(RtmpAppName, VariantSpec()
3397 .setType(DataTypeString)
3398 .setDefault(String())
3399 .setDescription(
"App-name override (URL path leading segments)."));
3402 PROMEKI_DECLARE_ID(RtmpFlashVer,
3404 .setType(DataTypeString)
3405 .setDefault(String(
"FMLE/3.0 (compatible; libpromeki)"))
3406 .setDescription(
"AMF0 connect.flashVer."));
3409 PROMEKI_DECLARE_ID(RtmpTcUrl, VariantSpec()
3410 .setType(DataTypeString)
3411 .setDefault(String())
3412 .setDescription(
"AMF0 connect.tcUrl override."));
3415 PROMEKI_DECLARE_ID(RtmpPageUrl, VariantSpec()
3416 .setType(DataTypeString)
3417 .setDefault(String())
3418 .setDescription(
"AMF0 connect.pageUrl."));
3421 PROMEKI_DECLARE_ID(RtmpSwfUrl, VariantSpec()
3422 .setType(DataTypeString)
3423 .setDefault(String())
3424 .setDescription(
"AMF0 connect.swfUrl."));
3427 PROMEKI_DECLARE_ID(RtmpEnhancedRtmp, VariantSpec()
3428 .setType(DataTypeBool)
3430 .setDescription(
"Use Enhanced-RTMP framing for "
3431 "HEVC / VP9 / AV1."));
3435 PROMEKI_DECLARE_ID(RtmpChunkSize, VariantSpec()
3436 .setType(DataTypeInt32)
3437 .setDefault(int32_t(60000))
3438 .setRange(int32_t(128), int32_t(65535))
3439 .setDescription(
"Local RTMP chunk size in bytes."));
3442 PROMEKI_DECLARE_ID(RtmpWindowAckSize, VariantSpec()
3443 .setType(DataTypeInt32)
3444 .setDefault(int32_t(5'000'000))
3445 .setMin(int32_t(1024))
3446 .setDescription(
"Advertised WindowAckSize in bytes."));
3450 PROMEKI_DECLARE_ID(RtmpPeerBandwidth, VariantSpec()
3451 .setType(DataTypeInt32)
3452 .setDefault(int32_t(5'000'000))
3453 .setMin(int32_t(1024))
3454 .setDescription(
"SetPeerBandwidth value (Dynamic)."));
3457 PROMEKI_DECLARE_ID(RtmpHandshakeMode, VariantSpec()
3458 .setType(DataTypeEnum)
3459 .setDefault(promeki::RtmpHandshakeMode::Auto)
3460 .setEnumType(promeki::RtmpHandshakeMode::Type)
3461 .setDescription(
"RTMP handshake mode."));
3464 PROMEKI_DECLARE_ID(RtmpFcSubscribe, VariantSpec()
3465 .setType(DataTypeBool)
3467 .setDescription(
"Emit FCSubscribe before play."));
3471 PROMEKI_DECLARE_ID(RtmpRepeatParameterSets,
3473 .setType(DataTypeBool)
3475 .setDescription(
"Repeat parameter sets ahead of every IDR."));
3478 PROMEKI_DECLARE_ID(RtmpEmitAnnexB, VariantSpec()
3479 .setType(DataTypeBool)
3481 .setDescription(
"Source-mode: emit Annex-B framing."));
3485 PROMEKI_DECLARE_ID(RtmpDropUntilKeyframe,
3487 .setType(DataTypeBool)
3489 .setDescription(
"Sink-mode: drop access units until first IDR."));
3492 PROMEKI_DECLARE_ID(RtmpStartTcpNoDelay, VariantSpec()
3493 .setType(DataTypeBool)
3495 .setDescription(
"Set TCP_NODELAY on the socket."));
3498 PROMEKI_DECLARE_ID(RtmpConnectTimeoutMs, VariantSpec()
3499 .setType(DataTypeInt32)
3500 .setDefault(int32_t(10000))
3502 .setDescription(
"Connect + TLS handshake budget."));
3505 PROMEKI_DECLARE_ID(RtmpHandshakeTimeoutMs,
3507 .setType(DataTypeInt32)
3508 .setDefault(int32_t(10000))
3510 .setDescription(
"RTMP handshake budget."));
3513 PROMEKI_DECLARE_ID(RtmpCommandTimeoutMs,
3515 .setType(DataTypeInt32)
3516 .setDefault(int32_t(5000))
3518 .setDescription(
"AMF0 command-reply timeout."));
3522 PROMEKI_DECLARE_ID(RtmpReadIdleTimeoutMs,
3524 .setType(DataTypeInt32)
3525 .setDefault(int32_t(30000))
3527 .setDescription(
"Source-mode dead-peer timeout (0 disables)."));
3530 PROMEKI_DECLARE_ID(RtmpRecvBufferBytes, VariantSpec()
3531 .setType(DataTypeInt32)
3532 .setDefault(int32_t(0))
3534 .setDescription(
"SO_RCVBUF (0 = kernel default)."));
3537 PROMEKI_DECLARE_ID(RtmpSendBufferBytes, VariantSpec()
3538 .setType(DataTypeInt32)
3539 .setDefault(int32_t(1048576))
3541 .setDescription(
"SO_SNDBUF."));
3543#if PROMEKI_ENABLE_TLS
3547 PROMEKI_DECLARE_ID(RtmpTlsContext, VariantSpec()
3548 .setType(DataTypeSslContext)
3549 .setDescription(
"RTMPS SslContext override."));
3553 PROMEKI_DECLARE_ID(RtmpTlsVerify, VariantSpec()
3554 .setType(DataTypeBool)
3556 .setDescription(
"RTMPS peer-verification."));
3559 PROMEKI_DECLARE_ID(RtmpVideoCodec,
3561 .setType(DataTypeVideoCodec)
3562 .setDefault(promeki::VideoCodec(promeki::VideoCodec::H264))
3563 .setDescription(
"Pin RTMP's video codec."));
3566 PROMEKI_DECLARE_ID(RtmpAudioCodec,
3568 .setType(DataTypeAudioCodec)
3569 .setDefault(promeki::AudioCodec(promeki::AudioCodec::AAC))
3570 .setDescription(
"Pin RTMP's audio codec."));
3573 PROMEKI_DECLARE_ID(RtmpVideoBitrate, VariantSpec()
3574 .setType(DataTypeInt32)
3575 .setDefault(int32_t(0))
3577 .setDescription(
"Target video bitrate (bps)."));
3580 PROMEKI_DECLARE_ID(RtmpAudioBitrate, VariantSpec()
3581 .setType(DataTypeInt32)
3582 .setDefault(int32_t(128000))
3584 .setDescription(
"Target audio bitrate (bps)."));
3587 PROMEKI_DECLARE_ID(RtmpVideoEncoderBackend,
3589 .setType(DataTypeString)
3590 .setDefault(String())
3591 .setDescription(
"Preferred video encoder backend (e.g. Nvidia)."));
3594 PROMEKI_DECLARE_ID(RtmpAudioEncoderBackend,
3596 .setType(DataTypeString)
3597 .setDefault(String())
3598 .setDescription(
"Preferred audio encoder backend."));
3601 PROMEKI_DECLARE_ID(RtmpKeyframeIntervalSec,
3603 .setType(DataTypeInt32)
3604 .setDefault(int32_t(2))
3606 .setDescription(
"GOP target in seconds."));
3609 PROMEKI_DECLARE_ID(RtmpDataEnabled, VariantSpec()
3610 .setType(DataTypeBool)
3612 .setDescription(
"Emit / consume onMetaData."));
3616 PROMEKI_DECLARE_ID(RtmpSendQueueDepth, VariantSpec()
3617 .setType(DataTypeInt32)
3618 .setDefault(int32_t(64))
3619 .setRange(int32_t(2), int32_t(1024))
3620 .setDescription(
"Packetizer→writer queue depth."));
3623 PROMEKI_DECLARE_ID(RtmpReadQueueDepth, VariantSpec()
3624 .setType(DataTypeInt32)
3625 .setDefault(int32_t(64))
3626 .setRange(int32_t(2), int32_t(1024))
3627 .setDescription(
"Depacketizer→aggregator queue depth."));
3637 PROMEKI_DECLARE_ID(RtmpVideoPacing,
3639 .setType(DataTypeEnum)
3640 .setDefault(promeki::RtmpVideoPacing::Internal)
3641 .setEnumType(promeki::RtmpVideoPacing::Type)
3642 .setDescription(
"RTMP sink video pacing source."));
3649 PROMEKI_DECLARE_ID(RtmpPaceSkipThresholdMs,
3651 .setType(DataTypeInt32)
3652 .setDefault(int32_t(0))
3653 .setRange(int32_t(0), int32_t(5000))
3654 .setDescription(
"PacingGate skip-verdict threshold (ms); "
3655 "0 = one frame interval."));
3662 PROMEKI_DECLARE_ID(RtmpPaceReanchorThresholdMs,
3664 .setType(DataTypeInt32)
3665 .setDefault(int32_t(0))
3666 .setRange(int32_t(0), int32_t(30000))
3667 .setDescription(
"PacingGate reanchor-verdict threshold (ms); "
3668 "0 = 8 × frame interval."));
3685 PROMEKI_DECLARE_ID(NdiSourceName, VariantSpec()
3686 .setType(DataTypeString)
3687 .setDefault(String())
3688 .setDescription(
"Canonical NDI source name "
3689 "(MachineName (Source)) for source mode."));
3694 PROMEKI_DECLARE_ID(NdiSendName, VariantSpec()
3695 .setType(DataTypeString)
3696 .setDefault(String(
"promeki"))
3697 .setDescription(
"Name advertised by the NDI sender."));
3703 PROMEKI_DECLARE_ID(NdiSendGroups, VariantSpec()
3704 .setType(DataTypeString)
3705 .setDefault(String())
3706 .setDescription(
"Comma-separated NDI groups for the sender."));
3710 PROMEKI_DECLARE_ID(NdiBandwidth, VariantSpec()
3711 .setType(DataTypeEnum)
3712 .setDefault(promeki::NdiBandwidth::Highest)
3713 .setEnumType(promeki::NdiBandwidth::Type)
3714 .setDescription(
"NDI receiver bandwidth tier."));
3722 PROMEKI_DECLARE_ID(NdiColorFormat, VariantSpec()
3723 .setType(DataTypeEnum)
3724 .setDefault(promeki::NdiColorFormat::Fastest)
3725 .setEnumType(promeki::NdiColorFormat::Type)
3726 .setDescription(
"NDI receiver color-format hint "
3727 "(default: Fastest — returns wire "
3728 "format, avoids PA16 from Advanced SDK)."));
3733 PROMEKI_DECLARE_ID(NdiExtraIps, VariantSpec()
3734 .setType(DataTypeString)
3735 .setDefault(String())
3736 .setDescription(
"Comma-separated extra IPs / hostnames for "
3737 "non-mDNS NDI discovery."));
3746 PROMEKI_DECLARE_ID(NdiSendClockVideo, VariantSpec()
3747 .setType(DataTypeBool)
3749 .setDescription(
"Enable sender-side video clock pacing."));
3753 PROMEKI_DECLARE_ID(NdiSendClockAudio, VariantSpec()
3754 .setType(DataTypeBool)
3756 .setDescription(
"Enable sender-side audio clock pacing."));
3762 PROMEKI_DECLARE_ID(NdiCaptureTimeoutMs, VariantSpec()
3763 .setType(DataTypeInt32)
3764 .setDefault(int32_t(100))
3765 .setRange(int32_t(10), int32_t(5000))
3766 .setDescription(
"recv_capture_v3 poll timeout in ms."));
3774 PROMEKI_DECLARE_ID(NdiFindWait, VariantSpec()
3775 .setType(DataTypeDuration)
3776 .setDefault(Duration::fromSeconds(3))
3777 .setDescription(
"Max wait for NdiDiscovery to "
3778 "register the requested source."));
3783 PROMEKI_DECLARE_ID(NdiReceiveBitDepth, VariantSpec()
3784 .setType(DataTypeEnum)
3785 .setDefault(promeki::NdiReceiveBitDepth::Auto)
3786 .setEnumType(promeki::NdiReceiveBitDepth::Type)
3787 .setDescription(
"Promised bit depth for received "
3788 "P216 frames (Auto = 16)."));
3795 PROMEKI_DECLARE_ID(V4l2DevicePath, VariantSpec()
3796 .setType(DataTypeString)
3797 .setDefault(String())
3798 .setDescription(
"V4L2 device node path."));
3801 PROMEKI_DECLARE_ID(V4l2BufferCount, VariantSpec()
3802 .setType(DataTypeInt32)
3803 .setDefault(int32_t(4))
3804 .setRange(int32_t(2), int32_t(32))
3805 .setDescription(
"Number of V4L2 MMAP capture buffers."));
3811 PROMEKI_DECLARE_ID(V4l2AudioDevice,
3813 .setType(DataTypeString)
3814 .setDefault(String(
"auto"))
3815 .setDescription(
"ALSA capture device for paired audio. "
3816 "\"auto\" = auto-detect, \"none\" or empty = disabled."));
3825 PROMEKI_DECLARE_ID(V4l2Brightness, VariantSpec()
3826 .setType(DataTypeInt32)
3827 .setDefault(int32_t(-1))
3828 .setDescription(
"Brightness (-1 = device default)."));
3831 PROMEKI_DECLARE_ID(V4l2Contrast, VariantSpec()
3832 .setType(DataTypeInt32)
3833 .setDefault(int32_t(-1))
3834 .setDescription(
"Contrast (-1 = device default)."));
3837 PROMEKI_DECLARE_ID(V4l2Saturation, VariantSpec()
3838 .setType(DataTypeInt32)
3839 .setDefault(int32_t(-1))
3840 .setDescription(
"Saturation (-1 = device default)."));
3843 PROMEKI_DECLARE_ID(V4l2Hue, VariantSpec()
3844 .setType(DataTypeInt32)
3845 .setDefault(int32_t(-1))
3846 .setDescription(
"Hue (-1 = device default)."));
3849 PROMEKI_DECLARE_ID(V4l2Gamma, VariantSpec()
3850 .setType(DataTypeInt32)
3851 .setDefault(int32_t(-1))
3852 .setDescription(
"Gamma (-1 = device default)."));
3855 PROMEKI_DECLARE_ID(V4l2Sharpness, VariantSpec()
3856 .setType(DataTypeInt32)
3857 .setDefault(int32_t(-1))
3858 .setDescription(
"Sharpness (-1 = device default)."));
3862 PROMEKI_DECLARE_ID(V4l2BacklightComp,
3864 .setType(DataTypeInt32)
3865 .setDefault(int32_t(-1))
3866 .setDescription(
"Backlight compensation (-1 = device default)."));
3870 PROMEKI_DECLARE_ID(V4l2WhiteBalanceTemp,
3872 .setType(DataTypeInt32)
3873 .setDefault(int32_t(-1))
3874 .setDescription(
"White balance temperature in K (-1 = device default)."));
3879 V4l2AutoWhiteBalance,
3881 .setType(DataTypeInt32)
3882 .setDefault(int32_t(-1))
3883 .setRange(int32_t(-1), int32_t(1))
3884 .setDescription(
"Auto white balance (-1 = device default, 0 = off, 1 = on)."));
3888 PROMEKI_DECLARE_ID(V4l2ExposureAbsolute,
3890 .setType(DataTypeInt32)
3891 .setDefault(int32_t(-1))
3892 .setDescription(
"Exposure time in 100us units (-1 = device default)."));
3895 PROMEKI_DECLARE_ID(V4l2AutoExposure,
3897 .setType(DataTypeEnum)
3899 .setEnumType(V4l2ExposureMode::Type)
3900 .setDescription(
"Auto exposure mode (empty = device default)."));
3903 PROMEKI_DECLARE_ID(V4l2Gain, VariantSpec()
3904 .setType(DataTypeInt32)
3905 .setDefault(int32_t(-1))
3906 .setDescription(
"Gain (-1 = device default)."));
3909 PROMEKI_DECLARE_ID(V4l2PowerLineFreq,
3911 .setType(DataTypeEnum)
3913 .setEnumType(V4l2PowerLineMode::Type)
3914 .setDescription(
"Power line frequency (empty = device default)."));
3919 PROMEKI_DECLARE_ID(V4l2JpegQuality,
3921 .setType(DataTypeInt32)
3922 .setDefault(int32_t(-1))
3923 .setDescription(
"JPEG compression quality 1-100 (-1 = device default)."));
3945 PROMEKI_DECLARE_ID(TranscriptionStreamIndex,
3947 .setType(DataTypeInt32)
3948 .setDefault(int32_t(-1))
3949 .setMin(int32_t(-1))
3951 "0-based audio stream index on the source Frame "
3952 "for transcription (-1 = first PCM audio payload found)."));
3965 PROMEKI_DECLARE_ID(TranscriptionChannelMode,
3967 .setType(DataTypeEnum)
3968 .setEnumType(promeki::TranscriptionChannelMode::Type)
3969 .setDefault(promeki::TranscriptionChannelMode(
3970 promeki::TranscriptionChannelMode::ChannelMap))
3972 "How the engine selects channels from the input PCM payload "
3973 "(ChannelMap, ChannelIndex, DownmixAll)."));
3989 PROMEKI_DECLARE_ID(TranscriptionChannelMap,
3991 .setType(DataTypeAudioChannelMap)
3992 .setDefault(promeki::AudioChannelMap())
3994 "AudioChannelMap selecting roles for role-based "
3995 "transcription channel selection."));
4000 PROMEKI_DECLARE_ID(TranscriptionChannelIndex,
4002 .setType(DataTypeInt32)
4003 .setDefault(int32_t(0))
4006 "Single 0-based channel index for index-based transcription "
4007 "channel selection (used when ChannelMode = ChannelIndex)."));
4016 PROMEKI_DECLARE_ID(TranscriptionLanguage,
4018 .setType(DataTypeString)
4019 .setDefault(String())
4021 "BCP 47 language hint (e.g. \"en-US\"); "
4022 "empty = engine default / auto-detect."));
4036 PROMEKI_DECLARE_ID(TranscriptionSessionMode,
4038 .setType(DataTypeEnum)
4039 .setEnumType(promeki::TranscriptionMode::Type)
4040 .setDefault(promeki::TranscriptionMode(
4041 promeki::TranscriptionMode::Streaming))
4043 "Streaming (interim partials) vs Batch (final-only on flush) "
4044 "session behaviour."));
4054 PROMEKI_DECLARE_ID(TranscriptionModelHint,
4056 .setType(DataTypeString)
4057 .setDefault(String())
4059 "Engine-specific model identifier hint "
4060 "(empty = engine default)."));
4069 PROMEKI_DECLARE_ID(TranscriptionDiarization,
4071 .setType(DataTypeBool)
4074 "Request per-cue speaker diarization "
4075 "(populates Subtitle::speaker when supported)."));
4084 PROMEKI_DECLARE_ID(TranscriptionWordTimestamps,
4086 .setType(DataTypeBool)
4089 "Emit word-level timestamped cues rather than "
4090 "sentence-level cues."));
4100 PROMEKI_DECLARE_ID(TranscriptionVad,
4102 .setType(DataTypeBool)
4105 "Enable voice-activity detection gating before decode."));
4114 PROMEKI_DECLARE_ID(TranscriptionEndpointSilence,
4116 .setType(DataTypeDuration)
4117 .setDefault(Duration::zero())
4119 "Streaming endpoint silence threshold "
4120 "(Duration::zero() = engine default)."));
4135 PROMEKI_DECLARE_ID(SubtitleCueMaxCharsPerLine,
4137 .setType(DataTypeInt32)
4138 .setDefault(int32_t(42))
4141 "Maximum characters per cue line (0 = no wrap)."));
4145 PROMEKI_DECLARE_ID(SubtitleCueMaxLines,
4147 .setType(DataTypeInt32)
4148 .setDefault(int32_t(2))
4150 .setDescription(
"Maximum lines per cue."));
4157 PROMEKI_DECLARE_ID(SubtitleCueMinDuration,
4159 .setType(DataTypeDuration)
4160 .setDefault(Duration::fromMilliseconds(1000))
4161 .setDescription(
"Minimum cue display duration."));
4167 PROMEKI_DECLARE_ID(SubtitleCueMaxDuration,
4169 .setType(DataTypeDuration)
4170 .setDefault(Duration::fromMilliseconds(7000))
4171 .setDescription(
"Maximum cue display duration."));
4179 PROMEKI_DECLARE_ID(SubtitleCueEmitPartials,
4181 .setType(DataTypeBool)
4184 "Emit cues for partial transcripts (default off)."));
4191 PROMEKI_DECLARE_ID(SubtitleCueAnchor,
4193 .setType(DataTypeEnum)
4194 .setEnumType(promeki::SubtitleAnchor::Type)
4195 .setDefault(promeki::SubtitleAnchor(
4196 promeki::SubtitleAnchor::BottomCenter))
4197 .setDescription(
"Default cue anchor for emitted Subtitles."));
4218 PROMEKI_DECLARE_ID(Ntv2DeviceIndex,
4220 .setType(DataTypeInt32)
4221 .setDefault(int32_t(-1))
4222 .setDescription(
"AJA device index (0-based); -1 = use Ntv2DeviceName."));
4229 PROMEKI_DECLARE_ID(Ntv2DeviceName,
4231 .setType(DataTypeString)
4232 .setDefault(String())
4233 .setDescription(
"AJA device locator (name shorthand or \"serial:NNN\")."));
4239 PROMEKI_DECLARE_ID(Ntv2Channel,
4241 .setType(DataTypeInt32)
4242 .setDefault(int32_t(1))
4243 .setRange(int32_t(1), int32_t(8))
4244 .setDescription(
"1-based logical channel index on the AJA card."));
4250 PROMEKI_DECLARE_ID(Ntv2AudioSystem,
4252 .setType(DataTypeInt32)
4253 .setDefault(int32_t(-1))
4254 .setRange(int32_t(-1), int32_t(8))
4255 .setDescription(
"NTV2 audio system (-1 = auto-pair with channel, 0 = disabled, 1..N = explicit)."));
4262 PROMEKI_DECLARE_ID(Ntv2WithAnc,
4264 .setType(DataTypeBool)
4266 .setDescription(
"Enable ANC extractor / inserter for this channel."));
4273 PROMEKI_DECLARE_ID(Ntv2RetailServices,
4275 .setType(DataTypeBool)
4277 .setDescription(
"Keep AJA retail services running (default false → OEM tasks)."));
4282 PROMEKI_DECLARE_ID(Ntv2MultiFormatMode,
4284 .setType(DataTypeBool)
4286 .setDescription(
"Allow per-channel independent video formats."));
4296 PROMEKI_DECLARE_ID(Ntv2DisableOnBoardCsc,
4298 .setType(DataTypeBool)
4301 "Refuse on-board CSC insertion in routing / "
4302 "format negotiation; force a software CSC bridge "
4303 "on every RGB ↔ YCbCr boundary."));
4311 PROMEKI_DECLARE_ID(Ntv2BufferLockMode,
4313 .setType(DataTypeBool)
4315 .setDescription(
"Page-lock host buffers for DMA throughput."));
4323 PROMEKI_DECLARE_ID(Ntv2VbiTimeoutMs,
4325 .setType(DataTypeInt32)
4326 .setDefault(int32_t(50))
4327 .setRange(int32_t(5), int32_t(1000))
4328 .setDescription(
"WaitForInputVerticalInterrupt poll timeout in ms."));
4340 PROMEKI_DECLARE_ID(Ntv2SignalPollIntervalVbi,
4342 .setType(DataTypeInt32)
4343 .setDefault(int32_t(15))
4344 .setRange(int32_t(0), int32_t(600))
4346 "Input-signal poll cadence in VBIs; 0 disables "
4347 "the periodic GetInputVideoFormat check."));
4357 PROMEKI_DECLARE_ID(Ntv2PaceSkipThresholdMs,
4359 .setType(DataTypeInt32)
4360 .setDefault(int32_t(0))
4361 .setRange(int32_t(0), int32_t(5000))
4363 "External-pacing PacingGate skip threshold (ms); "
4364 "0 = one frame interval."));
4373 PROMEKI_DECLARE_ID(Ntv2PaceReanchorThresholdMs,
4375 .setType(DataTypeInt32)
4376 .setDefault(int32_t(0))
4377 .setRange(int32_t(0), int32_t(30000))
4379 "External-pacing PacingGate reanchor threshold "
4380 "(ms); 0 = 8 × frame interval."));
4394 PROMEKI_DECLARE_ID(Ntv2VpidEnable,
4396 .setType(DataTypeBool)
4399 "Enable NTV2 VPID overrides "
4400 "(transfer / colorimetry / luminance / RGB range)."));
4412 PROMEKI_DECLARE_ID(Ntv2VpidTransferOverride,
4414 .setType(DataTypeEnum)
4415 .setDefault(promeki::TransferCharacteristics::Auto)
4416 .setEnumType(promeki::TransferCharacteristics::Type)
4418 "Sink VPID transfer override "
4419 "(Auto = derive from frame colour)."));
4428 PROMEKI_DECLARE_ID(Ntv2VpidColorimetryOverride,
4430 .setType(DataTypeEnum)
4431 .setDefault(promeki::ColorPrimaries::Auto)
4432 .setEnumType(promeki::ColorPrimaries::Type)
4434 "Sink VPID colorimetry override "
4435 "(Auto = derive from frame colour)."));
4445 PROMEKI_DECLARE_ID(Ntv2VpidRangeOverride,
4447 .setType(DataTypeEnum)
4448 .setDefault(promeki::VideoRange::Unknown)
4449 .setEnumType(promeki::VideoRange::Type)
4451 "Sink VPID RGB-range override "
4452 "(Unknown = derive from frame range)."));
4464using MediaConfigID = MediaConfig::ID;
4466PROMEKI_NAMESPACE_END