Packed RGB formats
&manvol;

# Packed RGB formats

Packed RGB formats

## Description

These formats are designed to match the pixel formats of typical PC graphics frame buffers. They occupy 8, 16, 24 or 32 bits per pixel. These are all packed-pixel formats, meaning all the data for a pixel lie next to each other in memory.

When one of these formats is used, drivers shall report the colorspace `V4L2_COLORSPACE_SRGB`.

### Packed RGB Image Formats

Identifier | Code |  | Byte 0 in memory | Byte 1 | Byte 2 | Byte 3
--- | --- | --- | --- | --- | --- | ---
|  | Bit | 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` | 'RGB1' |  | b1 | b0 | g2 | g1 | g0 | r2 | r1 | r0
`V4L2_PIX_FMT_RGB444` | 'R444' |  | g3 | g2 | g1 | g0 | b3 | b2 | b1 | b0 |  | a3 | a2 | a1 | a0 | r3 | r2 | r1 | r0
`V4L2_PIX_FMT_RGB555` | 'RGBO' |  | g2 | g1 | g0 | r4 | r3 | r2 | r1 | r0 |  | a | b4 | b3 | b2 | b1 | b0 | g4 | g3
`V4L2_PIX_FMT_RGB565` | 'RGBP' |  | g2 | g1 | g0 | r4 | r3 | r2 | r1 | r0 |  | b4 | b3 | b2 | b1 | b0 | g5 | g4 | g3
`V4L2_PIX_FMT_RGB555X` | 'RGBQ' |  | a | b4 | b3 | b2 | b1 | b0 | g4 | g3 |  | g2 | g1 | g0 | r4 | r3 | r2 | r1 | r0
`V4L2_PIX_FMT_RGB565X` | 'RGBR' |  | b4 | b3 | b2 | b1 | b0 | g5 | g4 | g3 |  | g2 | g1 | g0 | r4 | r3 | r2 | r1 | r0
`V4L2_PIX_FMT_BGR24` | 'BGR3' |  | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |  | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 |  | r7 | r6 | r5 | r4 | r3 | r2 | r1 | r0
`V4L2_PIX_FMT_RGB24` | 'RGB3' |  | r7 | r6 | r5 | r4 | r3 | r2 | r1 | r0 |  | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 |  | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0
`V4L2_PIX_FMT_BGR32` | 'BGR4' |  | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |  | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 |  | r7 | r6 | r5 | r4 | r3 | r2 | r1 | r0 |  | a7 | a6 | a5 | a4 | a3 | a2 | a1 | a0
`V4L2_PIX_FMT_RGB32` | 'RGB4' |  | r7 | r6 | r5 | r4 | r3 | r2 | r1 | r0 |  | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 |  | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |  | a7 | a6 | a5 | a4 | a3 | a2 | a1 | a0

Bit 7 is the most significant bit. The value of a = alpha bits is undefined when reading from the driver, ignored when writing to the driver, except when alpha blending has been negotiated for a Video Overlay or Video Output Overlay.

### `V4L2_PIX_FMT_BGR24` 4 × 4 pixel image

### Byte Order.

Each cell is one byte.

start + 0: | B00 | G00 | R00 | B01 | G01 | R01 | B02 | G02 | R02 | B03 | G03 | R03
start + 12: | B10 | G10 | R10 | B11 | G11 | R11 | B12 | G12 | R12 | B13 | G13 | R13
start + 24: | B20 | G20 | R20 | B21 | G21 | R21 | B22 | G22 | R22 | B23 | G23 | R23
start + 36: | B30 | G30 | R30 | B31 | G31 | R31 | B32 | G32 | R32 | B33 | G33 | R33

Drivers may interpret these formats differently.

Some RGB formats above are uncommon and were probably defined in error. Drivers may interpret them as in .

### Packed RGB Image Formats (corrected)

Identifier | Code |  | Byte 0 in memory | Byte 1 | Byte 2 | Byte 3
--- | --- | --- | --- | --- | --- | ---
|  | Bit | 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` | 'RGB1' |  | r2 | r1 | r0 | g2 | g1 | g0 | b1 | b0
`V4L2_PIX_FMT_RGB444` | 'R444' |  | g3 | g2 | g1 | g0 | b3 | b2 | b1 | b0 |  | a3 | a2 | a1 | a0 | r3 | r2 | r1 | r0
`V4L2_PIX_FMT_RGB555` | 'RGBO' |  | g2 | g1 | g0 | b4 | b3 | b2 | b1 | b0 |  | a | r4 | r3 | r2 | r1 | r0 | g4 | g3
`V4L2_PIX_FMT_RGB565` | 'RGBP' |  | g2 | g1 | g0 | b4 | b3 | b2 | b1 | b0 |  | r4 | r3 | r2 | r1 | r0 | g5 | g4 | g3
`V4L2_PIX_FMT_RGB555X` | 'RGBQ' |  | a | r4 | r3 | r2 | r1 | r0 | g4 | g3 |  | g2 | g1 | g0 | b4 | b3 | b2 | b1 | b0
`V4L2_PIX_FMT_RGB565X` | 'RGBR' |  | r4 | r3 | r2 | r1 | r0 | g5 | g4 | g3 |  | g2 | g1 | g0 | b4 | b3 | b2 | b1 | b0
`V4L2_PIX_FMT_BGR24` | 'BGR3' |  | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |  | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 |  | r7 | r6 | r5 | r4 | r3 | r2 | r1 | r0
`V4L2_PIX_FMT_RGB24` | 'RGB3' |  | r7 | r6 | r5 | r4 | r3 | r2 | r1 | r0 |  | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 |  | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0
`V4L2_PIX_FMT_BGR32` | 'BGR4' |  | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |  | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 |  | r7 | r6 | r5 | r4 | r3 | r2 | r1 | r0 |  | a7 | a6 | a5 | a4 | a3 | a2 | a1 | a0
`V4L2_PIX_FMT_RGB32` | 'RGB4' |  | a7 | a6 | a5 | a4 | a3 | a2 | a1 | a0 |  | r7 | r6 | r5 | r4 | r3 | r2 | r1 | r0 |  | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 |  | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0

A test utility to determine which RGB formats a driver actually supports is available from the LinuxTV v4l-dvb repository. See &v4l-dvb; for access instructions.