您的位置:首页 > 其它

V4L2文档翻译(十)

2014-05-05 10:52 507 查看
好久没更新,有好几篇翻译都沉寂在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图像格式
[thead]
[/thead]

定义Byte 0Byte 1Byte 2Byte 3
V4L2_PIX_FMT_YUV444Y444Cb3 Cb2 Cb1 Cb0 Cr3 Cr2 Cr1 Cr0a3 a2 a1 a0 Y'3 Y'2 Y'1 Y'0--
V4L2_PIX_FMT_YUV555YUVOCb2 Cb1 Cb0 Cr4 Cr3 Cr2 Cr1 Cr0a Y'4 Y'3 Y'2 Y'1 Y'0 Cb4 Cb3--
V4L2_PIX_FMT_YUV565YUVPCb2 Cb1 Cb0 Cr4 Cr3 Cr2 Cr1 Cr0Y'4 Y'3 Y'2 Y'1 Y'0 Cb5 Cb4 Cb3--
V4L2_PIX_FMT_YUV32YUV4a7 a6 a5 a4 a3 a2 a1 a0Y'7 Y'6 Y'5 Y'4 Y'3 Y'2 Y'1 Y'0Cb7 Cb6 Cb5 Cb4 Cb3 Cb2 Cb1 Cb0Cr7 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: