Linux 6.9-rc1
[linux-2.6-microblaze.git] / Documentation / userspace-api / media / v4l / colorspaces-details.rst
1 .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2
3 ********************************
4 Detailed Colorspace Descriptions
5 ********************************
6
7
8 .. _col-smpte-170m:
9
10 Colorspace SMPTE 170M (V4L2_COLORSPACE_SMPTE170M)
11 =================================================
12
13 The :ref:`smpte170m` standard defines the colorspace used by NTSC and
14 PAL and by SDTV in general. The default transfer function is
15 ``V4L2_XFER_FUNC_709``. The default Y'CbCr encoding is
16 ``V4L2_YCBCR_ENC_601``. The default Y'CbCr quantization is limited
17 range. The chromaticities of the primary colors and the white reference
18 are:
19
20 .. flat-table:: SMPTE 170M Chromaticities
21     :header-rows:  1
22     :stub-columns: 0
23     :widths:       1 1 2
24
25     * - Color
26       - x
27       - y
28     * - Red
29       - 0.630
30       - 0.340
31     * - Green
32       - 0.310
33       - 0.595
34     * - Blue
35       - 0.155
36       - 0.070
37     * - White Reference (D65)
38       - 0.3127
39       - 0.3290
40
41
42 The red, green and blue chromaticities are also often referred to as the
43 SMPTE C set, so this colorspace is sometimes called SMPTE C as well.
44
45 The transfer function defined for SMPTE 170M is the same as the one
46 defined in Rec. 709.
47
48 .. math::
49
50     L' = -1.099(-L)^{0.45} + 0.099 \text{, for } L \le-0.018
51
52     L' = 4.5L \text{, for } -0.018 < L < 0.018
53
54     L' = 1.099L^{0.45} - 0.099 \text{, for } L \ge 0.018
55
56 Inverse Transfer function:
57
58 .. math::
59
60     L = -\left( \frac{L' - 0.099}{-1.099} \right) ^{\frac{1}{0.45}} \text{, for } L' \le -0.081
61
62     L = \frac{L'}{4.5} \text{, for } -0.081 < L' < 0.081
63
64     L = \left(\frac{L' + 0.099}{1.099}\right)^{\frac{1}{0.45} } \text{, for } L' \ge 0.081
65
66 The luminance (Y') and color difference (Cb and Cr) are obtained with
67 the following ``V4L2_YCBCR_ENC_601`` encoding:
68
69 .. math::
70
71     Y' = 0.2990R' + 0.5870G' + 0.1140B'
72
73     Cb = -0.1687R' - 0.3313G' + 0.5B'
74
75     Cr = 0.5R' - 0.4187G' - 0.0813B'
76
77 Y' is clamped to the range [0…1] and Cb and Cr are clamped to the range
78 [-0.5…0.5]. This conversion to Y'CbCr is identical to the one defined in
79 the :ref:`itu601` standard and this colorspace is sometimes called
80 BT.601 as well, even though BT.601 does not mention any color primaries.
81
82 The default quantization is limited range, but full range is possible
83 although rarely seen.
84
85
86 .. _col-rec709:
87
88 Colorspace Rec. 709 (V4L2_COLORSPACE_REC709)
89 ============================================
90
91 The :ref:`itu709` standard defines the colorspace used by HDTV in
92 general. The default transfer function is ``V4L2_XFER_FUNC_709``. The
93 default Y'CbCr encoding is ``V4L2_YCBCR_ENC_709``. The default Y'CbCr
94 quantization is limited range. The chromaticities of the primary colors
95 and the white reference are:
96
97 .. flat-table:: Rec. 709 Chromaticities
98     :header-rows:  1
99     :stub-columns: 0
100     :widths:       1 1 2
101
102     * - Color
103       - x
104       - y
105     * - Red
106       - 0.640
107       - 0.330
108     * - Green
109       - 0.300
110       - 0.600
111     * - Blue
112       - 0.150
113       - 0.060
114     * - White Reference (D65)
115       - 0.3127
116       - 0.3290
117
118
119 The full name of this standard is Rec. ITU-R BT.709-5.
120
121 Transfer function. Normally L is in the range [0…1], but for the
122 extended gamut xvYCC encoding values outside that range are allowed.
123
124 .. math::
125
126     L' = -1.099(-L)^{0.45} + 0.099 \text{, for } L \le -0.018
127
128     L' = 4.5L \text{, for } -0.018 < L < 0.018
129
130     L' = 1.099L^{0.45} - 0.099 \text{, for } L \ge 0.018
131
132 Inverse Transfer function:
133
134 .. math::
135
136     L = -\left( \frac{L' - 0.099}{-1.099} \right)^\frac{1}{0.45} \text{, for } L' \le -0.081
137
138     L = \frac{L'}{4.5}\text{, for } -0.081 < L' < 0.081
139
140     L = \left(\frac{L' + 0.099}{1.099}\right)^{\frac{1}{0.45} } \text{, for } L' \ge 0.081
141
142 The luminance (Y') and color difference (Cb and Cr) are obtained with
143 the following ``V4L2_YCBCR_ENC_709`` encoding:
144
145 .. math::
146
147     Y' = 0.2126R' + 0.7152G' + 0.0722B'
148
149     Cb = -0.1146R' - 0.3854G' + 0.5B'
150
151     Cr = 0.5R' - 0.4542G' - 0.0458B'
152
153 Y' is clamped to the range [0…1] and Cb and Cr are clamped to the range
154 [-0.5…0.5].
155
156 The default quantization is limited range, but full range is possible
157 although rarely seen.
158
159 The ``V4L2_YCBCR_ENC_709`` encoding described above is the default for
160 this colorspace, but it can be overridden with ``V4L2_YCBCR_ENC_601``,
161 in which case the BT.601 Y'CbCr encoding is used.
162
163 Two additional extended gamut Y'CbCr encodings are also possible with
164 this colorspace:
165
166 The xvYCC 709 encoding (``V4L2_YCBCR_ENC_XV709``, :ref:`xvycc`) is
167 similar to the Rec. 709 encoding, but it allows for R', G' and B' values
168 that are outside the range [0…1]. The resulting Y', Cb and Cr values are
169 scaled and offset according to the limited range formula:
170
171 .. math::
172
173     Y' = \frac{219}{256} * (0.2126R' + 0.7152G' + 0.0722B') + \frac{16}{256}
174
175     Cb = \frac{224}{256} * (-0.1146R' - 0.3854G' + 0.5B')
176
177     Cr = \frac{224}{256} * (0.5R' - 0.4542G' - 0.0458B')
178
179 The xvYCC 601 encoding (``V4L2_YCBCR_ENC_XV601``, :ref:`xvycc`) is
180 similar to the BT.601 encoding, but it allows for R', G' and B' values
181 that are outside the range [0…1]. The resulting Y', Cb and Cr values are
182 scaled and offset according to the limited range formula:
183
184 .. math::
185
186     Y' = \frac{219}{256} * (0.2990R' + 0.5870G' + 0.1140B') + \frac{16}{256}
187
188     Cb = \frac{224}{256} * (-0.1687R' - 0.3313G' + 0.5B')
189
190     Cr = \frac{224}{256} * (0.5R' - 0.4187G' - 0.0813B')
191
192 Y' is clamped to the range [0…1] and Cb and Cr are clamped to the range
193 [-0.5…0.5] and quantized without further scaling or offsets.
194 The non-standard xvYCC 709 or xvYCC 601 encodings can be
195 used by selecting ``V4L2_YCBCR_ENC_XV709`` or ``V4L2_YCBCR_ENC_XV601``.
196 As seen by the xvYCC formulas these encodings always use limited range quantization,
197 there is no full range variant. The whole point of these extended gamut encodings
198 is that values outside the limited range are still valid, although they
199 map to R', G' and B' values outside the [0…1] range and are therefore outside
200 the Rec. 709 colorspace gamut.
201
202
203 .. _col-srgb:
204
205 Colorspace sRGB (V4L2_COLORSPACE_SRGB)
206 ======================================
207
208 The :ref:`srgb` standard defines the colorspace used by most webcams
209 and computer graphics. The default transfer function is
210 ``V4L2_XFER_FUNC_SRGB``. The default Y'CbCr encoding is
211 ``V4L2_YCBCR_ENC_601``. The default Y'CbCr quantization is limited range.
212
213 Note that the :ref:`sycc` standard specifies full range quantization,
214 however all current capture hardware supported by the kernel convert
215 R'G'B' to limited range Y'CbCr. So choosing full range as the default
216 would break how applications interpret the quantization range.
217
218 The chromaticities of the primary colors and the white reference are:
219
220 .. flat-table:: sRGB Chromaticities
221     :header-rows:  1
222     :stub-columns: 0
223     :widths:       1 1 2
224
225     * - Color
226       - x
227       - y
228     * - Red
229       - 0.640
230       - 0.330
231     * - Green
232       - 0.300
233       - 0.600
234     * - Blue
235       - 0.150
236       - 0.060
237     * - White Reference (D65)
238       - 0.3127
239       - 0.3290
240
241
242 These chromaticities are identical to the Rec. 709 colorspace.
243
244 Transfer function. Note that negative values for L are only used by the
245 Y'CbCr conversion.
246
247 .. math::
248
249     L' = -1.055(-L)^{\frac{1}{2.4} } + 0.055\text{, for }L < -0.0031308
250
251     L' = 12.92L\text{, for }-0.0031308 \le L \le 0.0031308
252
253     L' = 1.055L ^{\frac{1}{2.4} } - 0.055\text{, for }0.0031308 < L \le 1
254
255 Inverse Transfer function:
256
257 .. math::
258
259     L = -((-L' + 0.055) / 1.055) ^{2.4}\text{, for }L' < -0.04045
260
261     L = L' / 12.92\text{, for }-0.04045 \le L' \le 0.04045
262
263     L = ((L' + 0.055) / 1.055) ^{2.4}\text{, for }L' > 0.04045
264
265 The luminance (Y') and color difference (Cb and Cr) are obtained with
266 the following ``V4L2_YCBCR_ENC_601`` encoding as defined by :ref:`sycc`:
267
268 .. math::
269
270     Y' = 0.2990R' + 0.5870G' + 0.1140B'
271
272     Cb = -0.1687R' - 0.3313G' + 0.5B'
273
274     Cr = 0.5R' - 0.4187G' - 0.0813B'
275
276 Y' is clamped to the range [0…1] and Cb and Cr are clamped to the range
277 [-0.5…0.5]. This transform is identical to one defined in SMPTE
278 170M/BT.601. The Y'CbCr quantization is limited range.
279
280
281 .. _col-oprgb:
282
283 Colorspace opRGB (V4L2_COLORSPACE_OPRGB)
284 ===============================================
285
286 The :ref:`oprgb` standard defines the colorspace used by computer
287 graphics that use the opRGB colorspace. The default transfer function is
288 ``V4L2_XFER_FUNC_OPRGB``. The default Y'CbCr encoding is
289 ``V4L2_YCBCR_ENC_601``. The default Y'CbCr quantization is limited
290 range.
291
292 Note that the :ref:`oprgb` standard specifies full range quantization,
293 however all current capture hardware supported by the kernel convert
294 R'G'B' to limited range Y'CbCr. So choosing full range as the default
295 would break how applications interpret the quantization range.
296
297 The chromaticities of the primary colors and the white reference are:
298
299 .. flat-table:: opRGB Chromaticities
300     :header-rows:  1
301     :stub-columns: 0
302     :widths:       1 1 2
303
304     * - Color
305       - x
306       - y
307     * - Red
308       - 0.6400
309       - 0.3300
310     * - Green
311       - 0.2100
312       - 0.7100
313     * - Blue
314       - 0.1500
315       - 0.0600
316     * - White Reference (D65)
317       - 0.3127
318       - 0.3290
319
320
321
322 Transfer function:
323
324 .. math::
325
326     L' = L ^{\frac{1}{2.19921875}}
327
328 Inverse Transfer function:
329
330 .. math::
331
332     L = L'^{(2.19921875)}
333
334 The luminance (Y') and color difference (Cb and Cr) are obtained with
335 the following ``V4L2_YCBCR_ENC_601`` encoding:
336
337 .. math::
338
339     Y' = 0.2990R' + 0.5870G' + 0.1140B'
340
341     Cb = -0.1687R' - 0.3313G' + 0.5B'
342
343     Cr = 0.5R' - 0.4187G' - 0.0813B'
344
345 Y' is clamped to the range [0…1] and Cb and Cr are clamped to the range
346 [-0.5…0.5]. This transform is identical to one defined in SMPTE
347 170M/BT.601. The Y'CbCr quantization is limited range.
348
349
350 .. _col-bt2020:
351
352 Colorspace BT.2020 (V4L2_COLORSPACE_BT2020)
353 ===========================================
354
355 The :ref:`itu2020` standard defines the colorspace used by Ultra-high
356 definition television (UHDTV). The default transfer function is
357 ``V4L2_XFER_FUNC_709``. The default Y'CbCr encoding is
358 ``V4L2_YCBCR_ENC_BT2020``. The default Y'CbCr quantization is limited range.
359 The chromaticities of the primary colors and the white reference are:
360
361 .. flat-table:: BT.2020 Chromaticities
362     :header-rows:  1
363     :stub-columns: 0
364     :widths:       1 1 2
365
366     * - Color
367       - x
368       - y
369     * - Red
370       - 0.708
371       - 0.292
372     * - Green
373       - 0.170
374       - 0.797
375     * - Blue
376       - 0.131
377       - 0.046
378     * - White Reference (D65)
379       - 0.3127
380       - 0.3290
381
382
383
384 Transfer function (same as Rec. 709):
385
386 .. math::
387
388     L' = 4.5L\text{, for }0 \le L < 0.018
389
390     L' = 1.099L ^{0.45} - 0.099\text{, for } 0.018 \le L \le 1
391
392 Inverse Transfer function:
393
394 .. math::
395
396     L = L' / 4.5\text{, for } L' < 0.081
397
398     L = \left( \frac{L' + 0.099}{1.099}\right) ^{\frac{1}{0.45} }\text{, for } L' \ge 0.081
399
400 Please note that while Rec. 709 is defined as the default transfer function
401 by the :ref:`itu2020` standard, in practice this colorspace is often used
402 with the :ref:`xf-smpte-2084`. In particular Ultra HD Blu-ray discs use
403 this combination.
404
405 The luminance (Y') and color difference (Cb and Cr) are obtained with
406 the following ``V4L2_YCBCR_ENC_BT2020`` encoding:
407
408 .. math::
409
410     Y' = 0.2627R' + 0.6780G' + 0.0593B'
411
412     Cb = -0.1396R' - 0.3604G' + 0.5B'
413
414     Cr = 0.5R' - 0.4598G' - 0.0402B'
415
416 Y' is clamped to the range [0…1] and Cb and Cr are clamped to the range
417 [-0.5…0.5]. The Y'CbCr quantization is limited range.
418
419 There is also an alternate constant luminance R'G'B' to Yc'CbcCrc
420 (``V4L2_YCBCR_ENC_BT2020_CONST_LUM``) encoding:
421
422 Luma:
423
424 .. math::
425     :nowrap:
426
427     \begin{align*}
428     Yc' = (0.2627R + 0.6780G + 0.0593B)'& \\
429     B' - Yc' \le 0:& \\
430         &Cbc = (B' - Yc') / 1.9404 \\
431     B' - Yc' > 0: & \\
432         &Cbc = (B' - Yc') / 1.5816 \\
433     R' - Yc' \le 0:& \\
434         &Crc = (R' - Y') / 1.7184 \\
435     R' - Yc' > 0:& \\
436         &Crc = (R' - Y') / 0.9936
437     \end{align*}
438
439 Yc' is clamped to the range [0…1] and Cbc and Crc are clamped to the
440 range [-0.5…0.5]. The Yc'CbcCrc quantization is limited range.
441
442
443 .. _col-dcip3:
444
445 Colorspace DCI-P3 (V4L2_COLORSPACE_DCI_P3)
446 ==========================================
447
448 The :ref:`smpte431` standard defines the colorspace used by cinema
449 projectors that use the DCI-P3 colorspace. The default transfer function
450 is ``V4L2_XFER_FUNC_DCI_P3``. The default Y'CbCr encoding is
451 ``V4L2_YCBCR_ENC_709``. The default Y'CbCr quantization is limited range.
452
453 .. note::
454
455    Note that this colorspace standard does not specify a
456    Y'CbCr encoding since it is not meant to be encoded to Y'CbCr. So this
457    default Y'CbCr encoding was picked because it is the HDTV encoding.
458
459 The chromaticities of the primary colors and the white reference are:
460
461
462 .. flat-table:: DCI-P3 Chromaticities
463     :header-rows:  1
464     :stub-columns: 0
465     :widths:       1 1 2
466
467     * - Color
468       - x
469       - y
470     * - Red
471       - 0.6800
472       - 0.3200
473     * - Green
474       - 0.2650
475       - 0.6900
476     * - Blue
477       - 0.1500
478       - 0.0600
479     * - White Reference
480       - 0.3140
481       - 0.3510
482
483
484
485 Transfer function:
486
487 .. math::
488
489     L' = L^{\frac{1}{2.6}}
490
491 Inverse Transfer function:
492
493 .. math::
494
495     L = L'^{(2.6)}
496
497 Y'CbCr encoding is not specified. V4L2 defaults to Rec. 709.
498
499
500 .. _col-smpte-240m:
501
502 Colorspace SMPTE 240M (V4L2_COLORSPACE_SMPTE240M)
503 =================================================
504
505 The :ref:`smpte240m` standard was an interim standard used during the
506 early days of HDTV (1988-1998). It has been superseded by Rec. 709. The
507 default transfer function is ``V4L2_XFER_FUNC_SMPTE240M``. The default
508 Y'CbCr encoding is ``V4L2_YCBCR_ENC_SMPTE240M``. The default Y'CbCr
509 quantization is limited range. The chromaticities of the primary colors
510 and the white reference are:
511
512
513 .. flat-table:: SMPTE 240M Chromaticities
514     :header-rows:  1
515     :stub-columns: 0
516     :widths:       1 1 2
517
518     * - Color
519       - x
520       - y
521     * - Red
522       - 0.630
523       - 0.340
524     * - Green
525       - 0.310
526       - 0.595
527     * - Blue
528       - 0.155
529       - 0.070
530     * - White Reference (D65)
531       - 0.3127
532       - 0.3290
533
534
535 These chromaticities are identical to the SMPTE 170M colorspace.
536
537 Transfer function:
538
539 .. math::
540
541     L' = 4L\text{, for } 0 \le L < 0.0228
542
543     L' = 1.1115L ^{0.45} - 0.1115\text{, for } 0.0228 \le L \le 1
544
545 Inverse Transfer function:
546
547 .. math::
548
549     L = \frac{L'}{4}\text{, for } 0 \le L' < 0.0913
550
551     L = \left( \frac{L' + 0.1115}{1.1115}\right) ^{\frac{1}{0.45} }\text{, for } L' \ge 0.0913
552
553 The luminance (Y') and color difference (Cb and Cr) are obtained with
554 the following ``V4L2_YCBCR_ENC_SMPTE240M`` encoding:
555
556 .. math::
557
558     Y' = 0.2122R' + 0.7013G' + 0.0865B'
559
560     Cb = -0.1161R' - 0.3839G' + 0.5B'
561
562     Cr = 0.5R' - 0.4451G' - 0.0549B'
563
564 Y' is clamped to the range [0…1] and Cb and Cr are clamped to the
565 range [-0.5…0.5]. The Y'CbCr quantization is limited range.
566
567
568 .. _col-sysm:
569
570 Colorspace NTSC 1953 (V4L2_COLORSPACE_470_SYSTEM_M)
571 ===================================================
572
573 This standard defines the colorspace used by NTSC in 1953. In practice
574 this colorspace is obsolete and SMPTE 170M should be used instead. The
575 default transfer function is ``V4L2_XFER_FUNC_709``. The default Y'CbCr
576 encoding is ``V4L2_YCBCR_ENC_601``. The default Y'CbCr quantization is
577 limited range. The chromaticities of the primary colors and the white
578 reference are:
579
580
581 .. flat-table:: NTSC 1953 Chromaticities
582     :header-rows:  1
583     :stub-columns: 0
584     :widths:       1 1 2
585
586     * - Color
587       - x
588       - y
589     * - Red
590       - 0.67
591       - 0.33
592     * - Green
593       - 0.21
594       - 0.71
595     * - Blue
596       - 0.14
597       - 0.08
598     * - White Reference (C)
599       - 0.310
600       - 0.316
601
602
603 .. note::
604
605    This colorspace uses Illuminant C instead of D65 as the white
606    reference. To correctly convert an image in this colorspace to another
607    that uses D65 you need to apply a chromatic adaptation algorithm such as
608    the Bradford method.
609
610 The transfer function was never properly defined for NTSC 1953. The Rec.
611 709 transfer function is recommended in the literature:
612
613 .. math::
614
615     L' = 4.5L\text{, for } 0 \le L < 0.018
616
617     L' = 1.099L ^{0.45} - 0.099\text{, for } 0.018 \le L \le 1
618
619 Inverse Transfer function:
620
621 .. math::
622
623     L = \frac{L'}{4.5} \text{, for } L' < 0.081
624
625     L = \left( \frac{L' + 0.099}{1.099}\right) ^{\frac{1}{0.45} }\text{, for } L' \ge 0.081
626
627 The luminance (Y') and color difference (Cb and Cr) are obtained with
628 the following ``V4L2_YCBCR_ENC_601`` encoding:
629
630 .. math::
631
632     Y' = 0.2990R' + 0.5870G' + 0.1140B'
633
634     Cb = -0.1687R' - 0.3313G' + 0.5B'
635
636     Cr = 0.5R' - 0.4187G' - 0.0813B'
637
638 Y' is clamped to the range [0…1] and Cb and Cr are clamped to the range
639 [-0.5…0.5]. The Y'CbCr quantization is limited range. This transform is
640 identical to one defined in SMPTE 170M/BT.601.
641
642
643 .. _col-sysbg:
644
645 Colorspace EBU Tech. 3213 (V4L2_COLORSPACE_470_SYSTEM_BG)
646 =========================================================
647
648 The :ref:`tech3213` standard defines the colorspace used by PAL/SECAM
649 in 1975. Note that this colorspace is not supported by the HDMI interface.
650 Instead :ref:`tech3321` recommends that Rec. 709 is used instead for HDMI.
651 The default transfer function is
652 ``V4L2_XFER_FUNC_709``. The default Y'CbCr encoding is
653 ``V4L2_YCBCR_ENC_601``. The default Y'CbCr quantization is limited
654 range. The chromaticities of the primary colors and the white reference
655 are:
656
657
658 .. flat-table:: EBU Tech. 3213 Chromaticities
659     :header-rows:  1
660     :stub-columns: 0
661     :widths:       1 1 2
662
663     * - Color
664       - x
665       - y
666     * - Red
667       - 0.64
668       - 0.33
669     * - Green
670       - 0.29
671       - 0.60
672     * - Blue
673       - 0.15
674       - 0.06
675     * - White Reference (D65)
676       - 0.3127
677       - 0.3290
678
679
680
681 The transfer function was never properly defined for this colorspace.
682 The Rec. 709 transfer function is recommended in the literature:
683
684 .. math::
685
686     L' = 4.5L\text{, for } 0 \le L < 0.018
687
688     L' = 1.099L ^{0.45} - 0.099\text{, for } 0.018 \le L \le 1
689
690 Inverse Transfer function:
691
692 .. math::
693
694     L = \frac{L'}{4.5} \text{, for } L' < 0.081
695
696     L = \left(\frac{L' + 0.099}{1.099} \right) ^{\frac{1}{0.45} }\text{, for } L' \ge 0.081
697
698 The luminance (Y') and color difference (Cb and Cr) are obtained with
699 the following ``V4L2_YCBCR_ENC_601`` encoding:
700
701 .. math::
702
703     Y' = 0.2990R' + 0.5870G' + 0.1140B'
704
705     Cb = -0.1687R' - 0.3313G' + 0.5B'
706
707     Cr = 0.5R' - 0.4187G' - 0.0813B'
708
709 Y' is clamped to the range [0…1] and Cb and Cr are clamped to the range
710 [-0.5…0.5]. The Y'CbCr quantization is limited range. This transform is
711 identical to one defined in SMPTE 170M/BT.601.
712
713
714 .. _col-jpeg:
715
716 Colorspace JPEG (V4L2_COLORSPACE_JPEG)
717 ======================================
718
719 This colorspace defines the colorspace used by most (Motion-)JPEG
720 formats. The chromaticities of the primary colors and the white
721 reference are identical to sRGB. The transfer function use is
722 ``V4L2_XFER_FUNC_SRGB``. The Y'CbCr encoding is ``V4L2_YCBCR_ENC_601``
723 with full range quantization where Y' is scaled to [0…255] and Cb/Cr are
724 scaled to [-128…128] and then clipped to [-128…127].
725
726 .. note::
727
728    The JPEG standard does not actually store colorspace
729    information. So if something other than sRGB is used, then the driver
730    will have to set that information explicitly. Effectively
731    ``V4L2_COLORSPACE_JPEG`` can be considered to be an abbreviation for
732    ``V4L2_COLORSPACE_SRGB``, ``V4L2_XFER_FUNC_SRGB``, ``V4L2_YCBCR_ENC_601``
733    and ``V4L2_QUANTIZATION_FULL_RANGE``.
734
735 ***************************************
736 Detailed Transfer Function Descriptions
737 ***************************************
738
739 .. _xf-smpte-2084:
740
741 Transfer Function SMPTE 2084 (V4L2_XFER_FUNC_SMPTE2084)
742 =======================================================
743
744 The :ref:`smpte2084` standard defines the transfer function used by
745 High Dynamic Range content.
746
747 Constants:
748     m1 = (2610 / 4096) / 4
749
750     m2 = (2523 / 4096) * 128
751
752     c1 = 3424 / 4096
753
754     c2 = (2413 / 4096) * 32
755
756     c3 = (2392 / 4096) * 32
757
758 Transfer function:
759     L' = ((c1 + c2 * L\ :sup:`m1`) / (1 + c3 * L\ :sup:`m1`))\ :sup:`m2`
760
761 Inverse Transfer function:
762     L = (max(L':sup:`1/m2` - c1, 0) / (c2 - c3 *
763     L'\ :sup:`1/m2`))\ :sup:`1/m1`
764
765 Take care when converting between this transfer function and non-HDR transfer
766 functions: the linear RGB values [0…1] of HDR content map to a luminance range
767 of 0 to 10000 cd/m\ :sup:`2` whereas the linear RGB values of non-HDR (aka
768 Standard Dynamic Range or SDR) map to a luminance range of 0 to 100 cd/m\ :sup:`2`.
769
770 To go from SDR to HDR you will have to divide L by 100 first. To go in the other
771 direction you will have to multiply L by 100. Of course, this clamps all
772 luminance values over 100 cd/m\ :sup:`2` to 100 cd/m\ :sup:`2`.
773
774 There are better methods, see e.g. :ref:`colimg` for more in-depth information
775 about this.