AVPicture中data与linesize关系
分类: FFMPEG2010-12-31 20:30 2481人阅读 评论(3) 收藏 举报
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
参考:http://bbs.chinavideo.org/viewthread.php?tid=119&extra=page%3D1%26filter%3Ddigest&page=1