YUV數據的幾種采樣格式以及保存方式
1.YUV數據的幾種采樣格式
4:4:4 這個不用解釋了,這是每個像素占三個字節的內存.
4:2:2 Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3對於這四個像素,采樣之后存放的碼流為:Y0U0 Y1V1 Y2U2 Y3V3,占用的內存大小為4+4/2 +4/2=8
4:2:0並不意味着只有Y和U而沒有V,他指的是對於每行掃描線來說,只有一種色度分量以2:1的抽樣率存儲,相鄰的掃描行存儲不同的色度分量,也就是說,如果一行是4:2:0的話,下一行就是4:0:2, 對於[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3] [Y4 U4 V4] [Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] 。采樣之后存放的碼流為Y0 U0 Y1 Y2 U2 Y3 Y4 V4 Y5 Y6 V6 Y7. 占用的內存是width*height*3/2.
2.YUV數據的幾種保存格式
通常有兩大類,打包格式和平面格式,打包格式是指將YUV保存在一個數組里面,然后YUV交叉存放,平面格式是指將YUV分量分別保存在三個不同的數組中.
YUV422
對於YUV422來說,有三種保存方式分別是平面,半平面和交叉方式.



注意422交叉存放時的順序是UYVY.
YUV420
420是應該是沒有交叉模式的,只有平面模式和半平面模式.




HISI獲取的YUV數據格式是YUV420的,保存格式一般是NV12或者NV21,就是UV交叉存放的那種。
對於YUV420SP的格式來說,從上圖可以看到,對於第i行j列的像素來說(i的范圍是0 ~ width-1,j的范圍是0 ~ height-1),
他的y數據指針就是 i*width + j ; i j 都是從0開始。
他的u數據指針是:width*height + (i/2) *width + (j/2)*2
他的V數據是:width*height + (i/2) *width + (j/2)*2 + 1
