| .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later |
| |
| .. _pixfmt-rgb: |
| |
| *********** |
| RGB Formats |
| *********** |
| |
| These formats encode each pixel as a triplet of RGB values. They are packed |
| formats, meaning that the RGB values for one pixel are stored consecutively in |
| memory and each pixel consumes an integer number of bytes. When the number of |
| bits required to store a pixel is not aligned to a byte boundary, the data is |
| padded with additional bits to fill the remaining byte. |
| |
| The formats differ by the number of bits per RGB component (typically but not |
| always the same for all components), the order of components in memory, and the |
| presence of an alpha component or additional padding bits. |
| |
| The usage and value of the alpha bits in formats that support them (named ARGB |
| or a permutation thereof, collectively referred to as alpha formats) depend on |
| the device type and hardware operation. :ref:`Capture <capture>` devices |
| (including capture queues of mem-to-mem devices) fill the alpha component in |
| memory. When the device captures an alpha channel the alpha component will have |
| a meaningful value. Otherwise, when the device doesn't capture an alpha channel |
| but can set the alpha bit to a user-configurable value, the |
| :ref:`V4L2_CID_ALPHA_COMPONENT <v4l2-alpha-component>` control is used to |
| specify that alpha value, and the alpha component of all pixels will be set to |
| the value specified by that control. Otherwise a corresponding format without |
| an alpha component (XRGB or XBGR) must be used instead of an alpha format. |
| |
| :ref:`Output <output>` devices (including output queues of mem-to-mem devices |
| and :ref:`video output overlay <osd>` devices) read the alpha component from |
| memory. When the device processes the alpha channel the alpha component must be |
| filled with meaningful values by applications. Otherwise a corresponding format |
| without an alpha component (XRGB or XBGR) must be used instead of an alpha |
| format. |
| |
| Formats that contain padding bits are named XRGB (or a permutation thereof). |
| The padding bits contain undefined values and must be ignored by applications, |
| devices and drivers, for both :ref:`capture` and :ref:`output` devices. |
| |
| .. note:: |
| |
| - In all the tables that follow, bit 7 is the most significant bit in a byte. |
| - 'r', 'g' and 'b' denote bits of the red, green and blue components |
| respectively. 'a' denotes bits of the alpha component (if supported by the |
| format), and 'x' denotes padding bits. |
| |
| |
| Less Than 8 Bits Per Component |
| ============================== |
| |
| These formats store an RGB triplet in one, two or four bytes. They are named |
| based on the order of the RGB components as seen in a 8-, 16- or 32-bit word, |
| which is then stored in memory in little endian byte order (unless otherwise |
| noted by the presence of bit 31 in the 4CC value), and on the number of bits |
| for each component. For instance, the RGB565 format stores a pixel in a 16-bit |
| word [15:0] laid out at as [R\ :sub:`4` R\ :sub:`3` R\ :sub:`2` R\ :sub:`1` |
| R\ :sub:`0` G\ :sub:`5` G\ :sub:`4` G\ :sub:`3` G\ :sub:`2` G\ :sub:`1` |
| G\ :sub:`0` B\ :sub:`4` B\ :sub:`3` B\ :sub:`2` B\ :sub:`1` B\ :sub:`0`], and |
| stored in memory in two bytes, [R\ :sub:`4` R\ :sub:`3` R\ :sub:`2` R\ :sub:`1` |
| R\ :sub:`0` G\ :sub:`5` G\ :sub:`4` G\ :sub:`3`] followed by [G\ :sub:`2` |
| G\ :sub:`1` G\ :sub:`0` B\ :sub:`4` B\ :sub:`3` B\ :sub:`2` B\ :sub:`1` |
| B\ :sub:`0`]. |
| |
| .. raw:: latex |
| |
| \begingroup |
| \tiny |
| \setlength{\tabcolsep}{2pt} |
| |
| .. 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}| |
| |
| |
| .. flat-table:: RGB Formats With Less Than 8 Bits Per Component |
| :header-rows: 2 |
| :stub-columns: 0 |
| |
| * - Identifier |
| - Code |
| - :cspan:`7` Byte 0 in memory |
| - :cspan:`7` Byte 1 |
| - :cspan:`7` Byte 2 |
| - :cspan:`7` Byte 3 |
| * - |
| - |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| * .. _V4L2-PIX-FMT-RGB332: |
| |
| - ``V4L2_PIX_FMT_RGB332`` |
| - 'RGB1' |
| |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-ARGB444: |
| |
| - ``V4L2_PIX_FMT_ARGB444`` |
| - 'AR12' |
| |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| - a\ :sub:`3` |
| - a\ :sub:`2` |
| - a\ :sub:`1` |
| - a\ :sub:`0` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-XRGB444: |
| |
| - ``V4L2_PIX_FMT_XRGB444`` |
| - 'XR12' |
| |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| - x |
| - x |
| - x |
| - x |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-RGBA444: |
| |
| - ``V4L2_PIX_FMT_RGBA444`` |
| - 'RA12' |
| |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - a\ :sub:`3` |
| - a\ :sub:`2` |
| - a\ :sub:`1` |
| - a\ :sub:`0` |
| |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-RGBX444: |
| |
| - ``V4L2_PIX_FMT_RGBX444`` |
| - 'RX12' |
| |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - x |
| - x |
| - x |
| - x |
| |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-ABGR444: |
| |
| - ``V4L2_PIX_FMT_ABGR444`` |
| - 'AB12' |
| |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| |
| - a\ :sub:`3` |
| - a\ :sub:`2` |
| - a\ :sub:`1` |
| - a\ :sub:`0` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-XBGR444: |
| |
| - ``V4L2_PIX_FMT_XBGR444`` |
| - 'XB12' |
| |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| |
| - x |
| - x |
| - x |
| - x |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-BGRA444: |
| |
| - ``V4L2_PIX_FMT_BGRA444`` |
| - 'BA12' |
| |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - a\ :sub:`3` |
| - a\ :sub:`2` |
| - a\ :sub:`1` |
| - a\ :sub:`0` |
| |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-BGRX444: |
| |
| - ``V4L2_PIX_FMT_BGRX444`` |
| - 'BX12' |
| |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - x |
| - x |
| - x |
| - x |
| |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-ARGB555: |
| |
| - ``V4L2_PIX_FMT_ARGB555`` |
| - 'AR15' |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| - a |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - |
| * .. _V4L2-PIX-FMT-XRGB555: |
| |
| - ``V4L2_PIX_FMT_XRGB555`` |
| - 'XR15' |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| - x |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - |
| * .. _V4L2-PIX-FMT-RGBA555: |
| |
| - ``V4L2_PIX_FMT_RGBA555`` |
| - 'RA15' |
| |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - a |
| |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - |
| * .. _V4L2-PIX-FMT-RGBX555: |
| |
| - ``V4L2_PIX_FMT_RGBX555`` |
| - 'RX15' |
| |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - x |
| |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - |
| * .. _V4L2-PIX-FMT-ABGR555: |
| |
| - ``V4L2_PIX_FMT_ABGR555`` |
| - 'AB15' |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| |
| - a |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - |
| * .. _V4L2-PIX-FMT-XBGR555: |
| |
| - ``V4L2_PIX_FMT_XBGR555`` |
| - 'XB15' |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| |
| - x |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - |
| * .. _V4L2-PIX-FMT-BGRA555: |
| |
| - ``V4L2_PIX_FMT_BGRA555`` |
| - 'BA15' |
| |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - a |
| |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - |
| * .. _V4L2-PIX-FMT-BGRX555: |
| |
| - ``V4L2_PIX_FMT_BGRX555`` |
| - 'BX15' |
| |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - x |
| |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - |
| * .. _V4L2-PIX-FMT-RGB565: |
| |
| - ``V4L2_PIX_FMT_RGB565`` |
| - 'RGBP' |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`5` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - |
| * .. _V4L2-PIX-FMT-ARGB555X: |
| |
| - ``V4L2_PIX_FMT_ARGB555X`` |
| - 'AR15' | (1 << 31) |
| |
| - a |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-XRGB555X: |
| |
| - ``V4L2_PIX_FMT_XRGB555X`` |
| - 'XR15' | (1 << 31) |
| |
| - x |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-RGB565X: |
| |
| - ``V4L2_PIX_FMT_RGB565X`` |
| - 'RGBR' |
| |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`5` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-BGR666: |
| |
| - ``V4L2_PIX_FMT_BGR666`` |
| - 'BGRH' |
| |
| - b\ :sub:`5` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - g\ :sub:`5` |
| - g\ :sub:`4` |
| |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - r\ :sub:`5` |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - x |
| - x |
| - x |
| - x |
| - x |
| - x |
| |
| - x |
| - x |
| - x |
| - x |
| - x |
| - x |
| - x |
| - x |
| |
| .. raw:: latex |
| |
| \endgroup |
| |
| |
| 8 Bits Per Component |
| ==================== |
| |
| These formats store an RGB triplet in three or four bytes. They are named based |
| on the order of the RGB components as stored in memory, and on the total number |
| of bits per pixel. For instance, RGB24 format stores a pixel with [R\ :sub:`7` |
| R\ :sub:`6` R\ :sub:`5` R\ :sub:`4` R\ :sub:`3` R\ :sub:`2` R\ :sub:`1` |
| R\ :sub:`0`] in the first byte, [G\ :sub:`7` G\ :sub:`6` G\ :sub:`5` G\ :sub:`4` |
| G\ :sub:`3` G\ :sub:`2` G\ :sub:`1` G\ :sub:`0`] in the second byte and |
| [B\ :sub:`7` B\ :sub:`6` B\ :sub:`5` B\ :sub:`4` B\ :sub:`3` B\ :sub:`2` |
| B\ :sub:`1` B\ :sub:`0`] in the third byte. This differs from the DRM format |
| nomenclature that instead use the order of components as seen in a 24- or |
| 32-bit little endian word. |
| |
| .. raw:: latex |
| |
| \small |
| |
| .. flat-table:: RGB Formats With 8 Bits Per Component |
| :header-rows: 1 |
| :stub-columns: 0 |
| |
| * - Identifier |
| - Code |
| - Byte 0 in memory |
| - Byte 1 |
| - Byte 2 |
| - Byte 3 |
| * .. _V4L2-PIX-FMT-BGR24: |
| |
| - ``V4L2_PIX_FMT_BGR24`` |
| - 'BGR3' |
| |
| - B\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - R\ :sub:`7-0` |
| - |
| * .. _V4L2-PIX-FMT-RGB24: |
| |
| - ``V4L2_PIX_FMT_RGB24`` |
| - 'RGB3' |
| |
| - R\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - B\ :sub:`7-0` |
| - |
| * .. _V4L2-PIX-FMT-ABGR32: |
| |
| - ``V4L2_PIX_FMT_ABGR32`` |
| - 'AR24' |
| |
| - B\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - R\ :sub:`7-0` |
| - A\ :sub:`7-0` |
| * .. _V4L2-PIX-FMT-XBGR32: |
| |
| - ``V4L2_PIX_FMT_XBGR32`` |
| - 'XR24' |
| |
| - B\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - R\ :sub:`7-0` |
| - X\ :sub:`7-0` |
| * .. _V4L2-PIX-FMT-BGRA32: |
| |
| - ``V4L2_PIX_FMT_BGRA32`` |
| - 'RA24' |
| |
| - A\ :sub:`7-0` |
| - B\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - R\ :sub:`7-0` |
| * .. _V4L2-PIX-FMT-BGRX32: |
| |
| - ``V4L2_PIX_FMT_BGRX32`` |
| - 'RX24' |
| |
| - X\ :sub:`7-0` |
| - B\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - R\ :sub:`7-0` |
| * .. _V4L2-PIX-FMT-RGBA32: |
| |
| - ``V4L2_PIX_FMT_RGBA32`` |
| - 'AB24' |
| |
| - R\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - B\ :sub:`7-0` |
| - A\ :sub:`7-0` |
| * .. _V4L2-PIX-FMT-RGBX32: |
| |
| - ``V4L2_PIX_FMT_RGBX32`` |
| - 'XB24' |
| |
| - R\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - B\ :sub:`7-0` |
| - X\ :sub:`7-0` |
| * .. _V4L2-PIX-FMT-ARGB32: |
| |
| - ``V4L2_PIX_FMT_ARGB32`` |
| - 'BA24' |
| |
| - A\ :sub:`7-0` |
| - R\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - B\ :sub:`7-0` |
| * .. _V4L2-PIX-FMT-XRGB32: |
| |
| - ``V4L2_PIX_FMT_XRGB32`` |
| - 'BX24' |
| |
| - X\ :sub:`7-0` |
| - R\ :sub:`7-0` |
| - G\ :sub:`7-0` |
| - B\ :sub:`7-0` |
| |
| .. raw:: latex |
| |
| \normalsize |
| |
| |
| 10 Bits Per Component |
| ===================== |
| |
| These formats store a 30-bit RGB triplet with an optional 2 bit alpha in four |
| bytes. They are named based on the order of the RGB components as seen in a |
| 32-bit word, which is then stored in memory in little endian byte order |
| (unless otherwise noted by the presence of bit 31 in the 4CC value), and on the |
| number of bits for each component. |
| |
| .. raw:: latex |
| |
| \begingroup |
| \tiny |
| \setlength{\tabcolsep}{2pt} |
| |
| .. 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}| |
| |
| |
| .. flat-table:: RGB Formats 10 Bits Per Color Component |
| :header-rows: 2 |
| :stub-columns: 0 |
| |
| * - Identifier |
| - Code |
| - :cspan:`7` Byte 0 in memory |
| - :cspan:`7` Byte 1 |
| - :cspan:`7` Byte 2 |
| - :cspan:`7` Byte 3 |
| * - |
| - |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| * .. _V4L2-PIX-FMT-RGBX1010102: |
| |
| - ``V4L2_PIX_FMT_RGBX1010102`` |
| - 'RX30' |
| |
| - b\ :sub:`5` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - x |
| - x |
| |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`9` |
| - b\ :sub:`8` |
| - b\ :sub:`7` |
| - b\ :sub:`6` |
| |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`9` |
| - g\ :sub:`8` |
| - g\ :sub:`7` |
| - g\ :sub:`6` |
| - g\ :sub:`5` |
| - g\ :sub:`4` |
| |
| - r\ :sub:`9` |
| - r\ :sub:`8` |
| - r\ :sub:`7` |
| - r\ :sub:`6` |
| - r\ :sub:`5` |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| * .. _V4L2-PIX-FMT-RGBA1010102: |
| |
| - ``V4L2_PIX_FMT_RGBA1010102`` |
| - 'RA30' |
| |
| - b\ :sub:`5` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - a\ :sub:`1` |
| - a\ :sub:`0` |
| |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`9` |
| - b\ :sub:`8` |
| - b\ :sub:`7` |
| - b\ :sub:`6` |
| |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`9` |
| - g\ :sub:`8` |
| - g\ :sub:`7` |
| - g\ :sub:`6` |
| - g\ :sub:`5` |
| - g\ :sub:`4` |
| |
| - r\ :sub:`9` |
| - r\ :sub:`8` |
| - r\ :sub:`7` |
| - r\ :sub:`6` |
| - r\ :sub:`5` |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| * .. _V4L2-PIX-FMT-ARGB2101010: |
| |
| - ``V4L2_PIX_FMT_ARGB2101010`` |
| - 'AR30' |
| |
| - b\ :sub:`7` |
| - b\ :sub:`6` |
| - b\ :sub:`5` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| - g\ :sub:`5` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`9` |
| - b\ :sub:`8` |
| |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`9` |
| - g\ :sub:`8` |
| - g\ :sub:`7` |
| - g\ :sub:`6` |
| |
| - a\ :sub:`1` |
| - a\ :sub:`0` |
| - r\ :sub:`9` |
| - r\ :sub:`8` |
| - r\ :sub:`7` |
| - r\ :sub:`6` |
| - r\ :sub:`5` |
| - r\ :sub:`4` |
| |
| .. raw:: latex |
| |
| \endgroup |
| |
| 12 Bits Per Component |
| ============================== |
| |
| These formats store an RGB triplet in six or eight bytes, with 12 bits per component. |
| Expand the bits per component to 16 bits, data in the high bits, zeros in the low bits, |
| arranged in little endian order. |
| |
| .. raw:: latex |
| |
| \small |
| |
| .. flat-table:: RGB Formats With 12 Bits Per Component |
| :header-rows: 1 |
| |
| * - Identifier |
| - Code |
| - Byte 1-0 |
| - Byte 3-2 |
| - Byte 5-4 |
| - Byte 7-6 |
| * .. _V4L2-PIX-FMT-BGR48-12: |
| |
| - ``V4L2_PIX_FMT_BGR48_12`` |
| - 'B312' |
| |
| - B\ :sub:`15-4` |
| - G\ :sub:`15-4` |
| - R\ :sub:`15-4` |
| - |
| * .. _V4L2-PIX-FMT-ABGR64-12: |
| |
| - ``V4L2_PIX_FMT_ABGR64_12`` |
| - 'B412' |
| |
| - B\ :sub:`15-4` |
| - G\ :sub:`15-4` |
| - R\ :sub:`15-4` |
| - A\ :sub:`15-4` |
| |
| .. raw:: latex |
| |
| \normalsize |
| |
| 16 Bits Per Component |
| ===================== |
| |
| These formats store an RGB triplet in six bytes, with 16 bits per component |
| stored in memory in little endian byte order. They are named based on the order |
| of the RGB components as stored in memory. For instance, RGB48 stores R\ |
| :sub:`7:0` and R\ :sub:`15:8` in bytes 0 and 1 respectively. This differs from |
| the DRM format nomenclature that instead uses the order of components as seen in |
| the 48-bits little endian word. |
| |
| .. raw:: latex |
| |
| \small |
| |
| .. flat-table:: RGB Formats With 16 Bits Per Component |
| :header-rows: 1 |
| |
| * - Identifier |
| - Code |
| - Byte 0 |
| - Byte 1 |
| - Byte 2 |
| - Byte 3 |
| - Byte 4 |
| - Byte 5 |
| |
| * .. _V4L2-PIX-FMT-BGR48: |
| |
| - ``V4L2_PIX_FMT_BGR48`` |
| - 'BGR6' |
| |
| - B\ :sub:`7-0` |
| - B\ :sub:`15-8` |
| - G\ :sub:`7-0` |
| - G\ :sub:`15-8` |
| - R\ :sub:`7-0` |
| - R\ :sub:`15-8` |
| |
| * .. _V4L2-PIX-FMT-RGB48: |
| |
| - ``V4L2_PIX_FMT_RGB48`` |
| - 'RGB6' |
| |
| - R\ :sub:`7-0` |
| - R\ :sub:`15-8` |
| - G\ :sub:`7-0` |
| - G\ :sub:`15-8` |
| - B\ :sub:`7-0` |
| - B\ :sub:`15-8` |
| |
| .. raw:: latex |
| |
| \normalsize |
| |
| Deprecated RGB Formats |
| ====================== |
| |
| Formats defined in :ref:`pixfmt-rgb-deprecated` are deprecated and must not be |
| used by new drivers. They are documented here for reference. The meaning of |
| their alpha bits ``(a)`` is ill-defined and they are interpreted as in either |
| the corresponding ARGB or XRGB format, depending on the driver. |
| |
| .. raw:: latex |
| |
| \begingroup |
| \tiny |
| \setlength{\tabcolsep}{2pt} |
| |
| .. 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}| |
| |
| .. _pixfmt-rgb-deprecated: |
| |
| .. flat-table:: Deprecated Packed RGB Image Formats |
| :header-rows: 2 |
| :stub-columns: 0 |
| |
| * - Identifier |
| - Code |
| - :cspan:`7` Byte 0 in memory |
| |
| - :cspan:`7` Byte 1 |
| |
| - :cspan:`7` Byte 2 |
| |
| - :cspan:`7` Byte 3 |
| * - |
| - |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| |
| - 7 |
| - 6 |
| - 5 |
| - 4 |
| - 3 |
| - 2 |
| - 1 |
| - 0 |
| * .. _V4L2-PIX-FMT-RGB444: |
| |
| - ``V4L2_PIX_FMT_RGB444`` |
| - 'R444' |
| |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| - a\ :sub:`3` |
| - a\ :sub:`2` |
| - a\ :sub:`1` |
| - a\ :sub:`0` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-RGB555: |
| |
| - ``V4L2_PIX_FMT_RGB555`` |
| - 'RGBO' |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| - a |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - |
| * .. _V4L2-PIX-FMT-RGB555X: |
| |
| - ``V4L2_PIX_FMT_RGB555X`` |
| - 'RGBQ' |
| |
| - a |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| - |
| * .. _V4L2-PIX-FMT-BGR32: |
| |
| - ``V4L2_PIX_FMT_BGR32`` |
| - 'BGR4' |
| |
| - b\ :sub:`7` |
| - b\ :sub:`6` |
| - b\ :sub:`5` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| - g\ :sub:`7` |
| - g\ :sub:`6` |
| - g\ :sub:`5` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| |
| - r\ :sub:`7` |
| - r\ :sub:`6` |
| - r\ :sub:`5` |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| |
| - a\ :sub:`7` |
| - a\ :sub:`6` |
| - a\ :sub:`5` |
| - a\ :sub:`4` |
| - a\ :sub:`3` |
| - a\ :sub:`2` |
| - a\ :sub:`1` |
| - a\ :sub:`0` |
| * .. _V4L2-PIX-FMT-RGB32: |
| |
| - ``V4L2_PIX_FMT_RGB32`` |
| - 'RGB4' |
| |
| - a\ :sub:`7` |
| - a\ :sub:`6` |
| - a\ :sub:`5` |
| - a\ :sub:`4` |
| - a\ :sub:`3` |
| - a\ :sub:`2` |
| - a\ :sub:`1` |
| - a\ :sub:`0` |
| |
| - r\ :sub:`7` |
| - r\ :sub:`6` |
| - r\ :sub:`5` |
| - r\ :sub:`4` |
| - r\ :sub:`3` |
| - r\ :sub:`2` |
| - r\ :sub:`1` |
| - r\ :sub:`0` |
| |
| - g\ :sub:`7` |
| - g\ :sub:`6` |
| - g\ :sub:`5` |
| - g\ :sub:`4` |
| - g\ :sub:`3` |
| - g\ :sub:`2` |
| - g\ :sub:`1` |
| - g\ :sub:`0` |
| |
| - b\ :sub:`7` |
| - b\ :sub:`6` |
| - b\ :sub:`5` |
| - b\ :sub:`4` |
| - b\ :sub:`3` |
| - b\ :sub:`2` |
| - b\ :sub:`1` |
| - b\ :sub:`0` |
| |
| .. raw:: latex |
| |
| \endgroup |
| |
| A test utility to determine which RGB formats a driver actually supports |
| is available from the LinuxTV v4l-dvb repository. See |
| `https://linuxtv.org/repo/ <https://linuxtv.org/repo/>`__ for access |
| instructions. |