任何人都可以帮助理解AVFrame.linesize []?

时间:2012-11-08 09:21:20

标签: video ffmpeg libavcodec stride

我试图找出AVFrame.linesize[]的每个单元格的含义,但我没有找到。

据我所知,linesize[0]是宽度,linesize[1]是高度。

  1. 如果我说对了,其他细胞是什么意思?
  2. 为什么在avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet);后只有lineize [0]有值而其他单元格总是0?
  3. 已更新

    我认为AVFrame.data [i]和AVFrame.linesize [i]是行中特定颜色的数据和行的长度,我是否正确?

2 个答案:

答案 0 :(得分:26)

对于平面数据,例如YUV420linesize[i]包含i - 平面的步幅。

例如,对于框架640x480 data[0]包含指向Y组件的指针,data[1]data[2]包含指向U和{{的指针1}}飞机。在这种情况下,Vlinesize[0] == 640(因为linesize[1] == linesize[2] == 320U平面小于V平面的一半)

对于像素数据(Y),只有一个平面(RGB24)和data[0]linesize[0] == width * channels 640 * 3

答案 1 :(得分:11)

查看视频帧格式的描述:

您将看到格式分为两大类:打包和平面,具体取决于组件是单独保存还是交错保存。 Strides的含义略有不同,基本上它们是你需要跳过一行的字节数。