2.7.1.1. 打包 YUV 格式

与打包 RGB 格式类似,打包 YUV 格式将 Y、Cb 和 Cr 分量连续存储在内存中。它们可能会对色度分量应用子采样,因此在如何交错这三个分量方面有所不同。

注意

  • 在下面的所有表格中,位 7 是字节中的最高有效位。

  • ‘Y’、‘Cb’ 和 ‘Cr’ 分别表示亮度、蓝色色度(也称为 ‘U’)和红色色度(也称为 ‘V’)分量的位。 ‘A’ 表示 alpha 分量的位(如果格式支持),而 ‘X’ 表示填充位。

2.7.1.1.1. 4:4:4 子采样

这些格式不对色度分量进行子采样,并将每个像素存储为 Y、Cb 和 Cr 值的完整三元组。

下表列出了每个分量少于 8 位的打包 YUV 4:4:4 格式。它们的命名基于在 16 位字中看到的 Y、Cb 和 Cr 分量的顺序,然后以小端字节顺序存储在内存中,以及每个分量的位数。 例如,YUV565 格式将一个像素存储在 16 位字 [15:0] 中,布局为 [Y’4-0 Cb5-0 Cr4-0],并以两个字节的形式存储在内存中,[Cb2-0 Cr4-0],后跟 [Y’4-0 Cb5-3]。

打包 YUV 4:4:4 图像格式(小于 8bpc)

标识符

代码

内存中的字节 0

字节 1

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

V4L2_PIX_FMT_YUV444

‘Y444’

Cb3

Cb2

Cb1

Cb0

Cr3

Cr2

Cr1

Cr0

a3

a2

a1

a0

Y’3

Y’2

Y’1

Y’0

V4L2_PIX_FMT_YUV555

‘YUVO’

Cb2

Cb1

Cb0

Cr4

Cr3

Cr2

Cr1

Cr0

a

Y’4

Y’3

Y’2

Y’1

Y’0

Cb4

Cb3

V4L2_PIX_FMT_YUV565

‘YUVP’

Cb2

Cb1

Cb0

Cr4

Cr3

Cr2

Cr1

Cr0

Y’4

Y’3

Y’2

Y’1

Y’0

Cb5

Cb4

Cb3

注意

对于 YUV444 和 YUV555 格式,从驱动程序读取时 alpha 位的数值未定义,写入驱动程序时会被忽略,除非已为视频覆盖视频输出覆盖协商了 alpha 混合。

下表列出了每个分量 8 位的打包 YUV 4:4:4 格式。它们的命名基于 Y、Cb 和 Cr 分量在内存中存储的顺序,以及每个像素的总位数。 例如,VUYX32 格式将像素存储为第一个字节中的 Cr7-0、第二个字节中的 Cb7-0 和第三个字节中的 Y’7-0

打包 YUV 图像格式 (8bpc)

标识符

代码

字节 0

字节 1

字节 2

字节 3

V4L2_PIX_FMT_YUV32

‘YUV4’

A7-0

Y’7-0

Cb7-0

Cr7-0

V4L2_PIX_FMT_AYUV32

‘AYUV’

A7-0

Y’7-0

Cb7-0

Cr7-0

V4L2_PIX_FMT_XYUV32

‘XYUV’

X7-0

Y’7-0

Cb7-0

Cr7-0

V4L2_PIX_FMT_VUYA32

‘VUYA’

Cr7-0

Cb7-0

Y’7-0

A7-0

V4L2_PIX_FMT_VUYX32

‘VUYX’

Cr7-0

Cb7-0

Y’7-0

X7-0

V4L2_PIX_FMT_YUVA32

‘YUVA’

Y’7-0

Cb7-0

Cr7-0

A7-0

V4L2_PIX_FMT_YUVX32

‘YUVX’

Y’7-0

Cb7-0

Cr7-0

X7-0

V4L2_PIX_FMT_YUV24

‘YUV3’

Y’7-0

Cb7-0

Cr7-0

-

注意

  • alpha 分量应包含驱动程序和应用程序可以使用的有意义的值。

  • 填充位包含未定义的值,所有应用程序和驱动程序都必须忽略这些值。

下表列出了每个分量 12 位的打包 YUV 4:4:4 格式。将每个分量的位数扩展到 16 位,高位为数据,低位为零,以小端顺序排列,在 6 个字节中存储 1 个像素。

打包 YUV 4:4:4 图像格式 (12bpc)

标识符

代码

字节 1-0

字节 3-2

字节 5-4

字节 7-6

字节 9-8

字节 11-10

V4L2_PIX_FMT_YUV48_12

‘Y312’

Y’0

Cb0

Cr0

Y’1

Cb1

Cr1

2.7.1.1.2. 4:2:2 子采样

这些格式通常称为 YUYV 或 YUY2,将色度分量水平子采样 2,并在一个容器中存储 2 个像素。对于 8 位格式,容器为 32 位,对于 10+ 位格式,容器为 64 位。

每个分量超过 8 位的打包 YUYV 格式存储为四个 16 位小端字。每个字的最高有效位包含一个分量,最低有效位是零填充。

32 位容器中的打包 YUV 4:2:2 格式

标识符

代码

字节 0

字节 1

字节 2

字节 3

字节 4

字节 5

字节 6

字节 7

V4L2_PIX_FMT_UYVY

‘UYVY’

Cb0

Y’0

Cr0

Y’1

Cb2

Y’2

Cr2

Y’3

V4L2_PIX_FMT_VYUY

‘VYUY’

Cr0

Y’0

Cb0

Y’1

Cr2

Y’2

Cb2

Y’3

V4L2_PIX_FMT_YUYV

‘YUYV’

Y’0

Cb0

Y’1

Cr0

Y’2

Cb2

Y’3

Cr2

V4L2_PIX_FMT_YVYU

‘YVYU’

Y’0

Cr0

Y’1

Cb0

Y’2

Cr2

Y’3

Cb2

64 位容器中的打包 YUV 4:2:2 格式

标识符

代码

字 0

字 1

字 2

字 3

V4L2_PIX_FMT_Y210

‘Y210’

Y’0(位 15-6)

Cb0(位 15-6)

Y’1(位 15-6)

Cr0(位 15-6)

V4L2_PIX_FMT_Y212

‘Y212’

Y’0(位 15-4)

Cb0(位 15-4)

Y’1(位 15-4)

Cr0(位 15-4)

V4L2_PIX_FMT_Y216

‘Y216’

Y’0(位 15-0)

Cb0(位 15-0)

Y’1(位 15-0)

Cr0(位 15-0)

颜色采样位置: 色度采样在水平方向上间隙定位

2.7.1.1.3. 4:1:1 子采样

此格式将色度分量水平子采样 4,并在 12 个字节中存储 8 个像素。

打包 YUV 4:1:1 格式

标识符

代码

字节 0

字节 1

字节 2

字节 3

字节 4

字节 5

字节 6

字节 7

字节 8

字节 9

字节 10

字节 11

V4L2_PIX_FMT_Y41P

‘Y41P’

Cb0

Y’0

Cr0

Y’1

Cb4

Y’2

Cr4

Y’3

Y’4

Y’5

Y’6

Y’7

注意

不要将 V4L2_PIX_FMT_Y41PV4L2_PIX_FMT_YUV411P 混淆。 Y41P 派生自 “YUV 4:1:1 打包”,而 YUV411P 代表 “YUV 4:1:1 平面”。

颜色采样位置: 色度采样在水平方向上间隙定位