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