原文鏈接:
http://blog.csdn.net/liaozc/article/details/6110474
AVPicture結構中data和linesize關係
AVPicture裏面有data[4]和linesize[4]其中data是一個指向指針的指針(二級、二維指針),也就是指向視頻數據緩衝區的首地址,而data[0]~data[3]是一級指針,可以用如下的圖來表示:
data -->xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
^ ^ ^
| | |
data[0] data[1] data[2]
比如說,當pix_fmt=PIX_FMT_YUV420P時,data中的數據是按照YUV的格式存儲的,也就是:
data -->YYYYYYYYYYYYYYYYYYYYYYYYUUUUUUUUUUUVVVVVVVVVVVV
^ ^ ^
| | |
data[0] data[1] data[2]
linesize是指對應於每一行的大小,爲什麼需要這個變量,是因爲在YUV格式和RGB格式時,每行的大小不一定等於圖像的寬度。
linesize = width + padding size(16+16) for YUV
linesize = width*pixel_size for RGB
padding is needed during Motion Estimation and Motion Compensation for Optimizing MV serach and P/B frame reconstruction
for RGB only one channel is available
so RGB24 : data[0] = packet rgbrgbrgbrgb......
linesize[0] = width*3
data[1],data[2],data[3],linesize[1],linesize[2],linesize[2] have no any means for RGB
測試如下:(原始的320×182視頻)
如果pix_fmt=PIX_FMT_RGBA32
linesize 的只分別爲:1280 0 0 0
如果pix_fmt=PIX_FMT_RGB24
linesize 的只分別爲:960 0 0 0
如果pix_fmt=PIX_FMT_YUV420P
linesize 的只分別爲:352 176 176 0