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]。
标识符 |
代码 |
内存中的字节 0 |
字节 1 |
||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
|
‘Y444’ |
Cb3 |
Cb2 |
Cb1 |
Cb0 |
Cr3 |
Cr2 |
Cr1 |
Cr0 |
a3 |
a2 |
a1 |
a0 |
Y’3 |
Y’2 |
Y’1 |
Y’0 |
|
‘YUVO’ |
Cb2 |
Cb1 |
Cb0 |
Cr4 |
Cr3 |
Cr2 |
Cr1 |
Cr0 |
a |
Y’4 |
Y’3 |
Y’2 |
Y’1 |
Y’0 |
Cb4 |
Cb3 |
|
‘YUVP’ |
Cb2 |
Cb1 |
Cb0 |
Cr4 |
Cr3 |
Cr2 |
Cr1 |
Cr0 |
Y’4 |
Y’3 |
Y’2 |
Y’1 |
Y’0 |
Cb5 |
Cb4 |
Cb3 |
下表列出了每个分量 8 位的打包 YUV 4:4:4 格式。它们的命名基于 Y、Cb 和 Cr 分量在内存中存储的顺序,以及每个像素的总位数。 例如,VUYX32 格式将像素存储为第一个字节中的 Cr7-0、第二个字节中的 Cb7-0 和第三个字节中的 Y’7-0。
标识符 |
代码 |
字节 0 |
字节 1 |
字节 2 |
字节 3 |
---|---|---|---|---|---|
|
‘YUV4’ |
A7-0 |
Y’7-0 |
Cb7-0 |
Cr7-0 |
|
‘AYUV’ |
A7-0 |
Y’7-0 |
Cb7-0 |
Cr7-0 |
|
‘XYUV’ |
X7-0 |
Y’7-0 |
Cb7-0 |
Cr7-0 |
|
‘VUYA’ |
Cr7-0 |
Cb7-0 |
Y’7-0 |
A7-0 |
|
‘VUYX’ |
Cr7-0 |
Cb7-0 |
Y’7-0 |
X7-0 |
|
‘YUVA’ |
Y’7-0 |
Cb7-0 |
Cr7-0 |
A7-0 |
|
‘YUVX’ |
Y’7-0 |
Cb7-0 |
Cr7-0 |
X7-0 |
|
‘YUV3’ |
Y’7-0 |
Cb7-0 |
Cr7-0 |
- |
注意
alpha 分量应包含驱动程序和应用程序可以使用的有意义的值。
填充位包含未定义的值,所有应用程序和驱动程序都必须忽略这些值。
下表列出了每个分量 12 位的打包 YUV 4:4:4 格式。将每个分量的位数扩展到 16 位,高位为数据,低位为零,以小端顺序排列,在 6 个字节中存储 1 个像素。
标识符 |
代码 |
字节 1-0 |
字节 3-2 |
字节 5-4 |
字节 7-6 |
字节 9-8 |
字节 11-10 |
---|---|---|---|---|---|---|---|
|
‘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 位小端字。每个字的最高有效位包含一个分量,最低有效位是零填充。
标识符 |
代码 |
字节 0 |
字节 1 |
字节 2 |
字节 3 |
字节 4 |
字节 5 |
字节 6 |
字节 7 |
---|---|---|---|---|---|---|---|---|---|
|
‘UYVY’ |
Cb0 |
Y’0 |
Cr0 |
Y’1 |
Cb2 |
Y’2 |
Cr2 |
Y’3 |
|
‘VYUY’ |
Cr0 |
Y’0 |
Cb0 |
Y’1 |
Cr2 |
Y’2 |
Cb2 |
Y’3 |
|
‘YUYV’ |
Y’0 |
Cb0 |
Y’1 |
Cr0 |
Y’2 |
Cb2 |
Y’3 |
Cr2 |
|
‘YVYU’ |
Y’0 |
Cr0 |
Y’1 |
Cb0 |
Y’2 |
Cr2 |
Y’3 |
Cb2 |
标识符 |
代码 |
字 0 |
字 1 |
字 2 |
字 3 |
---|---|---|---|---|---|
|
‘Y210’ |
Y’0(位 15-6) |
Cb0(位 15-6) |
Y’1(位 15-6) |
Cr0(位 15-6) |
|
‘Y212’ |
Y’0(位 15-4) |
Cb0(位 15-4) |
Y’1(位 15-4) |
Cr0(位 15-4) |
|
‘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 个像素。
标识符 |
代码 |
字节 0 |
字节 1 |
字节 2 |
字节 3 |
字节 4 |
字节 5 |
字节 6 |
字节 7 |
字节 8 |
字节 9 |
字节 10 |
字节 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
‘Y41P’ |
Cb0 |
Y’0 |
Cr0 |
Y’1 |
Cb4 |
Y’2 |
Cr4 |
Y’3 |
Y’4 |
Y’5 |
Y’6 |
Y’7 |
注意
不要将 V4L2_PIX_FMT_Y41P
与 V4L2_PIX_FMT_YUV411P 混淆。 Y41P 派生自 “YUV 4:1:1 打包”,而 YUV411P 代表 “YUV 4:1:1 平面”。
颜色采样位置: 色度采样在水平方向上间隙定位。