2.5. RGB 格式

这些格式将每个像素编码为 RGB 值的三个一组。它们是紧凑格式,这意味着一个像素的 RGB 值在内存中连续存储,并且每个像素占用整数个字节。当存储一个像素所需的位数未与字节边界对齐时,数据会用额外的位进行填充,以填充剩余的字节。

这些格式的不同之处在于每个 RGB 分量的位数(通常但不总是所有分量相同),内存中分量的顺序,以及是否存在 alpha 分量或其他填充位。

在支持 alpha 位的格式(命名为 ARGB 或其排列,统称为 alpha 格式)中,alpha 位的使用和值取决于设备类型和硬件操作。采集设备(包括 mem-to-mem 设备的采集队列)在内存中填充 alpha 分量。当设备捕获 alpha 通道时,alpha 分量将具有有意义的值。否则,当设备不捕获 alpha 通道但可以将 alpha 位设置为用户可配置的值时,将使用 V4L2_CID_ALPHA_COMPONENT 控制来指定 alpha 值,并且所有像素的 alpha 分量都将设置为该控制指定的值。否则,必须使用不带 alpha 分量的相应格式(XRGB 或 XBGR)来代替 alpha 格式。

输出设备(包括 mem-to-mem 设备的输出队列和 视频输出覆盖设备)从内存中读取 alpha 分量。当设备处理 alpha 通道时,应用程序必须用有意义的值填充 alpha 分量。否则,必须使用不带 alpha 分量的相应格式(XRGB 或 XBGR)来代替 alpha 格式。

包含填充位的格式被命名为 XRGB(或其排列)。填充位包含未定义的值,必须被应用程序、设备和驱动程序忽略,无论是用于视频采集接口 还是 视频输出接口 设备。

注意

  • 在下面的所有表中,位 7 是字节中最重要的位。

  • ‘r’、‘g’ 和 ‘b’ 分别表示红色、绿色和蓝色分量的位。‘a’ 表示 alpha 分量的位(如果格式支持),‘x’ 表示填充位。

2.5.1. 每个分量少于 8 位

这些格式在一个、两个或四个字节中存储 RGB 三元组。它们根据在 8 位、16 位或 32 位字中看到的 RGB 分量的顺序命名,然后在内存中以小端字节顺序存储(除非 4CC 值中存在位 31 另有说明),以及每个分量的位数。例如,RGB565 格式将像素存储在 16 位字 [15:0] 中,布局为 [R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0],并在内存中存储为两个字节,[R4 R3 R2 R1 R0 G5 G4 G3] 后跟 [G2 G1 G0 B4 B3 B2 B1 B0]。

每个分量少于 8 位的 RGB 格式

标识符

代码

内存中的字节 0

字节 1

字节 2

字节 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

‘RGB1’

r2

r1

r0

g2

g1

g0

b1

b0

V4L2_PIX_FMT_ARGB444

‘AR12’

g3

g2

g1

g0

b3

b2

b1

b0

a3

a2

a1

a0

r3

r2

r1

r0

V4L2_PIX_FMT_XRGB444

‘XR12’

g3

g2

g1

g0

b3

b2

b1

b0

x

x

x

x

r3

r2

r1

r0

V4L2_PIX_FMT_RGBA444

‘RA12’

b3

b2

b1

b0

a3

a2

a1

a0

r3

r2

r1

r0

g3

g2

g1

g0

V4L2_PIX_FMT_RGBX444

‘RX12’

b3

b2

b1

b0

x

x

x

x

r3

r2

r1

r0

g3

g2

g1

g0

V4L2_PIX_FMT_ABGR444

‘AB12’

g3

g2

g1

g0

r3

r2

r1

r0

a3

a2

a1

a0

b3

b2

b1

b0

V4L2_PIX_FMT_XBGR444

‘XB12’

g3

g2

g1

g0

r3

r2

r1

r0

x

x

x

x

b3

b2

b1

b0

V4L2_PIX_FMT_BGRA444

‘BA12’

r3

r2

r1

r0

a3

a2

a1

a0

b3

b2

b1

b0

g3

g2

g1

g0

V4L2_PIX_FMT_BGRX444

‘BX12’

r3

r2

r1

r0

x

x

x

x

b3

b2

b1

b0

g3

g2

g1

g0

V4L2_PIX_FMT_ARGB555

‘AR15’

g2

g1

g0

b4

b3

b2

b1

b0

a

r4

r3

r2

r1

r0

g4

g3

V4L2_PIX_FMT_XRGB555

‘XR15’

g2

g1

g0

b4

b3

b2

b1

b0

x

r4

r3

r2

r1

r0

g4

g3

V4L2_PIX_FMT_RGBA555

‘RA15’

g1

g0

b4

b3

b2

b1

b0

a

r4

r3

r2

r1

r0

g4

g3

g2

V4L2_PIX_FMT_RGBX555

‘RX15’

g1

g0

b4

b3

b2

b1

b0

x

r4

r3

r2

r1

r0

g4

g3

g2

V4L2_PIX_FMT_ABGR555

‘AB15’

g2

g1

g0

r4

r3

r2

r1

r0

a

b4

b3

b2

b1

b0

g4

g3

V4L2_PIX_FMT_XBGR555

‘XB15’

g2

g1

g0

r4

r3

r2

r1

r0

x

b4

b3

b2

b1

b0

g4

g3

V4L2_PIX_FMT_BGRA555

‘BA15’

g1

g0

r4

r3

r2

r1

r0

a

b4

b3

b2

b1

b0

g4

g3

g2

V4L2_PIX_FMT_BGRX555

‘BX15’

g1

g0

r4

r3

r2

r1

r0

x

b4

b3

b2

b1

b0

g4

g3

g2

V4L2_PIX_FMT_RGB565

‘RGBP’

g2

g1

g0

b4

b3

b2

b1

b0

r4

r3

r2

r1

r0

g5

g4

g3

V4L2_PIX_FMT_ARGB555X

‘AR15’ | (1 << 31)

a

r4

r3

r2

r1

r0

g4

g3

g2

g1

g0

b4

b3

b2

b1

b0

V4L2_PIX_FMT_XRGB555X

‘XR15’ | (1 << 31)

x

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_BGR666

‘BGRH’

b5

b4

b3

b2

b1

b0

g5

g4

g3

g2

g1

g0

r5

r4

r3

r2

r1

r0

x

x

x

x

x

x

x

x

x

x

x

x

x

x

2.5.2. 每个分量 8 位

这些格式在三个或四个字节中存储 RGB 三元组。它们根据内存中存储的 RGB 分量的顺序以及每个像素的总位数进行命名。例如,RGB24 格式在第一个字节中存储 [R7 R6 R5 R4 R3 R2 R1 R0] 的像素,在第二个字节中存储 [G7 G6 G5 G4 G3 G2 G1 G0],在第三个字节中存储 [B7 B6 B5 B4 B3 B2 B1 B0]。这与 DRM 格式命名法不同,DRM 格式命名法使用在 24 位或 32 位小端字中看到的分量的顺序。

每个分量 8 位的 RGB 格式

标识符

代码

内存中的字节 0

字节 1

字节 2

字节 3

V4L2_PIX_FMT_BGR24

‘BGR3’

B7-0

G7-0

R7-0

V4L2_PIX_FMT_RGB24

‘RGB3’

R7-0

G7-0

B7-0

V4L2_PIX_FMT_ABGR32

‘AR24’

B7-0

G7-0

R7-0

A7-0

V4L2_PIX_FMT_XBGR32

‘XR24’

B7-0

G7-0

R7-0

X7-0

V4L2_PIX_FMT_BGRA32

‘RA24’

A7-0

B7-0

G7-0

R7-0

V4L2_PIX_FMT_BGRX32

‘RX24’

X7-0

B7-0

G7-0

R7-0

V4L2_PIX_FMT_RGBA32

‘AB24’

R7-0

G7-0

B7-0

A7-0

V4L2_PIX_FMT_RGBX32

‘XB24’

R7-0

G7-0

B7-0

X7-0

V4L2_PIX_FMT_ARGB32

‘BA24’

A7-0

R7-0

G7-0

B7-0

V4L2_PIX_FMT_XRGB32

‘BX24’

X7-0

R7-0

G7-0

B7-0

2.5.3. 每个分量 10 位

这些格式在四个字节中存储一个 30 位 RGB 三元组,带有一个可选的 2 位 alpha。它们根据在 32 位字中看到的 RGB 分量的顺序命名,然后在内存中以小端字节顺序存储(除非 4CC 值中存在位 31 另有说明),以及每个分量的位数。

每个颜色分量 10 位的 RGB 格式

标识符

代码

内存中的字节 0

字节 1

字节 2

字节 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

‘RX30’

b5

b4

b3

b2

b1

b0

x

x

g3

g2

g1

g0

b9

b8

b7

b6

r1

r0

g9

g8

g7

g6

g5

g4

r9

r8

r7

r6

r5

r4

r3

r2

V4L2_PIX_FMT_RGBA1010102

‘RA30’

b5

b4

b3

b2

b1

b0

a1

a0

g3

g2

g1

g0

b9

b8

b7

b6

r1

r0

g9

g8

g7

g6

g5

g4

r9

r8

r7

r6

r5

r4

r3

r2

V4L2_PIX_FMT_ARGB2101010

‘AR30’

b7

b6

b5

b4

b3

b2

b1

b0

g5

g4

g3

g2

g1

g0

b9

b8

r3

r2

r1

r0

g9

g8

g7

g6

a1

a0

r9

r8

r7

r6

r5

r4

2.5.4. 每个分量 12 位

这些格式在六个或八个字节中存储 RGB 三元组,每个分量 12 位。将每个分量的位扩展到 16 位,高位为数据,低位为零,以小端顺序排列。

每个分量 12 位的 RGB 格式

标识符

代码

字节 1-0

字节 3-2

字节 5-4

字节 7-6

V4L2_PIX_FMT_BGR48_12

‘B312’

B15-4

G15-4

R15-4

V4L2_PIX_FMT_ABGR64_12

‘B412’

B15-4

G15-4

R15-4

A15-4

2.5.5. 每个分量 16 位

这些格式在六个字节中存储 RGB 三元组,每个分量 16 位,以小端字节顺序存储在内存中。它们根据内存中存储的 RGB 分量的顺序命名。例如,RGB48 在字节 0 和 1 中分别存储 R7:0 和 R15:8。这与 DRM 格式命名法不同,DRM 格式命名法使用在 48 位小端字中看到的分量的顺序。

每个分量 16 位的 RGB 格式

标识符

代码

字节 0

字节 1

字节 2

字节 3

字节 4

字节 5

V4L2_PIX_FMT_BGR48

‘BGR6’

B7-0

B15-8

G7-0

G15-8

R7-0

R15-8

V4L2_PIX_FMT_RGB48

‘RGB6’

R7-0

R15-8

G7-0

G15-8

B7-0

B15-8

2.5.6. 弃用的 RGB 格式

已弃用的打包 RGB 图像格式中定义的格式已被弃用,新的驱动程序不得使用。此处记录它们仅供参考。它们的 Alpha 位 (a) 的含义不明确,并且根据驱动程序的不同,它们被解释为对应的 ARGB 或 XRGB 格式。

已弃用的打包 RGB 图像格式

标识符

代码

内存中的字节 0

字节 1

字节 2

字节 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

‘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_RGB555X

‘RGBQ’

a

r4

r3

r2

r1

r0

g4

g3

g2

g1

g0

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

一个测试工具,用于确定驱动程序实际支持哪些 RGB 格式,可以从 LinuxTV v4l-dvb 存储库中获得。请参阅 https://linuxtv.org/repo/ 获取访问说明。