1. 程式人生 > >V4L2文件翻譯(十)

V4L2文件翻譯(十)

好久沒更新,有好幾篇翻譯都沉寂在Wiznote中了。趕緊發出來~

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 0 Byte 1 Byte 2 Byte 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