ffmpeg AVFrame将完整解码数据获取到char *

时间:2012-03-28 17:41:58

标签: c++ ffmpeg

我在循环中获取帧并使用ffmpeg对其进行解码,以获得AVFrame。

所以我必须将帧的必要像素数据转换为char *并作为回调函数的参数给出。那我怎么能生成这样的char *数组呢?在互联网上,我看到了一些例子:

for(y=0; y<height; y++)
{
 fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);
}

或类似的东西。这是真的吗?哪个尺寸将是我的char *?我看到我们写宽度* 3 *高度字节?

1 个答案:

答案 0 :(得分:2)

for(y=0; y<height; y++) { 
    fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);
}

是的,这是正确的 这是从AVFrame-&gt;数据指针写入3byte / pixel(可能是RGB)的行。

PS。这样做的原因是每行数据的开始都是从一个新的4字节内存边界开始 - 计算机在以32位(4字节)的倍数访问内存时效率更高。 因此,如果您的像素大小(3字节)和宽度不是4的倍数,那么您需要执行此操作而不是简单地复制width*height*3个字节的数据。