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

the*_*ist 21 video ffmpeg stride libavcodec

我试图找到每个细胞的AVFrame.linesize[]意思,但我没有找到.

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

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

更新

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

pog*_*kiy 27

在平面数据的情况下,例如YUV420,linesize[i]包含i第-th平面的步幅.

例如,for frame 640x480 data[0]包含指向Y组件的指针,data[1]data[2]包含指向UVplane的指针.在这种情况下,linesize[0] == 640,linesize[1] == linesize[2] == 320(因为UV面小于Y平面一半)

在像素数据(RGB24)的情况下,只有一个平面(data[0])和linesize[0] == width * channels(640 * 3for RGB24)

  • 这是超旧的,但它是一个巨大的 8 位数字的原因是因为它是一个指向数组的指针,而不是一个整数。 (2认同)
  • 那么,如果我有一个分辨率为 500x500 的 YUV420p 帧,为什么会出现“linesize[0] == 512”? (2认同)

Rom*_* R. 11

看看视频帧格式的描述:

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