libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
enums_color.h
Go to the documentation of this file.
1
10#pragma once
11
12
13#include <promeki/config.h>
14#if PROMEKI_ENABLE_CORE
15#include <promeki/namespace.h>
16#include <promeki/enum.h>
17
18PROMEKI_NAMESPACE_BEGIN
19
30class ChromaSubsampling : public TypedEnum<ChromaSubsampling> {
31 public:
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"}); // default: YUV422 (RFC 2435 JPEG-over-RTP compatible)
36
37 using TypedEnum<ChromaSubsampling>::TypedEnum;
38
39 static const ChromaSubsampling YUV444;
40 static const ChromaSubsampling YUV422;
41 static const ChromaSubsampling YUV420;
42};
43
44inline const ChromaSubsampling ChromaSubsampling::YUV444{0};
45inline const ChromaSubsampling ChromaSubsampling::YUV422{1};
46inline const ChromaSubsampling ChromaSubsampling::YUV420{2};
47
58class CscPath : public TypedEnum<CscPath> {
59 public:
60 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY("CscPath", "Color Conversion Path", 0,
61 {"Optimized", 0, "Optimized (Fast Path)"},
62 {"Scalar", 1, "Scalar Reference (SIMD Off)"}); // default: Optimized
63
64 using TypedEnum<CscPath>::TypedEnum;
65
66 static const CscPath Optimized;
67 static const CscPath Scalar;
68};
69
70inline const CscPath CscPath::Optimized{0};
71inline const CscPath CscPath::Scalar{1};
72
88class CscToneMapping : public TypedEnum<CscToneMapping> {
89 public:
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"});
94
95 using TypedEnum<CscToneMapping>::TypedEnum;
96
97 static const CscToneMapping Auto;
98 static const CscToneMapping Enabled;
99 static const CscToneMapping Disabled;
100};
101
102inline const CscToneMapping CscToneMapping::Auto{0};
103inline const CscToneMapping CscToneMapping::Enabled{1};
104inline const CscToneMapping CscToneMapping::Disabled{2};
105
131class CscToneMapOperator : public TypedEnum<CscToneMapOperator> {
132 public:
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)"},
137 {"Aces", 3, "ACES"},
138 {"Bt2446a", 4, "ITU-R BT.2446 Method A"});
139
140 using TypedEnum<CscToneMapOperator>::TypedEnum;
141
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;
147};
148
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};
154
173class VideoRange : public TypedEnum<VideoRange> {
174 public:
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)"}); // default: Unknown
179
180 using TypedEnum<VideoRange>::TypedEnum;
181
182 static const VideoRange Unknown;
183 static const VideoRange Limited;
184 static const VideoRange Full;
185};
186
187inline const VideoRange VideoRange::Unknown{0};
188inline const VideoRange VideoRange::Limited{1};
189inline const VideoRange VideoRange::Full{2};
190
203class ColorPrimaries : public TypedEnum<ColorPrimaries> {
204 public:
205 // The @c Auto numeric value (255) deliberately sits
206 // outside the 0..22 H.273 value range so it can never
207 // collide with a spec-registered primary. Encoders
208 // that see @c Auto resolve it by inspecting the input
209 // PixelFormat's ColorModel at session init time.
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)"}); // default: Auto
224
225 using TypedEnum<ColorPrimaries>::TypedEnum;
226
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;
240};
241
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};
255
265class TransferCharacteristics : public TypedEnum<TransferCharacteristics> {
266 public:
267 // The @c Auto numeric value (255) sits outside the
268 // 0..18 H.273 value range. NB: auto-derivation
269 // currently cannot pick between SDR gamma, PQ, and HLG
270 // — the library's ColorModel doesn't distinguish HDR
271 // transfer curves yet — so @c Auto resolves to the
272 // SDR curve matching the primaries and callers must
273 // set an explicit @c SMPTE2084 / @c ARIB_STD_B67 for
274 // HDR content.
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)"}); // default: Auto
294
295 using TypedEnum<TransferCharacteristics>::TypedEnum;
296
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;
315};
316
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};
335
344class MatrixCoefficients : public TypedEnum<MatrixCoefficients> {
345 public:
346 // @c Auto (numeric 255) sits outside the 0..11 H.273
347 // range. Encoders resolve @c Auto from the input
348 // PixelFormat's ColorModel (RGB models → @c RGB,
349 // YCbCr_Rec709 → @c BT709, YCbCr_Rec2020 → @c BT2020_NCL,
350 // etc.) at session init time.
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)"}); // default: Auto
364
365 using TypedEnum<MatrixCoefficients>::TypedEnum;
366
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;
379};
380
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};
393
396PROMEKI_NAMESPACE_END
397
398#endif // PROMEKI_ENABLE_CORE