V4L2文档翻译(十)

好久没更新,有好几篇翻译都沉寂在Wiznote中了。赶紧发出来~


http://linuxtv.org/downloads/v4l-dvb-apis/yuv-formats.html

YUV格式

YUV是源自于TV广播的符合视频信号,它将亮度信息(Y)从颜色信息(U、V或Cb、Cr)。颜色信息涵盖了红色和蓝色的颜色差异信号,这样蓝色部分就可以通过减去亮度信息进行重建。见“颜色空间”节的转换示例。YUV之所以被选择是因为早期的电视只传输亮度数据。向已接收信号中添加兼容颜色的方法就是传输差异信号。其次,在YUV格式中U和V部分通常比Y部分的分辨率低,这一点是模拟信号压缩技术利用了人类视觉系统的属性,其对亮度信息更加敏感。

组合YUV格式
名字

组合YUV格式

描述

与组合RGB相似,而存储的是Y,Cb,Cr部分,每个像素占16或32位。

表2.7 组合YUV图像格式

定义Byte 0Byte 1Byte 2Byte 3
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 - -
V4L2_PIX_FMT_YUV32 YUV4 a7 a6 a5 a4 a3 a2 a1 a0 Y'7 Y'6 Y'5 Y'4 Y'3 Y'2 Y'1 Y'0 Cb7 Cb6 Cb5 Cb4 Cb3 Cb2 Cb1 Cb0 Cr7 Cr6 Cr5 Cr4 Cr3 Cr2 Cr1 Cr0

第7位是符号位,a(alpha)的值在读取驱动时并未定义,所以编写驱动时忽略它吧,除非是在Overlay或输出Overlay时候协商了透明度。

V4L2_PIX_FMT_GREY('GREY')
名字

V4L2_PIX_FMT_GREY 灰度图像

描述

这是一个灰度图像,是一个退化的Y'CbCr格式,并不包含Cb和Cr数据。

例2.10 V4L2_PIX_FMT_GREY 4 x 4像素图像**

start + 0:    Y'00    Y'01    Y'02    Y'03
start + 4:    Y'10    Y'11    Y'12    Y'13
start + 8:    Y'20    Y'21    Y'22    Y'23
start +12:    Y'30    Y'31    Y'32    Y'33
V4L2_PIX_FMT_Y10 ('Y10 ')
名字

V4L2_PIX_FMT_Y10 灰度图像

描述

这是每个像素占10位的灰度图像,像素被保存在16位字段中,高位自动填充0,低位存储在低内存中(低位机)。

例2.11 V4L2_PIX_FMT_Y10 4 x 4像素图像

start + 0:    Y'00low    Y'00high    Y'01low    Y'01high    Y'02low    Y'02high    Y'03low    Y'03high
start + 8:    Y'10low    Y'10high    Y'11low    Y'11high    Y'12low    Y'12high    Y'13low    Y'13high
start +16:    Y'20low    Y'20high    Y'21low    Y'21high    Y'22low    Y'22high    Y'23low    Y'23high
start +24:    Y'30low    Y'30high    Y'31low    Y'31high    Y'32low    Y'32high    Y'33low    Y'33high
V4L2_PIX_FMT_Y12 ('Y12 ')
名字

V4L2_PIX_FMT_Y12 灰度图

描述

每个像素占12位的灰度图,保存在16位字段中,高位填充0,低位存储在低内存中(低位机)。

例2.12 V4L2_PIX_FMT_Y12

start + 0:    Y'00low    Y'00high    Y'01low    Y'01high    Y'02low    Y'02high    Y'03low    Y'03high
start + 8:    Y'10low    Y'10high    Y'11low    Y'11high    Y'12low    Y'12high    Y'13low    Y'13high
start +16:    Y'20low    Y'20high    Y'21low    Y'21high    Y'22low    Y'22high    Y'23low    Y'23high
start +24:    Y'30low    Y'30high    Y'31low    Y'31high    Y'32low    Y'32high    Y'33low    Y'33high
V4L2_PIX_FMT_Y10BPACK ('Y10B')
名字

V4L2_PIX_FMT_Y10BPACK 位集合灰度图

描述

每像素10位的组合灰度图格式,像素存储在一个位组合中,每像素占10位,这其中并没有任何填充。

例2.13 V4L2_PIX_FMT_Y10BPACK 占用5字节的4像素数据流

Y'00[9:2]    Y'00[1:0]Y'01[9:4]    Y'01[3:0]Y'02[9:6]    Y'02[5:0]Y'03[9:8]    Y'03[7:0]
V4L2_PIX_FMT_Y16 ('Y16 ')
名字

V4L2_PIX_FMT_Y16 灰度图

描述

16位深度灰度图,低位存储在低内存中(低位机)。请注意,可能真实取样精度会比16位低,比如10位深度代表0~1023。

例2.14 V4L2_PIX_FMT_Y16 4 x 4像素图像

start + 0:    Y'00low    Y'00high    Y'01low    Y'01high    Y'02low    Y'02high    Y'03low    Y'03high
start + 8:    Y'10low    Y'10high    Y'11low    Y'11high    Y'12low    Y'12high    Y'13low    Y'13high
start +16:    Y'20low    Y'20high    Y'21low    Y'21high    Y'22low    Y'22high    Y'23low    Y'23high
start +24:    Y'30low    Y'30high    Y'31low    Y'31high    Y'32low    Y'32high    Y'33low    Y'33high
V4L2_PIX_FMT_UV8 ('UV8')
名字

V4L2_PIX_FMT_UV8 UV交叉平面

描述

此格式没有Y平面数据,只有UV平面。

例2.15 V4L2_PIX_FMT_UV8 像素图像

start + 0:    Cb00    Cr00    Cb01    Cr01
start + 4:    Cb10    Cr10    Cb11    Cr11
start + 8:    Cb20    Cr20    Cb21    Cr21
start + 12:    Cb30    Cr30    Cb31    Cr31
V4L2_PIX_FMT_YUYV ('YUYV')
名字

V4L2_PIX_FMT_YUYV 1/2饱和度分辨率组合格式,即YUV 4:2:2

描述

此格式中每四字节代表两个像素,其中有两个Y',一个Cb和Cr。两个Y是两个像素的,Cb和Cr同属于这两个像素。如你所见,Cr和Cb部分只有相对于Y部分的一般竖向饱和度分辨率,V4L2_PIX_FMT_YUYV相当于Windows环境下的YUY2。

例2.16 V4L2_PIX_FMT_YUYV 4 x 4像素图像

start + 0:    Y'00    Cb00    Y'01    Cr00    Y'02    Cb01    Y'03    Cr01
start + 8:    Y'10    Cb10    Y'11    Cr10    Y'12    Cb11    Y'13    Cr11
start +16:    Y'20    Cb20    Y'21    Cr20    Y'22    Cb21    Y'23    Cr21
start +24:    Y'30    Cb30    Y'31    Cr30    Y'32    Cb31    Y'33    Cr31

颜色取样位置

     0         1         2         3
0    Y    C    Y         Y    C    Y
1    Y    C    Y         Y    C    Y
2    Y    C    Y         Y    C    Y
3    Y    C    Y         Y    C    Y
V4L2_PIX_FMT_UYVY ('UYVY')
名字

V4L2_PIX_FMT_UYVY V4L2_PIX_FMT_YUYV变体,在内存中排列顺序不一样。

描述

每四字节代表两个像素,包含两个Y',一个Cb和Cr。两个Y是两个像素的数据,而Cb和Cr对于两个像素来说都是一样的。如你所见,Cr和Cb部分只有相对于Y部分的一半竖向分辨率。

例2.17 V4L2_PIX_FMT_UYVY 4 x 4像素图像

start + 0:    Cb00    Y'00    Cr00    Y'01    Cb01    Y'02    Cr01    Y'03
start + 8:    Cb10    Y'10    Cr10    Y'11    Cb11    Y'12    Cr11    Y'13
start +16:    Cb20    Y'20    Cr20    Y'21    Cb21    Y'22    Cr21    Y'23
start +24:    Cb30    Y'30    Cr30    Y'31    Cb31    Y'32    Cr31    Y'33
V4L2_PIX_FMT_VYUY ('VYUY')
名字

V4L2_PIX_FMT_UYVY V4L2_PIX_FMT_YUYV变体,在内存中排列顺序不一样。

描述

每四字节代表两个像素,包含两个Y',一个Cb和Cr。两个Y是两个像素的数据,而Cb和Cr对于两个像素来说都是一样的。如你所见,Cr和Cb部分只有相对于Y部分的一半竖向分辨率。

例2.19 V4L2_PIX_FMT_VYUY 4 x 4像素图像

start + 0:    Cr00    Y'00    Cb00    Y'01    Cr01    Y'02    Cb01    Y'03
start + 8:    Cr10    Y'10    Cb10    Y'11    Cr11    Y'12    Cb11    Y'13
start +16:    Cr20    Y'20    Cb20    Y'21    Cr21    Y'22    Cb21    Y'23
start +24:    Cr30    Y'30    Cb30    Y'31    Cr31    Y'32    Cb31    Y'33
V4L2_PIX_FMT_Y41P ('Y41P')
名字

V4L2_PIX_FMT_Y41P 此格式有1/4横向饱和度分辨率,即YUV4:1:1

描述

8个像素占用12字节。在此12个字节中有两队CbCr和8个Y'。第一对CbCr与前4个Y'匹配,第二对CbCr与另4个Y'匹配。Cb、Cr部分只有相对于Y部分的1/4竖向分辨率。

不要与V4L2_PIX_FMT_YUV411P混淆,Y41P是由YUV4:1:1组合衍生出来的,而YUV411P代表的是YUV4:1:1平面。

例2.20 V4L2_PIX_FMT_Y41P 8 x 4像素图像

start + 0:    Cb00    Y'00    Cr00    Y'01    Cb01    Y'02    Cr01    Y'03    Y'04    Y'05    Y'06    Y'07
start +12:    Cb10    Y'10    Cr10    Y'11    Cb11    Y'12    Cr11    Y'13    Y'14    Y'15    Y'16    Y'17
start +24:    Cb20    Y'20    Cr20    Y'21    Cb21    Y'22    Cr21    Y'23    Y'24    Y'25    Y'26    Y'27
start +36:    Cb30    Y'30    Cr30    Y'31    Cb31    Y'32    Cr31    Y'33    Y'34    Y'35    Y'36    Y'37

颜色取样位置

     0         1         2         3         4         5         6         7
0    Y         Y    C    Y         Y         Y         Y    C    Y         Y
1    Y         Y    C    Y         Y         Y         Y    C    Y         Y
2    Y         Y    C    Y         Y         Y         Y    C    Y         Y
3    Y         Y    C    Y         Y         Y         Y    C    Y         Y
V4L2_PIX_FMT_YVU420 ('YV12'), V4L2_PIX_FMT_YUV420 ('YU12')
名字

V4L2_PIX_FMT_YVU420, V4L2_PIX_FMT_YUV420 平面格式,有1/2的横向和竖向饱和度分辨率,即YUV4:2:0

描述

平面格式,与组合格式恰恰相反。三个部分分别放在三个子图像或平面中,首先是Y平面,Y平面是每像素一个字节,对于V4L2_PIX_FMT_YVU420来说,在内存中Cr平面直接跟随Y平面,Cr平面有Y平面一般的宽度和高度,在2 x 2图像中每个Cr属于4个像素,Cr0属于Y'00,Y'01,Y'10和Y'11。在Cr平面后是Cb平面,像Cr平面一样。V4L2_PIX_FMT_YUV420基本一样,唯一区别是先Cb平面,后Cr平面。

如果Y平面在每行后有填充字节,那么Cr和Cb平面在他们的行后也拥有一半的填充字节。换句话说,两行Cx(包含填充)与一行Y(包含填充)一样长。

例2.21 V4L2_PIX_FMT_YVU420 4 x 4像素图像

start + 0:    Y'00    Y'01    Y'02    Y'03
start + 4:    Y'10    Y'11    Y'12    Y'13
start + 8:    Y'20    Y'21    Y'22    Y'23
start +12:    Y'30    Y'31    Y'32    Y'33
start +16:    Cr00    Cr01          
start +18:    Cr10    Cr11          
start +20:    Cb00    Cb01          
start +22:    Cb10    Cb11

颜色取样位置

     0         1         2         3
0    Y         Y         Y         Y
          C                   C     
1    Y         Y         Y         Y

2    Y         Y         Y         Y
          C                   C     
3    Y         Y         Y         Y
V4L2_PIX_FMT_YUV420M ('YM12')
名字

V4L2_PIX_FMT_YUV420M V4L2_PIX_FMT_YUV420的变体,平面存储在非连续内存中。

描述

这是一个多平面格式,与组合格式相反。三个部分分别存入子图像或子平面中,首先是Y平面,每个像素占用一个字节。Cb数据有一半Y平面的宽高,组成了第二个平面。在2 x 2像素图像中每个Cb属于4个像素。比如,Cb0属于Y'00,Y'01,Y'10,Y'11。Cr数据和Cb平面一样,在第三个平面中。

如果Y平面每行都有填充数据,那么Cb和Cr平面在他们的行后会拥有一般的填充数据,两个Cx行和Y行一样长(包含填充数据)。

支持多平面API的驱动和应用程序可以使用V4L2_PIX_FMT_YUV420M,见“单/多平面API”。

例2.22 V4L2_PIX_FMT_YUV420M 4 x 4像素图像

start0 + 0:    Y'00    Y'01    Y'02    Y'03
start0 + 4:    Y'10    Y'11    Y'12    Y'13
start0 + 8:    Y'20    Y'21    Y'22    Y'23
start0 +12:    Y'30    Y'31    Y'32    Y'33

start1 + 0:    Cb00    Cb01          
start1 + 2:    Cb10    Cb11          

start2 + 0:    Cr00    Cr01          
start2 + 2:    Cr10    Cr11
V4L2_PIX_FMT_YVU420M ('YM21')
名字

V4L2_PIX_FMT_YVU420M V4L2_PIX_FMT_YVU420的变体,区别是平面存储在非连续内存中。

描述

此为多平面格式,与组合格式相反。三个部分分别存储在三个子图像或子平面中,首先是Y平面,每个像素占用一个字节。Cr数据组成了第二个平面,拥有Y平面一般的宽和高。2 x 2图片中每个Cr属于4个像素。比如,Cr0属于Y'00,Y'01,Y'10,Y'11。Cb数据和Cr一样,组成了第三个平面。

若Y平面每行后都带有填充数据,那么Cr和Cb平面在他们的每行后要有一般的填充数据,换句话说,两行Cx数据与Y行一样长(包含填充数据)。

当驱动和应用程序支持多平面API才可以使用V4L2_PIX_FMT_YVU420M格式,见“单/多平面API”。

例2.23 V4L2_PIX_FMT_YVU420M 4 x 4像素图像

start0 + 0:    Y'00    Y'01    Y'02    Y'03
start0 + 4:    Y'10    Y'11    Y'12    Y'13
start0 + 8:    Y'20    Y'21    Y'22    Y'23
start0 +12:    Y'30    Y'31    Y'32    Y'33

start1 + 0:    Cr00    Cr01          
start1 + 2:    Cr10    Cr11          

start2 + 0:    Cb00    Cb01          
start2 + 2:    Cb10    Cb11
V4L2_PIX_FMT_YVU410 ('YVU9'), V4L2_PIX_FMT_YUV410 ('YUV9')
名字

V4L2_PIX_FMT_YVU410,V4L2_PIX_FMT_YUV410 拥有1/4横向竖向饱和度分辨率的平面格式,即YUV4:1:0

描述

这些是平面格式,与组合格式相反。三个部分存储在3个子图像或平面内。首先是Y平面,每个像素占用一个字节,对于V4L2_PIX_FMT_YVU410来说,Cr平面在内存中紧跟在Y平面后,Cr平面有Y平面1/4的宽度和高度。在一个4 x 4图片中每个Cr属于16个像素。在Cr平面后是Cb平面,像Cr平面一样。V4L2_PIX_FMT_YUV410除了是Cb跟在Y后,然后是Cr外与其一样。

若Y平面每行后多有填充数据,那么Cr和Cb平面在他们的行后也要后1/4的填充,换句话说,四行Cx数据与一行Y数据一样长(包含填充数据)。

例2.24 V4L2_PIX_FMT_YVU410 4 x 4像素图像

start + 0:    Y'00    Y'01    Y'02    Y'03
start + 4:    Y'10    Y'11    Y'12    Y'13
start + 8:    Y'20    Y'21    Y'22    Y'23
start +12:    Y'30    Y'31    Y'32    Y'33
start +16:    Cr00               
start +17:    Cb00

颜色采样位置

     0         1         2         3
0    Y         Y         Y         Y

1    Y         Y         Y         Y
                    C               
2    Y         Y         Y         Y

3    Y         Y         Y         Y
V4L2_PIX_FMT_YUV422P ('422P')
名字

V4L2_PIX_FMT_YUV422P 有一半横向饱和度分辨率的格式,即YUV4:2:2,平面布局与V4L2_PIX_FMT_YUYV相反。

描述

这个格式通常不会使用,这YUYV格式的一个平面版本。三个部分分别存入三个子平面或子图像中。首先是Y平面,每个像素占用一个字节。Cb平面在内存中紧跟着Y平面,拥有Y平面一般的宽度,每个Cb属于两个像素。例如,Cb0属于Y'00,Y'01。在Cb平面后是Cr平面,其与Cb平面一样。

若Y平面每行后存在填充数据,那么Cr和Cb平面要在他们的行后包含一半的填充数据,即两行Cx数据与一行Y数据一样长(包含填充数据)。

例2.25 V4L2_PIX_FMT_YUV422P 4 x 4像素图像

start + 0:    Y'00    Y'01    Y'02    Y'03
start + 4:    Y'10    Y'11    Y'12    Y'13
start + 8:    Y'20    Y'21    Y'22    Y'23
start +12:    Y'30    Y'31    Y'32    Y'33
start +16:    Cb00    Cb01          
start +18:    Cb10    Cb11          
start +20:    Cb20    Cb21          
start +22:    Cb30    Cb31          
start +24:    Cr00    Cr01          
start +26:    Cr10    Cr11          
start +28:    Cr20    Cr21          
start +30:    Cr30    Cr31

颜色取样位置

     0         1         2         3
0    Y    C    Y         Y    C    Y
1    Y    C    Y         Y    C    Y
2    Y    C    Y         Y    C    Y
3    Y    C    Y         Y    C    Y
V4L2_PIX_FMT_YUV411P ('411P')
名字

V4L2_PIX_FMT_YUV411P 拥有1/4横向饱和度分辨率的格式,即YUV4:1:1,平面布局与V4L2_PIX_FMT_Y41P相反。

描述

此格式不常用,除了只有一般饱和度外其与4:2:2平面格式类似。三个部分分别放在子图像或子平面内。首先是Y平面,每个像素占用一个字节,然后在内存中跟随Y平面的是Cb平面,拥有Y平面1/4的宽度。每个Cb属于同一行的4个像素。例如,Cb0属于Y'00,Y'01,Y'02和Y'03。在Cb平面后是Cr平面,与Cb平面一样。

若Y平面每行后有填充数据,则Cr和Cb平面在他们的行后要有1/4的填充数据,即四行Cx数据与一行Y数据长度相同(包含填充)。

例2.26 V4L2_PIX_FMT_YUV411P 4 x 4像素图像

start + 0:    Y'00    Y'01    Y'02    Y'03
start + 4:    Y'10    Y'11    Y'12    Y'13
start + 8:    Y'20    Y'21    Y'22    Y'23
start +12:    Y'30    Y'31    Y'32    Y'33
start +16:    Cb00               
start +17:    Cb10               
start +18:    Cb20               
start +19:    Cb30               
start +20:    Cr00               
start +21:    Cr10               
start +22:    Cr20               
start +23:    Cr30

颜色取样位置

     0         1         2         3
0    Y         Y    C    Y         Y
1    Y         Y    C    Y         Y
2    Y         Y    C    Y         Y
3    Y         Y    C    Y         Y
V4L2_PIX_FMT_NV12 ('NV12'), V4L2_PIX_FMT_NV21 ('NV21')
名字

V4L2_PIX_FMT_NV12, V4L2_PIX_FMT_NV21 拥有1/2横向、竖向饱和度分辨率的格式,即YUV4:2:0。与V4L2_PIX_FMT_YVU420不同的是,其有一个亮度、一个饱和度(交叉饱和取样)平面。

描述

此为YUV4:2:0格式的两平面版本,三个部分分别放入两个子图像或子平面中。首先是Y平面,一个像素占用一个字节,对于V4L2_PIX_FMT_NV12来说,内存中跟随在Y平面后的是CbCr组合平面。CbCr平面有与Y平面相同的宽度(字节),但是高度是一半。每个CbCr对属于四个像素。比如,Cb0/Cr0属于Y'00,Y'01,Y'10,Y'11。V4L2_PIX_FMT_NV21除了Cb和Cr字节交换外(CrCb平面,以Cr开始)其他一样。

若Y平面每行后有填充数据,那么CbCr平面在他们的行后也要有同样数量的填充。

例2.27 V4L2_PIX_FMT_NV12 4 x 4像素图像

start + 0:    Y'00    Y'01    Y'02    Y'03
start + 4:    Y'10    Y'11    Y'12    Y'13
start + 8:    Y'20    Y'21    Y'22    Y'23
start +12:    Y'30    Y'31    Y'32    Y'33
start +16:    Cb00    Cr00    Cb01    Cr01
start +20:    Cb10    Cr10    Cb11    Cr11

颜色取样位置

     0         1         2         3
0    Y         Y         Y         Y
          C                   C     
1    Y         Y         Y         Y

2    Y         Y         Y         Y
          C                   C     
3    Y         Y         Y         Y
V4L2_PIX_FMT_NV12M ('NM12'), V4L2_PIX_FMT_NV21M ('NM21'), V4L2_PIX_FMT_NV12MT_16X16
名字

V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_NV21M, V4L2_PIX_FMT_NV12MT_16X16 V4L2_PIX_FMT_NV12和V4L2_PIX_FMT_NV21的变种,平面存放在非连续内存中。

描述

这是YUV4:2:0格式的双平面版本。三个部分分别放在两个子图像或子平面中。V4L2_PIX_FMT_NV12M与V4L2_PIX_FMT_NV12不同的是两个平面存放在不连续的内存中,如饱和度平面没有直接跟随在亮度平面后。亮度数据占据了第一个平面,Y平面每个像素占用一个字节。在第二个平面中是交叉饱和取样的饱和度数据。CbCr平面与Y平面有一样的宽度(字节),但是高度是一半(像素)。每个CbCr对属于4个像素。比如,Cb0/Cr0属于Y'00,Y'01,Y'10,Y'11。V4L2_PIX_FMT_NV12MT_16X16是V4L2_PIX_FMT_NV12M的16 x 16模块整合,这里的像素组合在16 x 16的2D平铺空间中,在内存中线性排列。V4L2_PIX_FMT_NV21M与V4L2_PIX_FMT_NV12M一样,除了Cb Cr字节交换了,在CrCb面是以Cr字节起始的。

驱动和应用程序要支持多平面API才可使用V4L2_PIX_FMT_NV12M,见“单/多平面API”。

若Y平面每行后有填充数据,那么CbCr平面在每行后也要有一样的填充。

例2.28 V4L2_PIX_FMT_NV12M 4 x 4像素图像

start0 + 0:    Y'00    Y'01    Y'02    Y'03
start0 + 4:    Y'10    Y'11    Y'12    Y'13
start0 + 8:    Y'20    Y'21    Y'22    Y'23
start0 +12:    Y'30    Y'31    Y'32    Y'33

start1 + 0:    Cb00    Cr00    Cb01    Cr01
start1 + 4:    Cb10    Cr10    Cb11    Cr11
V4L2_PIX_FMT_NV12MT ('TM12')
名字

V4L2_PIX_FMT_NV12MT 拥有1/2横向、竖向饱和度分辨率的格式。此格式有两个平面——一个亮度和一个饱和度,饱和度的取样的交叉的。与V4L2_PIX_FMT_NV12的区别是内存布局。像素组成64 x 32尺寸的模块,在内存中的顺序不标准。

描述

此模式为YUV4:2:0格式的双平面版本,数据组成64 x 32大小的模块。三个部分分别放入两个子图像或子平面。Y平面每个像素占用一个字节,组成64 x 32尺寸模块。CbCr平面有与Y平面一样的宽度(字节),但是高度是其一般(像素)。饱和度平面同样组合成64 x 32尺寸模块。

缓存的宽度需要与128的倍数对齐,而高度的对齐是32。每4个相邻的缓存——2个书香和两个横向组合到一起,在内存中以Z形或反转的Z顺序排列。

子模块的内存布局如下所示:


宽度需要与128倍数对齐是因为,横向的一半不能切出Z字形。若模块竖向分辨率是奇数,那么最后一行以线性顺序排列。若饱和度则布局相同。Cb和Cr取样是交叉的,缓存高度对齐到32。

例2.28 V4L2_PIX_FMT_NV12格式像素图片在内存中的模块布局——极限情况


V4L2_PIX_FMT_NV16 ('NV16'), V4L2_PIX_FMT_NV61 ('NV61')
名字

V4L2_PIX_FMT_NV16, V4L2_PIX_FMT_NV61 有一半横向饱和度分辨率,即YUV4:2:2。一个亮度、一个饱和度平面(交叉取样),与V4L2_PIX_FMT_YVU420相反。

描述

是YUV4:2:2格式的双平面版本,三个部分分别放入两个子图像或子平面中,首先是Y平面,每个像素占用一个字节。对于V4L2_PIX_FMT_NV16来说,CbCr平面直接在内存中跟随在Y平面后,CbCr平面拥有与Y平面一样的宽和高(字节)。每个CbCr对属于两个像素,如Cb0/Cr0属于Y'00和Y'01。V4L2_PIX_FMT_NV61与其一样,区别是Cb与Cr字节交换,以Cr字节起始。

若Y平面有填充,则CbCr平面也要有同样的填充。

例2.30 V4L2_PIX_FMT_NV16 4 x 4像素图像

start + 0:    Y'00    Y'01    Y'02    Y'03
start + 4:    Y'10    Y'11    Y'12    Y'13
start + 8:    Y'20    Y'21    Y'22    Y'23
start +12:    Y'30    Y'31    Y'32    Y'33
start +16:    Cb00    Cr00    Cb01    Cr01
start +20:    Cb10    Cr10    Cb11    Cr11
start +24:    Cb20    Cr20    Cb21    Cr21
start +28:    Cb30    Cr30    Cb31    Cr31

颜色采样位置

     0         1         2         3
0    Y         Y         Y         Y
          C                   C     
1    Y         Y         Y         Y
          C                   C     

2    Y         Y         Y         Y
          C                   C     
3    Y         Y         Y         Y
          C                   C
V4L2_PIX_FMT_NV16M ('NM16'), V4L2_PIX_FMT_NV61M ('NM61')
名字

V4L2_PIX_FMT_NV16M, V4L2_PIX_FMT_NV61M V4L2_PIX_FMT_NV16和V4L2_PIX_FMT_NV61的变体,存储在非连续的内存中。

描述

是YUV4:2:2格式的双平面版本,三个部分分别放入两个子图像或子平面中。V4L2_PIX_FMT_NV16M区别与V4L2_PIX_FMT_NV16的是两个平面在内存中是不连续排列的,就是说饱和度平面不跟随着亮度平面。亮度数据组成了第一个平面,Y平面中每个像素占用一个字节。第二个平面是饱和度数据(交叉采样)。CbCr平面有着与Y平面一样的宽高(字节),每个CbCr对属于两个像素。例如,Cb0/Cr0属于Y'00,Y'01。V4L2_PIX_FMT_NV61M除了Cb和Cr字节数据交换外,其他与V4L2_PIX_FMT_NV16M一样。

驱动和应用程序支持多平面API才可以使用V4L2_PIX_FMT_NV16M和V4L2_PIX_FMT_NV61M。见“单/多平面API”。

例2.31 V4L2_PIX_FMT_NV16M 4 x 4像素图像

start0 + 0:    Y'00    Y'01    Y'02    Y'03
start0 + 4:    Y'10    Y'11    Y'12    Y'13
start0 + 8:    Y'20    Y'21    Y'22    Y'23
start0 +12:    Y'30    Y'31    Y'32    Y'33

start1 + 0:    Cb00    Cr00    Cb02    Cr02
start1 + 4:    Cb10    Cr10    Cb12    Cr12
start1 + 8:    Cb20    Cr20    Cb22    Cr22
start1 +12:    Cb30    Cr30    Cb32    Cr32
V4L2_PIX_FMT_NV24 ('NV24'), V4L2_PIX_FMT_NV42 ('NV42')
名字

V4L2_PIX_FMT_NV24, V4L2_PIX_FMT_NV42 完整竖向横向饱和度分辨率格式,即YUV4:4:4。一个亮度和一个饱和度平面(交叉取样),这点与V4L2_PIX_FMT_YVU420相反。

描述

是YUV4:4:4格式的双平面版本,三个部分分别放入两个子图像或子平面中。首先是Y平面,每个像素占用一个字节。对V4L2_PIX_FMT_NV24来说,CbCr平面在内存中跟随在Y平面后,CbCr平面与Y平面拥有一样的宽高(像素)。每个像素包含一对CbCr,每个Cb、Cr存储在一个字节内。V4L2_PIX_FMT_NV42只是Cb和Cr取样数据互换位置,其他一样。

若Y平面每行后有填充,则CbCr平面需要有双倍的填充数据。

例2.32 V4L2_PIX_FMT_NV24 4 x 4像素图像

start + 0:    Y'00    Y'01    Y'02    Y'03                    
start + 4:    Y'10    Y'11    Y'12    Y'13                    
start + 8:    Y'20    Y'21    Y'22    Y'23                    
start +12:    Y'30    Y'31    Y'32    Y'33                    
start +16:    Cb00    Cr00    Cb01    Cr01    Cb02    Cr02    Cb03    Cr03
start +24:    Cb10    Cr10    Cb11    Cr11    Cb12    Cr12    Cb13    Cr13
start +32:    Cb20    Cr20    Cb21    Cr21    Cb22    Cr22    Cb23    Cr23
start +40:    Cb30    Cr30    Cb31    Cr31    Cb32    Cr32    Cb33    Cr33
V4L2_PIX_FMT_M420 ('M420')
名字

V4L2_PIX_FMT_M420 有1/2横向和竖向饱和度分辨率,即YUV4:2:0。交错线布局混合平面。

描述

M420是拥有1/2横向和竖向分段取样饱和度的YUV格式。像素组合形式是交错的亮度和饱和度平面。一条饱和度数据后是两条亮度数据。

亮度平面每像素占一字节。饱和度平面包含交错的CbCr像素,他们由1/2横向竖向采样获得。每个CbCr对属于4个像素,比如,Cb0/Cr0属于Y'00,Y'01,Y'10,Y'11。

所有行长度完全一样:Y行拥有的填充字节CbCr行也要有。

例2.33 V4L2_PIX_FMT_M420 4 x 4像素图像

start + 0:    Y'00    Y'01    Y'02    Y'03
start + 4:    Y'10    Y'11    Y'12    Y'13
start + 8:    Cb00    Cr00    Cb01    Cr01
start +16:    Y'20    Y'21    Y'22    Y'23
start +20:    Y'30    Y'31    Y'32    Y'33
start +24:    Cb10    Cr10    Cb11    Cr11

色彩取样位置

     0         1         2         3
0    Y         Y         Y         Y
          C                   C     
1    Y         Y         Y         Y

2    Y         Y         Y         Y
          C                   C     
3    Y         Y         Y         Y

V4L2_PIX_FMT_NV12MT
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值