13#include <promeki/config.h>
14#if PROMEKI_ENABLE_CORE
18PROMEKI_NAMESPACE_BEGIN
30class ChromaSubsampling :
public TypedEnum<ChromaSubsampling> {
32 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"ChromaSubsampling",
"Chroma Subsampling", 1,
33 {
"YUV444", 0,
"4:4:4 (No Subsampling)"},
34 {
"YUV422", 1,
"4:2:2"},
35 {
"YUV420", 2,
"4:2:0"});
37 using TypedEnum<ChromaSubsampling>::TypedEnum;
39 static const ChromaSubsampling YUV444;
40 static const ChromaSubsampling YUV422;
41 static const ChromaSubsampling YUV420;
44inline const ChromaSubsampling ChromaSubsampling::YUV444{0};
45inline const ChromaSubsampling ChromaSubsampling::YUV422{1};
46inline const ChromaSubsampling ChromaSubsampling::YUV420{2};
58class CscPath :
public TypedEnum<CscPath> {
60 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"CscPath",
"Color Conversion Path", 0,
61 {
"Optimized", 0,
"Optimized (Fast Path)"},
62 {
"Scalar", 1,
"Scalar Reference (SIMD Off)"});
64 using TypedEnum<CscPath>::TypedEnum;
66 static const CscPath Optimized;
67 static const CscPath Scalar;
70inline const CscPath CscPath::Optimized{0};
71inline const CscPath CscPath::Scalar{1};
88class CscToneMapping :
public TypedEnum<CscToneMapping> {
90 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"CscToneMapping",
"HDR Tone Mapping", 0,
91 {
"Auto", 0,
"Auto (HDR-to-SDR)"},
92 {
"Enabled", 1,
"Always Enabled"},
93 {
"Disabled", 2,
"Disabled"});
95 using TypedEnum<CscToneMapping>::TypedEnum;
97 static const CscToneMapping Auto;
98 static const CscToneMapping Enabled;
99 static const CscToneMapping Disabled;
102inline const CscToneMapping CscToneMapping::Auto{0};
103inline const CscToneMapping CscToneMapping::Enabled{1};
104inline const CscToneMapping CscToneMapping::Disabled{2};
131class CscToneMapOperator :
public TypedEnum<CscToneMapOperator> {
133 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"CscToneMapOperator",
"Tone Mapping Operator", 0,
134 {
"Bt2390", 0,
"ITU-R BT.2390 EETF"},
135 {
"Reinhard", 1,
"Reinhard"},
136 {
"Hable", 2,
"Hable (Uncharted 2 Filmic)"},
138 {
"Bt2446a", 4,
"ITU-R BT.2446 Method A"});
140 using TypedEnum<CscToneMapOperator>::TypedEnum;
142 static const CscToneMapOperator Bt2390;
143 static const CscToneMapOperator Reinhard;
144 static const CscToneMapOperator Hable;
145 static const CscToneMapOperator Aces;
146 static const CscToneMapOperator Bt2446a;
149inline const CscToneMapOperator CscToneMapOperator::Bt2390{0};
150inline const CscToneMapOperator CscToneMapOperator::Reinhard{1};
151inline const CscToneMapOperator CscToneMapOperator::Hable{2};
152inline const CscToneMapOperator CscToneMapOperator::Aces{3};
153inline const CscToneMapOperator CscToneMapOperator::Bt2446a{4};
173class VideoRange :
public TypedEnum<VideoRange> {
175 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"VideoRange",
"Video Range", 0,
176 {
"Unknown", 0,
"Unknown (Auto-Derive)"},
177 {
"Limited", 1,
"Limited (Studio/Broadcast)"},
178 {
"Full", 2,
"Full (0..Max)"});
180 using TypedEnum<VideoRange>::TypedEnum;
182 static const VideoRange Unknown;
183 static const VideoRange Limited;
184 static const VideoRange Full;
187inline const VideoRange VideoRange::Unknown{0};
188inline const VideoRange VideoRange::Limited{1};
189inline const VideoRange VideoRange::Full{2};
203class ColorPrimaries :
public TypedEnum<ColorPrimaries> {
210 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"ColorPrimaries",
"Color Primaries", 255,
211 {
"BT709", 1,
"BT.709 (Rec.709 / sRGB)"},
212 {
"Unspecified", 2,
"Unspecified"},
213 {
"BT470M", 4,
"BT.470 System M (NTSC 1953)"},
214 {
"BT470BG", 5,
"BT.470 System B/G (PAL/SECAM)"},
215 {
"SMPTE170M", 6,
"SMPTE 170M (SMPTE-C / NTSC)"},
216 {
"SMPTE240M", 7,
"SMPTE 240M"},
217 {
"Film", 8,
"Generic Film (Illuminant C)"},
218 {
"BT2020", 9,
"BT.2020 (UHDTV / HDR)"},
219 {
"SMPTE428", 10,
"SMPTE 428 (CIE XYZ)"},
220 {
"SMPTE431", 11,
"SMPTE 431 (DCI-P3)"},
221 {
"SMPTE432", 12,
"SMPTE 432 (Display P3)"},
222 {
"JEDEC_P22", 22,
"JEDEC P22 (EBU Tech 3213)"},
223 {
"Auto", 255,
"Auto (Derive from Source)"});
225 using TypedEnum<ColorPrimaries>::TypedEnum;
227 static const ColorPrimaries Auto;
228 static const ColorPrimaries Unspecified;
229 static const ColorPrimaries BT709;
230 static const ColorPrimaries BT470M;
231 static const ColorPrimaries BT470BG;
232 static const ColorPrimaries SMPTE170M;
233 static const ColorPrimaries SMPTE240M;
234 static const ColorPrimaries Film;
235 static const ColorPrimaries BT2020;
236 static const ColorPrimaries SMPTE428;
237 static const ColorPrimaries SMPTE431;
238 static const ColorPrimaries SMPTE432;
239 static const ColorPrimaries JEDEC_P22;
242inline const ColorPrimaries ColorPrimaries::Auto{255};
243inline const ColorPrimaries ColorPrimaries::Unspecified{2};
244inline const ColorPrimaries ColorPrimaries::BT709{1};
245inline const ColorPrimaries ColorPrimaries::BT470M{4};
246inline const ColorPrimaries ColorPrimaries::BT470BG{5};
247inline const ColorPrimaries ColorPrimaries::SMPTE170M{6};
248inline const ColorPrimaries ColorPrimaries::SMPTE240M{7};
249inline const ColorPrimaries ColorPrimaries::Film{8};
250inline const ColorPrimaries ColorPrimaries::BT2020{9};
251inline const ColorPrimaries ColorPrimaries::SMPTE428{10};
252inline const ColorPrimaries ColorPrimaries::SMPTE431{11};
253inline const ColorPrimaries ColorPrimaries::SMPTE432{12};
254inline const ColorPrimaries ColorPrimaries::JEDEC_P22{22};
265class TransferCharacteristics :
public TypedEnum<TransferCharacteristics> {
275 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"TransferCharacteristics",
"Transfer Characteristics", 255,
276 {
"BT709", 1,
"BT.709 (Rec.709 Gamma)"},
277 {
"Unspecified", 2,
"Unspecified"},
278 {
"Gamma22", 4,
"Gamma 2.2"},
279 {
"Gamma28", 5,
"Gamma 2.8"},
280 {
"SMPTE170M", 6,
"SMPTE 170M"},
281 {
"SMPTE240M", 7,
"SMPTE 240M"},
282 {
"Linear", 8,
"Linear"},
283 {
"Log", 9,
"Logarithmic (100:1)"},
284 {
"LogSqrt", 10,
"Logarithmic (316:1 Sqrt)"},
285 {
"IEC61966_2_4", 11,
"xvYCC (IEC 61966-2-4)"},
286 {
"BT1361", 12,
"BT.1361 Extended Gamut"},
287 {
"SRGB", 13,
"sRGB / sYCC (IEC 61966-2-1)"},
288 {
"BT2020_10", 14,
"BT.2020 (10-bit)"},
289 {
"BT2020_12", 15,
"BT.2020 (12-bit)"},
290 {
"SMPTE2084", 16,
"PQ (SMPTE 2084 / HDR10)"},
291 {
"SMPTE428", 17,
"SMPTE 428 (DCI XYZ)"},
292 {
"ARIB_STD_B67", 18,
"HLG (ARIB STD-B67)"},
293 {
"Auto", 255,
"Auto (Derive from Source)"});
295 using TypedEnum<TransferCharacteristics>::TypedEnum;
297 static const TransferCharacteristics Auto;
298 static const TransferCharacteristics Unspecified;
299 static const TransferCharacteristics BT709;
300 static const TransferCharacteristics Gamma22;
301 static const TransferCharacteristics Gamma28;
302 static const TransferCharacteristics SMPTE170M;
303 static const TransferCharacteristics SMPTE240M;
304 static const TransferCharacteristics Linear;
305 static const TransferCharacteristics Log;
306 static const TransferCharacteristics LogSqrt;
307 static const TransferCharacteristics IEC61966_2_4;
308 static const TransferCharacteristics BT1361;
309 static const TransferCharacteristics SRGB;
310 static const TransferCharacteristics BT2020_10;
311 static const TransferCharacteristics BT2020_12;
312 static const TransferCharacteristics SMPTE2084;
313 static const TransferCharacteristics SMPTE428;
314 static const TransferCharacteristics ARIB_STD_B67;
317inline const TransferCharacteristics TransferCharacteristics::Auto{255};
318inline const TransferCharacteristics TransferCharacteristics::Unspecified{2};
319inline const TransferCharacteristics TransferCharacteristics::BT709{1};
320inline const TransferCharacteristics TransferCharacteristics::Gamma22{4};
321inline const TransferCharacteristics TransferCharacteristics::Gamma28{5};
322inline const TransferCharacteristics TransferCharacteristics::SMPTE170M{6};
323inline const TransferCharacteristics TransferCharacteristics::SMPTE240M{7};
324inline const TransferCharacteristics TransferCharacteristics::Linear{8};
325inline const TransferCharacteristics TransferCharacteristics::Log{9};
326inline const TransferCharacteristics TransferCharacteristics::LogSqrt{10};
327inline const TransferCharacteristics TransferCharacteristics::IEC61966_2_4{11};
328inline const TransferCharacteristics TransferCharacteristics::BT1361{12};
329inline const TransferCharacteristics TransferCharacteristics::SRGB{13};
330inline const TransferCharacteristics TransferCharacteristics::BT2020_10{14};
331inline const TransferCharacteristics TransferCharacteristics::BT2020_12{15};
332inline const TransferCharacteristics TransferCharacteristics::SMPTE2084{16};
333inline const TransferCharacteristics TransferCharacteristics::SMPTE428{17};
334inline const TransferCharacteristics TransferCharacteristics::ARIB_STD_B67{18};
344class MatrixCoefficients :
public TypedEnum<MatrixCoefficients> {
351 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"MatrixCoefficients",
"Matrix Coefficients", 255,
352 {
"RGB", 0,
"RGB / GBR (Identity)"},
353 {
"BT709", 1,
"BT.709"},
354 {
"Unspecified", 2,
"Unspecified"},
355 {
"FCC", 4,
"FCC (US 47 CFR 73.682)"},
356 {
"BT470BG", 5,
"BT.470 System B/G (PAL)"},
357 {
"SMPTE170M", 6,
"SMPTE 170M (NTSC)"},
358 {
"SMPTE240M", 7,
"SMPTE 240M"},
359 {
"YCgCo", 8,
"YCgCo"},
360 {
"BT2020_NCL", 9,
"BT.2020 Non-Constant Luminance"},
361 {
"BT2020_CL", 10,
"BT.2020 Constant Luminance"},
362 {
"SMPTE2085", 11,
"SMPTE 2085 (Y'D'zD'x)"},
363 {
"Auto", 255,
"Auto (Derive from Source)"});
365 using TypedEnum<MatrixCoefficients>::TypedEnum;
367 static const MatrixCoefficients Auto;
368 static const MatrixCoefficients Unspecified;
369 static const MatrixCoefficients RGB;
370 static const MatrixCoefficients BT709;
371 static const MatrixCoefficients FCC;
372 static const MatrixCoefficients BT470BG;
373 static const MatrixCoefficients SMPTE170M;
374 static const MatrixCoefficients SMPTE240M;
375 static const MatrixCoefficients YCgCo;
376 static const MatrixCoefficients BT2020_NCL;
377 static const MatrixCoefficients BT2020_CL;
378 static const MatrixCoefficients SMPTE2085;
381inline const MatrixCoefficients MatrixCoefficients::Auto{255};
382inline const MatrixCoefficients MatrixCoefficients::Unspecified{2};
383inline const MatrixCoefficients MatrixCoefficients::RGB{0};
384inline const MatrixCoefficients MatrixCoefficients::BT709{1};
385inline const MatrixCoefficients MatrixCoefficients::FCC{4};
386inline const MatrixCoefficients MatrixCoefficients::BT470BG{5};
387inline const MatrixCoefficients MatrixCoefficients::SMPTE170M{6};
388inline const MatrixCoefficients MatrixCoefficients::SMPTE240M{7};
389inline const MatrixCoefficients MatrixCoefficients::YCgCo{8};
390inline const MatrixCoefficients MatrixCoefficients::BT2020_NCL{9};
391inline const MatrixCoefficients MatrixCoefficients::BT2020_CL{10};
392inline const MatrixCoefficients MatrixCoefficients::SMPTE2085{11};