xref: /linux/Documentation/userspace-api/media/v4l/pixfmt-rgb.rst (revision 527a0f2bdcfe77fce22f006b97e42e4da3137c86)
1.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2
3.. _pixfmt-rgb:
4
5***********
6RGB Formats
7***********
8
9These formats encode each pixel as a triplet of RGB values. They are packed
10formats, meaning that the RGB values for one pixel are stored consecutively in
11memory and each pixel consumes an integer number of bytes. When the number of
12bits required to store a pixel is not aligned to a byte boundary, the data is
13padded with additional bits to fill the remaining byte.
14
15The formats differ by the number of bits per RGB component (typically but not
16always the same for all components), the order of components in memory, and the
17presence of an alpha component or additional padding bits.
18
19The usage and value of the alpha bits in formats that support them (named ARGB
20or a permutation thereof, collectively referred to as alpha formats) depend on
21the device type and hardware operation. :ref:`Capture <capture>` devices
22(including capture queues of mem-to-mem devices) fill the alpha component in
23memory. When the device captures an alpha channel the alpha component will have
24a meaningful value. Otherwise, when the device doesn't capture an alpha channel
25but can set the alpha bit to a user-configurable value, the
26:ref:`V4L2_CID_ALPHA_COMPONENT <v4l2-alpha-component>` control is used to
27specify that alpha value, and the alpha component of all pixels will be set to
28the value specified by that control. Otherwise a corresponding format without
29an alpha component (XRGB or XBGR) must be used instead of an alpha format.
30
31:ref:`Output <output>` devices (including output queues of mem-to-mem devices
32and :ref:`video output overlay <osd>` devices) read the alpha component from
33memory. When the device processes the alpha channel the alpha component must be
34filled with meaningful values by applications. Otherwise a corresponding format
35without an alpha component (XRGB or XBGR) must be used instead of an alpha
36format.
37
38Formats that contain padding bits are named XRGB (or a permutation thereof).
39The padding bits contain undefined values and must be ignored by applications,
40devices and drivers, for both :ref:`capture` and :ref:`output` devices.
41
42.. note::
43
44   - In all the tables that follow, bit 7 is the most significant bit in a byte.
45   - 'r', 'g' and 'b' denote bits of the red, green and blue components
46     respectively. 'a' denotes bits of the alpha component (if supported by the
47     format), and 'x' denotes padding bits.
48
49
50Less Than 8 Bits Per Component
51==============================
52
53These formats store an RGB triplet in one, two or four bytes. They are named
54based on the order of the RGB components as seen in a 8-, 16- or 32-bit word,
55which is then stored in memory in little endian byte order (unless otherwise
56noted by the presence of bit 31 in the 4CC value), and on the number of bits
57for each component. For instance, the RGB565 format stores a pixel in a 16-bit
58word [15:0] laid out at as [R\ :sub:`4` R\ :sub:`3` R\ :sub:`2` R\ :sub:`1`
59R\ :sub:`0` G\ :sub:`5` G\ :sub:`4` G\ :sub:`3` G\ :sub:`2` G\ :sub:`1`
60G\ :sub:`0` B\ :sub:`4` B\ :sub:`3` B\ :sub:`2` B\ :sub:`1` B\ :sub:`0`], and
61stored in memory in two bytes, [R\ :sub:`4` R\ :sub:`3` R\ :sub:`2` R\ :sub:`1`
62R\ :sub:`0` G\ :sub:`5` G\ :sub:`4` G\ :sub:`3`] followed by [G\ :sub:`2`
63G\ :sub:`1` G\ :sub:`0` B\ :sub:`4` B\ :sub:`3` B\ :sub:`2` B\ :sub:`1`
64B\ :sub:`0`].
65
66.. raw:: latex
67
68    \begingroup
69    \tiny
70    \setlength{\tabcolsep}{2pt}
71
72.. tabularcolumns:: |p{2.8cm}|p{2.0cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|
73
74
75.. flat-table:: RGB Formats With Less Than 8 Bits Per Component
76    :header-rows:  2
77    :stub-columns: 0
78
79    * - Identifier
80      - Code
81      - :cspan:`7` Byte 0 in memory
82      - :cspan:`7` Byte 1
83      - :cspan:`7` Byte 2
84      - :cspan:`7` Byte 3
85    * -
86      -
87      - 7
88      - 6
89      - 5
90      - 4
91      - 3
92      - 2
93      - 1
94      - 0
95
96      - 7
97      - 6
98      - 5
99      - 4
100      - 3
101      - 2
102      - 1
103      - 0
104
105      - 7
106      - 6
107      - 5
108      - 4
109      - 3
110      - 2
111      - 1
112      - 0
113
114      - 7
115      - 6
116      - 5
117      - 4
118      - 3
119      - 2
120      - 1
121      - 0
122    * .. _V4L2-PIX-FMT-RGB332:
123
124      - ``V4L2_PIX_FMT_RGB332``
125      - 'RGB1'
126
127      - r\ :sub:`2`
128      - r\ :sub:`1`
129      - r\ :sub:`0`
130      - g\ :sub:`2`
131      - g\ :sub:`1`
132      - g\ :sub:`0`
133      - b\ :sub:`1`
134      - b\ :sub:`0`
135      -
136    * .. _V4L2-PIX-FMT-ARGB444:
137
138      - ``V4L2_PIX_FMT_ARGB444``
139      - 'AR12'
140
141      - g\ :sub:`3`
142      - g\ :sub:`2`
143      - g\ :sub:`1`
144      - g\ :sub:`0`
145      - b\ :sub:`3`
146      - b\ :sub:`2`
147      - b\ :sub:`1`
148      - b\ :sub:`0`
149
150      - a\ :sub:`3`
151      - a\ :sub:`2`
152      - a\ :sub:`1`
153      - a\ :sub:`0`
154      - r\ :sub:`3`
155      - r\ :sub:`2`
156      - r\ :sub:`1`
157      - r\ :sub:`0`
158      -
159    * .. _V4L2-PIX-FMT-XRGB444:
160
161      - ``V4L2_PIX_FMT_XRGB444``
162      - 'XR12'
163
164      - g\ :sub:`3`
165      - g\ :sub:`2`
166      - g\ :sub:`1`
167      - g\ :sub:`0`
168      - b\ :sub:`3`
169      - b\ :sub:`2`
170      - b\ :sub:`1`
171      - b\ :sub:`0`
172
173      - x
174      - x
175      - x
176      - x
177      - r\ :sub:`3`
178      - r\ :sub:`2`
179      - r\ :sub:`1`
180      - r\ :sub:`0`
181      -
182    * .. _V4L2-PIX-FMT-RGBA444:
183
184      - ``V4L2_PIX_FMT_RGBA444``
185      - 'RA12'
186
187      - b\ :sub:`3`
188      - b\ :sub:`2`
189      - b\ :sub:`1`
190      - b\ :sub:`0`
191      - a\ :sub:`3`
192      - a\ :sub:`2`
193      - a\ :sub:`1`
194      - a\ :sub:`0`
195
196      - r\ :sub:`3`
197      - r\ :sub:`2`
198      - r\ :sub:`1`
199      - r\ :sub:`0`
200      - g\ :sub:`3`
201      - g\ :sub:`2`
202      - g\ :sub:`1`
203      - g\ :sub:`0`
204      -
205    * .. _V4L2-PIX-FMT-RGBX444:
206
207      - ``V4L2_PIX_FMT_RGBX444``
208      - 'RX12'
209
210      - b\ :sub:`3`
211      - b\ :sub:`2`
212      - b\ :sub:`1`
213      - b\ :sub:`0`
214      - x
215      - x
216      - x
217      - x
218
219      - r\ :sub:`3`
220      - r\ :sub:`2`
221      - r\ :sub:`1`
222      - r\ :sub:`0`
223      - g\ :sub:`3`
224      - g\ :sub:`2`
225      - g\ :sub:`1`
226      - g\ :sub:`0`
227      -
228    * .. _V4L2-PIX-FMT-ABGR444:
229
230      - ``V4L2_PIX_FMT_ABGR444``
231      - 'AB12'
232
233      - g\ :sub:`3`
234      - g\ :sub:`2`
235      - g\ :sub:`1`
236      - g\ :sub:`0`
237      - r\ :sub:`3`
238      - r\ :sub:`2`
239      - r\ :sub:`1`
240      - r\ :sub:`0`
241
242      - a\ :sub:`3`
243      - a\ :sub:`2`
244      - a\ :sub:`1`
245      - a\ :sub:`0`
246      - b\ :sub:`3`
247      - b\ :sub:`2`
248      - b\ :sub:`1`
249      - b\ :sub:`0`
250      -
251    * .. _V4L2-PIX-FMT-XBGR444:
252
253      - ``V4L2_PIX_FMT_XBGR444``
254      - 'XB12'
255
256      - g\ :sub:`3`
257      - g\ :sub:`2`
258      - g\ :sub:`1`
259      - g\ :sub:`0`
260      - r\ :sub:`3`
261      - r\ :sub:`2`
262      - r\ :sub:`1`
263      - r\ :sub:`0`
264
265      - x
266      - x
267      - x
268      - x
269      - b\ :sub:`3`
270      - b\ :sub:`2`
271      - b\ :sub:`1`
272      - b\ :sub:`0`
273      -
274    * .. _V4L2-PIX-FMT-BGRA444:
275
276      - ``V4L2_PIX_FMT_BGRA444``
277      - 'BA12'
278
279      - r\ :sub:`3`
280      - r\ :sub:`2`
281      - r\ :sub:`1`
282      - r\ :sub:`0`
283      - a\ :sub:`3`
284      - a\ :sub:`2`
285      - a\ :sub:`1`
286      - a\ :sub:`0`
287
288      - b\ :sub:`3`
289      - b\ :sub:`2`
290      - b\ :sub:`1`
291      - b\ :sub:`0`
292      - g\ :sub:`3`
293      - g\ :sub:`2`
294      - g\ :sub:`1`
295      - g\ :sub:`0`
296      -
297    * .. _V4L2-PIX-FMT-BGRX444:
298
299      - ``V4L2_PIX_FMT_BGRX444``
300      - 'BX12'
301
302      - r\ :sub:`3`
303      - r\ :sub:`2`
304      - r\ :sub:`1`
305      - r\ :sub:`0`
306      - x
307      - x
308      - x
309      - x
310
311      - b\ :sub:`3`
312      - b\ :sub:`2`
313      - b\ :sub:`1`
314      - b\ :sub:`0`
315      - g\ :sub:`3`
316      - g\ :sub:`2`
317      - g\ :sub:`1`
318      - g\ :sub:`0`
319      -
320    * .. _V4L2-PIX-FMT-ARGB555:
321
322      - ``V4L2_PIX_FMT_ARGB555``
323      - 'AR15'
324
325      - g\ :sub:`2`
326      - g\ :sub:`1`
327      - g\ :sub:`0`
328      - b\ :sub:`4`
329      - b\ :sub:`3`
330      - b\ :sub:`2`
331      - b\ :sub:`1`
332      - b\ :sub:`0`
333
334      - a
335      - r\ :sub:`4`
336      - r\ :sub:`3`
337      - r\ :sub:`2`
338      - r\ :sub:`1`
339      - r\ :sub:`0`
340      - g\ :sub:`4`
341      - g\ :sub:`3`
342      -
343    * .. _V4L2-PIX-FMT-XRGB555:
344
345      - ``V4L2_PIX_FMT_XRGB555``
346      - 'XR15'
347
348      - g\ :sub:`2`
349      - g\ :sub:`1`
350      - g\ :sub:`0`
351      - b\ :sub:`4`
352      - b\ :sub:`3`
353      - b\ :sub:`2`
354      - b\ :sub:`1`
355      - b\ :sub:`0`
356
357      - x
358      - r\ :sub:`4`
359      - r\ :sub:`3`
360      - r\ :sub:`2`
361      - r\ :sub:`1`
362      - r\ :sub:`0`
363      - g\ :sub:`4`
364      - g\ :sub:`3`
365      -
366    * .. _V4L2-PIX-FMT-RGBA555:
367
368      - ``V4L2_PIX_FMT_RGBA555``
369      - 'RA15'
370
371      - g\ :sub:`1`
372      - g\ :sub:`0`
373      - b\ :sub:`4`
374      - b\ :sub:`3`
375      - b\ :sub:`2`
376      - b\ :sub:`1`
377      - b\ :sub:`0`
378      - a
379
380      - r\ :sub:`4`
381      - r\ :sub:`3`
382      - r\ :sub:`2`
383      - r\ :sub:`1`
384      - r\ :sub:`0`
385      - g\ :sub:`4`
386      - g\ :sub:`3`
387      - g\ :sub:`2`
388      -
389    * .. _V4L2-PIX-FMT-RGBX555:
390
391      - ``V4L2_PIX_FMT_RGBX555``
392      - 'RX15'
393
394      - g\ :sub:`1`
395      - g\ :sub:`0`
396      - b\ :sub:`4`
397      - b\ :sub:`3`
398      - b\ :sub:`2`
399      - b\ :sub:`1`
400      - b\ :sub:`0`
401      - x
402
403      - r\ :sub:`4`
404      - r\ :sub:`3`
405      - r\ :sub:`2`
406      - r\ :sub:`1`
407      - r\ :sub:`0`
408      - g\ :sub:`4`
409      - g\ :sub:`3`
410      - g\ :sub:`2`
411      -
412    * .. _V4L2-PIX-FMT-ABGR555:
413
414      - ``V4L2_PIX_FMT_ABGR555``
415      - 'AB15'
416
417      - g\ :sub:`2`
418      - g\ :sub:`1`
419      - g\ :sub:`0`
420      - r\ :sub:`4`
421      - r\ :sub:`3`
422      - r\ :sub:`2`
423      - r\ :sub:`1`
424      - r\ :sub:`0`
425
426      - a
427      - b\ :sub:`4`
428      - b\ :sub:`3`
429      - b\ :sub:`2`
430      - b\ :sub:`1`
431      - b\ :sub:`0`
432      - g\ :sub:`4`
433      - g\ :sub:`3`
434      -
435    * .. _V4L2-PIX-FMT-XBGR555:
436
437      - ``V4L2_PIX_FMT_XBGR555``
438      - 'XB15'
439
440      - g\ :sub:`2`
441      - g\ :sub:`1`
442      - g\ :sub:`0`
443      - r\ :sub:`4`
444      - r\ :sub:`3`
445      - r\ :sub:`2`
446      - r\ :sub:`1`
447      - r\ :sub:`0`
448
449      - x
450      - b\ :sub:`4`
451      - b\ :sub:`3`
452      - b\ :sub:`2`
453      - b\ :sub:`1`
454      - b\ :sub:`0`
455      - g\ :sub:`4`
456      - g\ :sub:`3`
457      -
458    * .. _V4L2-PIX-FMT-BGRA555:
459
460      - ``V4L2_PIX_FMT_BGRA555``
461      - 'BA15'
462
463      - g\ :sub:`1`
464      - g\ :sub:`0`
465      - r\ :sub:`4`
466      - r\ :sub:`3`
467      - r\ :sub:`2`
468      - r\ :sub:`1`
469      - r\ :sub:`0`
470      - a
471
472      - b\ :sub:`4`
473      - b\ :sub:`3`
474      - b\ :sub:`2`
475      - b\ :sub:`1`
476      - b\ :sub:`0`
477      - g\ :sub:`4`
478      - g\ :sub:`3`
479      - g\ :sub:`2`
480      -
481    * .. _V4L2-PIX-FMT-BGRX555:
482
483      - ``V4L2_PIX_FMT_BGRX555``
484      - 'BX15'
485
486      - g\ :sub:`1`
487      - g\ :sub:`0`
488      - r\ :sub:`4`
489      - r\ :sub:`3`
490      - r\ :sub:`2`
491      - r\ :sub:`1`
492      - r\ :sub:`0`
493      - x
494
495      - b\ :sub:`4`
496      - b\ :sub:`3`
497      - b\ :sub:`2`
498      - b\ :sub:`1`
499      - b\ :sub:`0`
500      - g\ :sub:`4`
501      - g\ :sub:`3`
502      - g\ :sub:`2`
503      -
504    * .. _V4L2-PIX-FMT-RGB565:
505
506      - ``V4L2_PIX_FMT_RGB565``
507      - 'RGBP'
508
509      - g\ :sub:`2`
510      - g\ :sub:`1`
511      - g\ :sub:`0`
512      - b\ :sub:`4`
513      - b\ :sub:`3`
514      - b\ :sub:`2`
515      - b\ :sub:`1`
516      - b\ :sub:`0`
517
518      - r\ :sub:`4`
519      - r\ :sub:`3`
520      - r\ :sub:`2`
521      - r\ :sub:`1`
522      - r\ :sub:`0`
523      - g\ :sub:`5`
524      - g\ :sub:`4`
525      - g\ :sub:`3`
526      -
527    * .. _V4L2-PIX-FMT-ARGB555X:
528
529      - ``V4L2_PIX_FMT_ARGB555X``
530      - 'AR15' | (1 << 31)
531
532      - a
533      - r\ :sub:`4`
534      - r\ :sub:`3`
535      - r\ :sub:`2`
536      - r\ :sub:`1`
537      - r\ :sub:`0`
538      - g\ :sub:`4`
539      - g\ :sub:`3`
540
541      - g\ :sub:`2`
542      - g\ :sub:`1`
543      - g\ :sub:`0`
544      - b\ :sub:`4`
545      - b\ :sub:`3`
546      - b\ :sub:`2`
547      - b\ :sub:`1`
548      - b\ :sub:`0`
549      -
550    * .. _V4L2-PIX-FMT-XRGB555X:
551
552      - ``V4L2_PIX_FMT_XRGB555X``
553      - 'XR15' | (1 << 31)
554
555      - x
556      - r\ :sub:`4`
557      - r\ :sub:`3`
558      - r\ :sub:`2`
559      - r\ :sub:`1`
560      - r\ :sub:`0`
561      - g\ :sub:`4`
562      - g\ :sub:`3`
563
564      - g\ :sub:`2`
565      - g\ :sub:`1`
566      - g\ :sub:`0`
567      - b\ :sub:`4`
568      - b\ :sub:`3`
569      - b\ :sub:`2`
570      - b\ :sub:`1`
571      - b\ :sub:`0`
572      -
573    * .. _V4L2-PIX-FMT-RGB565X:
574
575      - ``V4L2_PIX_FMT_RGB565X``
576      - 'RGBR'
577
578      - r\ :sub:`4`
579      - r\ :sub:`3`
580      - r\ :sub:`2`
581      - r\ :sub:`1`
582      - r\ :sub:`0`
583      - g\ :sub:`5`
584      - g\ :sub:`4`
585      - g\ :sub:`3`
586
587      - g\ :sub:`2`
588      - g\ :sub:`1`
589      - g\ :sub:`0`
590      - b\ :sub:`4`
591      - b\ :sub:`3`
592      - b\ :sub:`2`
593      - b\ :sub:`1`
594      - b\ :sub:`0`
595      -
596    * .. _V4L2-PIX-FMT-BGR666:
597
598      - ``V4L2_PIX_FMT_BGR666``
599      - 'BGRH'
600
601      - b\ :sub:`5`
602      - b\ :sub:`4`
603      - b\ :sub:`3`
604      - b\ :sub:`2`
605      - b\ :sub:`1`
606      - b\ :sub:`0`
607      - g\ :sub:`5`
608      - g\ :sub:`4`
609
610      - g\ :sub:`3`
611      - g\ :sub:`2`
612      - g\ :sub:`1`
613      - g\ :sub:`0`
614      - r\ :sub:`5`
615      - r\ :sub:`4`
616      - r\ :sub:`3`
617      - r\ :sub:`2`
618
619      - r\ :sub:`1`
620      - r\ :sub:`0`
621      - x
622      - x
623      - x
624      - x
625      - x
626      - x
627
628      - x
629      - x
630      - x
631      - x
632      - x
633      - x
634      - x
635      - x
636
637.. raw:: latex
638
639    \endgroup
640
641
6428 Bits Per Component
643====================
644
645These formats store an RGB triplet in three or four bytes. They are named based
646on the order of the RGB components as stored in memory, and on the total number
647of bits per pixel. For instance, RGB24 format stores a pixel with [R\ :sub:`7`
648R\ :sub:`6` R\ :sub:`5` R\ :sub:`4` R\ :sub:`3` R\ :sub:`2` R\ :sub:`1`
649R\ :sub:`0`] in the first byte, [G\ :sub:`7` G\ :sub:`6` G\ :sub:`5` G\ :sub:`4`
650G\ :sub:`3` G\ :sub:`2` G\ :sub:`1` G\ :sub:`0`] in the second byte and
651[B\ :sub:`7` B\ :sub:`6` B\ :sub:`5` B\ :sub:`4` B\ :sub:`3` B\ :sub:`2`
652B\ :sub:`1` B\ :sub:`0`] in the third byte. This differs from the DRM format
653nomenclature that instead use the order of components as seen in a 24- or
65432-bit little endian word.
655
656.. raw:: latex
657
658    \small
659
660.. flat-table:: RGB Formats With 8 Bits Per Component
661    :header-rows:  1
662    :stub-columns: 0
663
664    * - Identifier
665      - Code
666      - Byte 0 in memory
667      - Byte 1
668      - Byte 2
669      - Byte 3
670    * .. _V4L2-PIX-FMT-BGR24:
671
672      - ``V4L2_PIX_FMT_BGR24``
673      - 'BGR3'
674
675      - B\ :sub:`7-0`
676      - G\ :sub:`7-0`
677      - R\ :sub:`7-0`
678      -
679    * .. _V4L2-PIX-FMT-RGB24:
680
681      - ``V4L2_PIX_FMT_RGB24``
682      - 'RGB3'
683
684      - R\ :sub:`7-0`
685      - G\ :sub:`7-0`
686      - B\ :sub:`7-0`
687      -
688    * .. _V4L2-PIX-FMT-ABGR32:
689
690      - ``V4L2_PIX_FMT_ABGR32``
691      - 'AR24'
692
693      - B\ :sub:`7-0`
694      - G\ :sub:`7-0`
695      - R\ :sub:`7-0`
696      - A\ :sub:`7-0`
697    * .. _V4L2-PIX-FMT-XBGR32:
698
699      - ``V4L2_PIX_FMT_XBGR32``
700      - 'XR24'
701
702      - B\ :sub:`7-0`
703      - G\ :sub:`7-0`
704      - R\ :sub:`7-0`
705      - X\ :sub:`7-0`
706    * .. _V4L2-PIX-FMT-BGRA32:
707
708      - ``V4L2_PIX_FMT_BGRA32``
709      - 'RA24'
710
711      - A\ :sub:`7-0`
712      - B\ :sub:`7-0`
713      - G\ :sub:`7-0`
714      - R\ :sub:`7-0`
715    * .. _V4L2-PIX-FMT-BGRX32:
716
717      - ``V4L2_PIX_FMT_BGRX32``
718      - 'RX24'
719
720      - X\ :sub:`7-0`
721      - B\ :sub:`7-0`
722      - G\ :sub:`7-0`
723      - R\ :sub:`7-0`
724    * .. _V4L2-PIX-FMT-RGBA32:
725
726      - ``V4L2_PIX_FMT_RGBA32``
727      - 'AB24'
728
729      - R\ :sub:`7-0`
730      - G\ :sub:`7-0`
731      - B\ :sub:`7-0`
732      - A\ :sub:`7-0`
733    * .. _V4L2-PIX-FMT-RGBX32:
734
735      - ``V4L2_PIX_FMT_RGBX32``
736      - 'XB24'
737
738      - R\ :sub:`7-0`
739      - G\ :sub:`7-0`
740      - B\ :sub:`7-0`
741      - X\ :sub:`7-0`
742    * .. _V4L2-PIX-FMT-ARGB32:
743
744      - ``V4L2_PIX_FMT_ARGB32``
745      - 'BA24'
746
747      - A\ :sub:`7-0`
748      - R\ :sub:`7-0`
749      - G\ :sub:`7-0`
750      - B\ :sub:`7-0`
751    * .. _V4L2-PIX-FMT-XRGB32:
752
753      - ``V4L2_PIX_FMT_XRGB32``
754      - 'BX24'
755
756      - X\ :sub:`7-0`
757      - R\ :sub:`7-0`
758      - G\ :sub:`7-0`
759      - B\ :sub:`7-0`
760
761.. raw:: latex
762
763    \normalsize
764
765
76610 Bits Per Component
767=====================
768
769These formats store a 30-bit RGB triplet with an optional 2 bit alpha in four
770bytes. They are named based on the order of the RGB components as seen in a
77132-bit word, which is then stored in memory in little endian byte order
772(unless otherwise noted by the presence of bit 31 in the 4CC value), and on the
773number of bits for each component.
774
775.. raw:: latex
776
777    \begingroup
778    \tiny
779    \setlength{\tabcolsep}{2pt}
780
781.. tabularcolumns:: |p{3.2cm}|p{0.8cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|
782
783
784.. flat-table:: RGB Formats 10 Bits Per Color Component
785    :header-rows:  2
786    :stub-columns: 0
787
788    * - Identifier
789      - Code
790      - :cspan:`7` Byte 0 in memory
791      - :cspan:`7` Byte 1
792      - :cspan:`7` Byte 2
793      - :cspan:`7` Byte 3
794    * -
795      -
796      - 7
797      - 6
798      - 5
799      - 4
800      - 3
801      - 2
802      - 1
803      - 0
804
805      - 7
806      - 6
807      - 5
808      - 4
809      - 3
810      - 2
811      - 1
812      - 0
813
814      - 7
815      - 6
816      - 5
817      - 4
818      - 3
819      - 2
820      - 1
821      - 0
822
823      - 7
824      - 6
825      - 5
826      - 4
827      - 3
828      - 2
829      - 1
830      - 0
831    * .. _V4L2-PIX-FMT-RGBX1010102:
832
833      - ``V4L2_PIX_FMT_RGBX1010102``
834      - 'RX30'
835
836      - b\ :sub:`5`
837      - b\ :sub:`4`
838      - b\ :sub:`3`
839      - b\ :sub:`2`
840      - b\ :sub:`1`
841      - b\ :sub:`0`
842      - x
843      - x
844
845      - g\ :sub:`3`
846      - g\ :sub:`2`
847      - g\ :sub:`1`
848      - g\ :sub:`0`
849      - b\ :sub:`9`
850      - b\ :sub:`8`
851      - b\ :sub:`7`
852      - b\ :sub:`6`
853
854      - r\ :sub:`1`
855      - r\ :sub:`0`
856      - g\ :sub:`9`
857      - g\ :sub:`8`
858      - g\ :sub:`7`
859      - g\ :sub:`6`
860      - g\ :sub:`5`
861      - g\ :sub:`4`
862
863      - r\ :sub:`9`
864      - r\ :sub:`8`
865      - r\ :sub:`7`
866      - r\ :sub:`6`
867      - r\ :sub:`5`
868      - r\ :sub:`4`
869      - r\ :sub:`3`
870      - r\ :sub:`2`
871    * .. _V4L2-PIX-FMT-RGBA1010102:
872
873      - ``V4L2_PIX_FMT_RGBA1010102``
874      - 'RA30'
875
876      - b\ :sub:`5`
877      - b\ :sub:`4`
878      - b\ :sub:`3`
879      - b\ :sub:`2`
880      - b\ :sub:`1`
881      - b\ :sub:`0`
882      - a\ :sub:`1`
883      - a\ :sub:`0`
884
885      - g\ :sub:`3`
886      - g\ :sub:`2`
887      - g\ :sub:`1`
888      - g\ :sub:`0`
889      - b\ :sub:`9`
890      - b\ :sub:`8`
891      - b\ :sub:`7`
892      - b\ :sub:`6`
893
894      - r\ :sub:`1`
895      - r\ :sub:`0`
896      - g\ :sub:`9`
897      - g\ :sub:`8`
898      - g\ :sub:`7`
899      - g\ :sub:`6`
900      - g\ :sub:`5`
901      - g\ :sub:`4`
902
903      - r\ :sub:`9`
904      - r\ :sub:`8`
905      - r\ :sub:`7`
906      - r\ :sub:`6`
907      - r\ :sub:`5`
908      - r\ :sub:`4`
909      - r\ :sub:`3`
910      - r\ :sub:`2`
911    * .. _V4L2-PIX-FMT-ARGB2101010:
912
913      - ``V4L2_PIX_FMT_ARGB2101010``
914      - 'AR30'
915
916      - b\ :sub:`7`
917      - b\ :sub:`6`
918      - b\ :sub:`5`
919      - b\ :sub:`4`
920      - b\ :sub:`3`
921      - b\ :sub:`2`
922      - b\ :sub:`1`
923      - b\ :sub:`0`
924
925      - g\ :sub:`5`
926      - g\ :sub:`4`
927      - g\ :sub:`3`
928      - g\ :sub:`2`
929      - g\ :sub:`1`
930      - g\ :sub:`0`
931      - b\ :sub:`9`
932      - b\ :sub:`8`
933
934      - r\ :sub:`3`
935      - r\ :sub:`2`
936      - r\ :sub:`1`
937      - r\ :sub:`0`
938      - g\ :sub:`9`
939      - g\ :sub:`8`
940      - g\ :sub:`7`
941      - g\ :sub:`6`
942
943      - a\ :sub:`1`
944      - a\ :sub:`0`
945      - r\ :sub:`9`
946      - r\ :sub:`8`
947      - r\ :sub:`7`
948      - r\ :sub:`6`
949      - r\ :sub:`5`
950      - r\ :sub:`4`
951
952.. raw:: latex
953
954    \endgroup
955
95612 Bits Per Component
957==============================
958
959These formats store an RGB triplet in six or eight bytes, with 12 bits per component.
960Expand the bits per component to 16 bits, data in the high bits, zeros in the low bits,
961arranged in little endian order.
962
963.. raw:: latex
964
965    \small
966
967.. flat-table:: RGB Formats With 12 Bits Per Component
968    :header-rows:  1
969
970    * - Identifier
971      - Code
972      - Byte 1-0
973      - Byte 3-2
974      - Byte 5-4
975      - Byte 7-6
976    * .. _V4L2-PIX-FMT-BGR48-12:
977
978      - ``V4L2_PIX_FMT_BGR48_12``
979      - 'B312'
980
981      - B\ :sub:`15-4`
982      - G\ :sub:`15-4`
983      - R\ :sub:`15-4`
984      -
985    * .. _V4L2-PIX-FMT-ABGR64-12:
986
987      - ``V4L2_PIX_FMT_ABGR64_12``
988      - 'B412'
989
990      - B\ :sub:`15-4`
991      - G\ :sub:`15-4`
992      - R\ :sub:`15-4`
993      - A\ :sub:`15-4`
994
995.. raw:: latex
996
997    \normalsize
998
99916 Bits Per Component
1000=====================
1001
1002These formats store an RGB triplet in six bytes, with 16 bits per component
1003stored in memory in little endian byte order. They are named based on the order
1004of the RGB components as stored in memory. For instance, RGB48 stores R\
1005:sub:`7:0` and R\ :sub:`15:8` in bytes 0 and 1 respectively. This differs from
1006the DRM format nomenclature that instead uses the order of components as seen in
1007the 48-bits little endian word.
1008
1009.. raw:: latex
1010
1011    \small
1012
1013.. flat-table:: RGB Formats With 16 Bits Per Component
1014    :header-rows:  1
1015
1016    * - Identifier
1017      - Code
1018      - Byte 0
1019      - Byte 1
1020      - Byte 2
1021      - Byte 3
1022      - Byte 4
1023      - Byte 5
1024
1025    * .. _V4L2-PIX-FMT-BGR48:
1026
1027      - ``V4L2_PIX_FMT_BGR48``
1028      - 'BGR6'
1029
1030      - B\ :sub:`7-0`
1031      - B\ :sub:`15-8`
1032      - G\ :sub:`7-0`
1033      - G\ :sub:`15-8`
1034      - R\ :sub:`7-0`
1035      - R\ :sub:`15-8`
1036
1037    * .. _V4L2-PIX-FMT-RGB48:
1038
1039      - ``V4L2_PIX_FMT_RGB48``
1040      - 'RGB6'
1041
1042      - R\ :sub:`7-0`
1043      - R\ :sub:`15-8`
1044      - G\ :sub:`7-0`
1045      - G\ :sub:`15-8`
1046      - B\ :sub:`7-0`
1047      - B\ :sub:`15-8`
1048
1049.. raw:: latex
1050
1051    \normalsize
1052
1053Deprecated RGB Formats
1054======================
1055
1056Formats defined in :ref:`pixfmt-rgb-deprecated` are deprecated and must not be
1057used by new drivers. They are documented here for reference. The meaning of
1058their alpha bits ``(a)`` is ill-defined and they are interpreted as in either
1059the corresponding ARGB or XRGB format, depending on the driver.
1060
1061.. raw:: latex
1062
1063    \begingroup
1064    \tiny
1065    \setlength{\tabcolsep}{2pt}
1066
1067.. tabularcolumns:: |p{2.6cm}|p{0.70cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|
1068
1069.. _pixfmt-rgb-deprecated:
1070
1071.. flat-table:: Deprecated Packed RGB Image Formats
1072    :header-rows:  2
1073    :stub-columns: 0
1074
1075    * - Identifier
1076      - Code
1077      - :cspan:`7` Byte 0 in memory
1078
1079      - :cspan:`7` Byte 1
1080
1081      - :cspan:`7` Byte 2
1082
1083      - :cspan:`7` Byte 3
1084    * -
1085      -
1086      - 7
1087      - 6
1088      - 5
1089      - 4
1090      - 3
1091      - 2
1092      - 1
1093      - 0
1094
1095      - 7
1096      - 6
1097      - 5
1098      - 4
1099      - 3
1100      - 2
1101      - 1
1102      - 0
1103
1104      - 7
1105      - 6
1106      - 5
1107      - 4
1108      - 3
1109      - 2
1110      - 1
1111      - 0
1112
1113      - 7
1114      - 6
1115      - 5
1116      - 4
1117      - 3
1118      - 2
1119      - 1
1120      - 0
1121    * .. _V4L2-PIX-FMT-RGB444:
1122
1123      - ``V4L2_PIX_FMT_RGB444``
1124      - 'R444'
1125
1126      - g\ :sub:`3`
1127      - g\ :sub:`2`
1128      - g\ :sub:`1`
1129      - g\ :sub:`0`
1130      - b\ :sub:`3`
1131      - b\ :sub:`2`
1132      - b\ :sub:`1`
1133      - b\ :sub:`0`
1134
1135      - a\ :sub:`3`
1136      - a\ :sub:`2`
1137      - a\ :sub:`1`
1138      - a\ :sub:`0`
1139      - r\ :sub:`3`
1140      - r\ :sub:`2`
1141      - r\ :sub:`1`
1142      - r\ :sub:`0`
1143      -
1144    * .. _V4L2-PIX-FMT-RGB555:
1145
1146      - ``V4L2_PIX_FMT_RGB555``
1147      - 'RGBO'
1148
1149      - g\ :sub:`2`
1150      - g\ :sub:`1`
1151      - g\ :sub:`0`
1152      - b\ :sub:`4`
1153      - b\ :sub:`3`
1154      - b\ :sub:`2`
1155      - b\ :sub:`1`
1156      - b\ :sub:`0`
1157
1158      - a
1159      - r\ :sub:`4`
1160      - r\ :sub:`3`
1161      - r\ :sub:`2`
1162      - r\ :sub:`1`
1163      - r\ :sub:`0`
1164      - g\ :sub:`4`
1165      - g\ :sub:`3`
1166      -
1167    * .. _V4L2-PIX-FMT-RGB555X:
1168
1169      - ``V4L2_PIX_FMT_RGB555X``
1170      - 'RGBQ'
1171
1172      - a
1173      - r\ :sub:`4`
1174      - r\ :sub:`3`
1175      - r\ :sub:`2`
1176      - r\ :sub:`1`
1177      - r\ :sub:`0`
1178      - g\ :sub:`4`
1179      - g\ :sub:`3`
1180
1181      - g\ :sub:`2`
1182      - g\ :sub:`1`
1183      - g\ :sub:`0`
1184      - b\ :sub:`4`
1185      - b\ :sub:`3`
1186      - b\ :sub:`2`
1187      - b\ :sub:`1`
1188      - b\ :sub:`0`
1189      -
1190    * .. _V4L2-PIX-FMT-BGR32:
1191
1192      - ``V4L2_PIX_FMT_BGR32``
1193      - 'BGR4'
1194
1195      - b\ :sub:`7`
1196      - b\ :sub:`6`
1197      - b\ :sub:`5`
1198      - b\ :sub:`4`
1199      - b\ :sub:`3`
1200      - b\ :sub:`2`
1201      - b\ :sub:`1`
1202      - b\ :sub:`0`
1203
1204      - g\ :sub:`7`
1205      - g\ :sub:`6`
1206      - g\ :sub:`5`
1207      - g\ :sub:`4`
1208      - g\ :sub:`3`
1209      - g\ :sub:`2`
1210      - g\ :sub:`1`
1211      - g\ :sub:`0`
1212
1213      - r\ :sub:`7`
1214      - r\ :sub:`6`
1215      - r\ :sub:`5`
1216      - r\ :sub:`4`
1217      - r\ :sub:`3`
1218      - r\ :sub:`2`
1219      - r\ :sub:`1`
1220      - r\ :sub:`0`
1221
1222      - a\ :sub:`7`
1223      - a\ :sub:`6`
1224      - a\ :sub:`5`
1225      - a\ :sub:`4`
1226      - a\ :sub:`3`
1227      - a\ :sub:`2`
1228      - a\ :sub:`1`
1229      - a\ :sub:`0`
1230    * .. _V4L2-PIX-FMT-RGB32:
1231
1232      - ``V4L2_PIX_FMT_RGB32``
1233      - 'RGB4'
1234
1235      - a\ :sub:`7`
1236      - a\ :sub:`6`
1237      - a\ :sub:`5`
1238      - a\ :sub:`4`
1239      - a\ :sub:`3`
1240      - a\ :sub:`2`
1241      - a\ :sub:`1`
1242      - a\ :sub:`0`
1243
1244      - r\ :sub:`7`
1245      - r\ :sub:`6`
1246      - r\ :sub:`5`
1247      - r\ :sub:`4`
1248      - r\ :sub:`3`
1249      - r\ :sub:`2`
1250      - r\ :sub:`1`
1251      - r\ :sub:`0`
1252
1253      - g\ :sub:`7`
1254      - g\ :sub:`6`
1255      - g\ :sub:`5`
1256      - g\ :sub:`4`
1257      - g\ :sub:`3`
1258      - g\ :sub:`2`
1259      - g\ :sub:`1`
1260      - g\ :sub:`0`
1261
1262      - b\ :sub:`7`
1263      - b\ :sub:`6`
1264      - b\ :sub:`5`
1265      - b\ :sub:`4`
1266      - b\ :sub:`3`
1267      - b\ :sub:`2`
1268      - b\ :sub:`1`
1269      - b\ :sub:`0`
1270
1271.. raw:: latex
1272
1273    \endgroup
1274
1275A test utility to determine which RGB formats a driver actually supports
1276is available from the LinuxTV v4l-dvb repository. See
1277`https://linuxtv.org/repo/ <https://linuxtv.org/repo/>`__ for access
1278instructions.
1279