26

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

据我了解linesize[0]是宽度,linesize[1]是高度。

  1. 如果我是对的,其他单元格是什么意思?
  2. 为什么avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet);只有 linesize[0] 具有值而其他单元格始终为 0?

更新

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

4

2 回答 2

36

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

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

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

于 2012-11-09T08:03:36.640 回答
12

查看视频帧格式的描述:

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

于 2012-11-09T09:22:00.807 回答