13#include <promeki/config.h>
14#if PROMEKI_ENABLE_CORE
18PROMEKI_NAMESPACE_BEGIN
60class VideoScanMode :
public TypedEnum<VideoScanMode> {
62 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"VideoScanMode",
"Video Scan Mode", 0,
63 {
"Unknown", 0,
"Unknown"},
64 {
"Progressive", 1,
"Progressive"},
65 {
"Interlaced", 2,
"Interlaced (Unknown Field Order)"},
66 {
"InterlacedEvenFirst", 3,
"Interlaced, Even/Top Field First"},
67 {
"InterlacedOddFirst", 4,
"Interlaced, Odd/Bottom Field First"},
68 {
"PsF", 5,
"Progressive Segmented Frame (PsF)"});
70 using TypedEnum<VideoScanMode>::TypedEnum;
72 static const VideoScanMode Unknown;
73 static const VideoScanMode Progressive;
74 static const VideoScanMode Interlaced;
75 static const VideoScanMode InterlacedEvenFirst;
76 static const VideoScanMode InterlacedOddFirst;
77 static const VideoScanMode PsF;
88 bool isInterlaced()
const {
89 const int v = value();
96inline const VideoScanMode VideoScanMode::Unknown{0};
97inline const VideoScanMode VideoScanMode::Progressive{1};
98inline const VideoScanMode VideoScanMode::Interlaced{2};
99inline const VideoScanMode VideoScanMode::InterlacedEvenFirst{3};
100inline const VideoScanMode VideoScanMode::InterlacedOddFirst{4};
101inline const VideoScanMode VideoScanMode::PsF{5};
122class VideoConnectorKind :
public TypedEnum<VideoConnectorKind> {
124 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"VideoConnectorKind",
"Video Connector Kind", 0,
125 {
"Auto", 0,
"Automatic"},
126 {
"Sdi", 1,
"SDI (BNC Coax)"},
127 {
"Hdmi", 2,
"HDMI (Type-A)"},
128 {
"DisplayPort", 3,
"DisplayPort"},
129 {
"Composite", 4,
"Composite (Analog)"},
130 {
"Component", 5,
"Component (Analog YPbPr)"},
131 {
"SVideo", 6,
"S-Video (Y/C)"},
132 {
"Sfp", 7,
"SFP/SFP+ (SDI-over-IP)"});
134 using TypedEnum<VideoConnectorKind>::TypedEnum;
136 static const VideoConnectorKind Auto;
137 static const VideoConnectorKind Sdi;
138 static const VideoConnectorKind Hdmi;
139 static const VideoConnectorKind DisplayPort;
140 static const VideoConnectorKind Composite;
141 static const VideoConnectorKind Component;
142 static const VideoConnectorKind SVideo;
143 static const VideoConnectorKind Sfp;
146inline const VideoConnectorKind VideoConnectorKind::Auto{0};
147inline const VideoConnectorKind VideoConnectorKind::Sdi{1};
148inline const VideoConnectorKind VideoConnectorKind::Hdmi{2};
149inline const VideoConnectorKind VideoConnectorKind::DisplayPort{3};
150inline const VideoConnectorKind VideoConnectorKind::Composite{4};
151inline const VideoConnectorKind VideoConnectorKind::Component{5};
152inline const VideoConnectorKind VideoConnectorKind::SVideo{6};
153inline const VideoConnectorKind VideoConnectorKind::Sfp{7};
181class SdiLinkStandard :
public TypedEnum<SdiLinkStandard> {
183 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"SdiLinkStandard",
"SDI Link Standard", 0,
184 {
"Auto", 0,
"Automatic"},
185 {
"SL_SD", 1,
"Single-Link SD-SDI (ST 259)"},
186 {
"SL_HD", 2,
"Single-Link HD-SDI (ST 292)"},
187 {
"DL_HD", 3,
"Dual-Link HD-SDI (ST 372)"},
188 {
"SL_3GA", 4,
"Single-Link 3G-SDI Level A (ST 425-1)"},
189 {
"SL_3GB", 5,
"Single-Link 3G-SDI Level B (ST 425-1)"},
190 {
"DL_3GB", 6,
"Dual-Link 3G-SDI Level B"},
191 {
"DL_3G", 7,
"Dual-Link 3G-SDI (ST 425-2)"},
192 {
"QL_3G_SQD", 8,
"Quad-Link 3G-SDI, Square Division (ST 425-3)"},
193 {
"QL_3G_2SI", 9,
"Quad-Link 3G-SDI, 2-Sample Interleave (ST 425-5)"},
194 {
"SL_6G", 10,
"Single-Link 6G-SDI (ST 2081)"},
195 {
"SL_12G", 11,
"Single-Link 12G-SDI (ST 2082)"},
196 {
"SL_24G", 12,
"Single-Link 24G-SDI (ST 2083)"});
198 using TypedEnum<SdiLinkStandard>::TypedEnum;
200 static const SdiLinkStandard Auto;
201 static const SdiLinkStandard SL_SD;
202 static const SdiLinkStandard SL_HD;
203 static const SdiLinkStandard DL_HD;
204 static const SdiLinkStandard SL_3GA;
205 static const SdiLinkStandard SL_3GB;
206 static const SdiLinkStandard DL_3GB;
207 static const SdiLinkStandard DL_3G;
208 static const SdiLinkStandard QL_3G_SQD;
209 static const SdiLinkStandard QL_3G_2SI;
210 static const SdiLinkStandard SL_6G;
211 static const SdiLinkStandard SL_12G;
212 static const SdiLinkStandard SL_24G;
215inline const SdiLinkStandard SdiLinkStandard::Auto{0};
216inline const SdiLinkStandard SdiLinkStandard::SL_SD{1};
217inline const SdiLinkStandard SdiLinkStandard::SL_HD{2};
218inline const SdiLinkStandard SdiLinkStandard::DL_HD{3};
219inline const SdiLinkStandard SdiLinkStandard::SL_3GA{4};
220inline const SdiLinkStandard SdiLinkStandard::SL_3GB{5};
221inline const SdiLinkStandard SdiLinkStandard::DL_3GB{6};
222inline const SdiLinkStandard SdiLinkStandard::DL_3G{7};
223inline const SdiLinkStandard SdiLinkStandard::QL_3G_SQD{8};
224inline const SdiLinkStandard SdiLinkStandard::QL_3G_2SI{9};
225inline const SdiLinkStandard SdiLinkStandard::SL_6G{10};
226inline const SdiLinkStandard SdiLinkStandard::SL_12G{11};
227inline const SdiLinkStandard SdiLinkStandard::SL_24G{12};
271class SdiWireFormat :
public TypedEnum<SdiWireFormat> {
273 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"SdiWireFormat",
"SDI Wire Format", 0,
274 {
"Auto", 0,
"Automatic"},
275 {
"YCbCr_422_10", 1,
"Y'CbCr 4:2:2, 10-bit"},
276 {
"YCbCr_422_12", 2,
"Y'CbCr 4:2:2, 12-bit"},
277 {
"YCbCr_444_10", 3,
"Y'CbCr 4:4:4, 10-bit"},
278 {
"YCbCr_444_12", 4,
"Y'CbCr 4:4:4, 12-bit"},
279 {
"RGB_444_10", 5,
"R'G'B' 4:4:4, 10-bit"},
280 {
"RGB_444_12", 6,
"R'G'B' 4:4:4, 12-bit"},
281 {
"RGBA_444_10", 7,
"R'G'B'A' 4:4:4:4, 10-bit"});
283 using TypedEnum<SdiWireFormat>::TypedEnum;
285 static const SdiWireFormat Auto;
286 static const SdiWireFormat YCbCr_422_10;
287 static const SdiWireFormat YCbCr_422_12;
288 static const SdiWireFormat YCbCr_444_10;
289 static const SdiWireFormat YCbCr_444_12;
290 static const SdiWireFormat RGB_444_10;
291 static const SdiWireFormat RGB_444_12;
292 static const SdiWireFormat RGBA_444_10;
295inline const SdiWireFormat SdiWireFormat::Auto{0};
296inline const SdiWireFormat SdiWireFormat::YCbCr_422_10{1};
297inline const SdiWireFormat SdiWireFormat::YCbCr_422_12{2};
298inline const SdiWireFormat SdiWireFormat::YCbCr_444_10{3};
299inline const SdiWireFormat SdiWireFormat::YCbCr_444_12{4};
300inline const SdiWireFormat SdiWireFormat::RGB_444_10{5};
301inline const SdiWireFormat SdiWireFormat::RGB_444_12{6};
302inline const SdiWireFormat SdiWireFormat::RGBA_444_10{7};
335class VpidSampling :
public TypedEnum<VpidSampling> {
337 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"VpidSampling",
"VPID Sampling Structure", 16,
338 {
"Unknown", 16,
"Unknown / Reserved"},
339 {
"YCbCr_422", 0x0,
"Y'CbCr 4:2:2"},
340 {
"YCbCr_444", 0x1,
"Y'CbCr 4:4:4"},
341 {
"RGB_444", 0x2,
"R'G'B' 4:4:4"},
342 {
"YCbCr_420", 0x3,
"Y'CbCr 4:2:0"},
343 {
"YCbCrA_4224", 0x4,
"Y'CbCr+A 4:2:2:4"},
344 {
"YCbCrA_4444", 0x5,
"Y'CbCr+A 4:4:4:4"},
345 {
"RGBA_4444", 0x6,
"R'G'B'+A 4:4:4:4"},
346 {
"ST2048_2_FS", 0x7,
"SMPTE ST 2048-2 FS"},
347 {
"YCbCrD_4224", 0x8,
"Y'CbCr+D 4:2:2:4"},
348 {
"YCbCrD_4444", 0x9,
"Y'CbCr+D 4:4:4:4"},
349 {
"RGBD_4444", 0xA,
"R'G'B'+D 4:4:4:4"},
350 {
"XYZ_444", 0xE,
"X'Y'Z' 4:4:4"});
352 using TypedEnum<VpidSampling>::TypedEnum;
354 static const VpidSampling Unknown;
355 static const VpidSampling YCbCr_422;
356 static const VpidSampling YCbCr_444;
357 static const VpidSampling RGB_444;
358 static const VpidSampling YCbCr_420;
359 static const VpidSampling YCbCrA_4224;
360 static const VpidSampling YCbCrA_4444;
361 static const VpidSampling RGBA_4444;
362 static const VpidSampling ST2048_2_FS;
363 static const VpidSampling YCbCrD_4224;
364 static const VpidSampling YCbCrD_4444;
365 static const VpidSampling RGBD_4444;
366 static const VpidSampling XYZ_444;
369inline const VpidSampling VpidSampling::Unknown{16};
370inline const VpidSampling VpidSampling::YCbCr_422{0x0};
371inline const VpidSampling VpidSampling::YCbCr_444{0x1};
372inline const VpidSampling VpidSampling::RGB_444{0x2};
373inline const VpidSampling VpidSampling::YCbCr_420{0x3};
374inline const VpidSampling VpidSampling::YCbCrA_4224{0x4};
375inline const VpidSampling VpidSampling::YCbCrA_4444{0x5};
376inline const VpidSampling VpidSampling::RGBA_4444{0x6};
377inline const VpidSampling VpidSampling::ST2048_2_FS{0x7};
378inline const VpidSampling VpidSampling::YCbCrD_4224{0x8};
379inline const VpidSampling VpidSampling::YCbCrD_4444{0x9};
380inline const VpidSampling VpidSampling::RGBD_4444{0xA};
381inline const VpidSampling VpidSampling::XYZ_444{0xE};
399class HdmiSpecVersion :
public TypedEnum<HdmiSpecVersion> {
401 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"HdmiSpecVersion",
"HDMI Specification Version", 0,
402 {
"Auto", 0,
"Automatic (EDID)"},
403 {
"Hdmi14", 1,
"HDMI 1.4b"},
404 {
"Hdmi20", 2,
"HDMI 2.0/2.0b"},
405 {
"Hdmi21", 3,
"HDMI 2.1"});
407 using TypedEnum<HdmiSpecVersion>::TypedEnum;
409 static const HdmiSpecVersion Auto;
410 static const HdmiSpecVersion Hdmi14;
411 static const HdmiSpecVersion Hdmi20;
412 static const HdmiSpecVersion Hdmi21;
415inline const HdmiSpecVersion HdmiSpecVersion::Auto{0};
416inline const HdmiSpecVersion HdmiSpecVersion::Hdmi14{1};
417inline const HdmiSpecVersion HdmiSpecVersion::Hdmi20{2};
418inline const HdmiSpecVersion HdmiSpecVersion::Hdmi21{3};
440class VideoReferenceSource :
public TypedEnum<VideoReferenceSource> {
442 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"VideoReferenceSource",
"Video Reference Source", 0,
443 {
"FreeRun", 0,
"Free Run (Internal)"},
444 {
"Genlock", 1,
"Genlock (Black Burst / Tri-Level)"},
445 {
"External", 2,
"External Reference"},
446 {
"FromSignal", 3,
"Lock to Input Signal"},
447 {
"Ptp", 4,
"PTP Grandmaster (IEEE 1588)"},
448 {
"Word", 5,
"Word Clock"});
450 using TypedEnum<VideoReferenceSource>::TypedEnum;
452 static const VideoReferenceSource FreeRun;
453 static const VideoReferenceSource Genlock;
454 static const VideoReferenceSource External;
455 static const VideoReferenceSource FromSignal;
456 static const VideoReferenceSource Ptp;
457 static const VideoReferenceSource Word;
460inline const VideoReferenceSource VideoReferenceSource::FreeRun{0};
461inline const VideoReferenceSource VideoReferenceSource::Genlock{1};
462inline const VideoReferenceSource VideoReferenceSource::External{2};
463inline const VideoReferenceSource VideoReferenceSource::FromSignal{3};
464inline const VideoReferenceSource VideoReferenceSource::Ptp{4};
465inline const VideoReferenceSource VideoReferenceSource::Word{5};
482class VideoReferenceRateFamily :
public TypedEnum<VideoReferenceRateFamily> {
484 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"VideoReferenceRateFamily",
"Video Reference Rate Family", 0,
485 {
"Auto", 0,
"Automatic"},
486 {
"Integer", 1,
"Integer Rate (148.5 MHz)"},
487 {
"Fractional", 2,
"NTSC Fractional (148.5/1.001 MHz)"});
489 using TypedEnum<VideoReferenceRateFamily>::TypedEnum;
491 static const VideoReferenceRateFamily Auto;
492 static const VideoReferenceRateFamily Integer;
493 static const VideoReferenceRateFamily Fractional;
496inline const VideoReferenceRateFamily VideoReferenceRateFamily::Auto{0};
497inline const VideoReferenceRateFamily VideoReferenceRateFamily::Integer{1};
498inline const VideoReferenceRateFamily VideoReferenceRateFamily::Fractional{2};