我在循环中获取帧并使用ffmpeg对其进行解码,以获得AVFrame。
所以我必须将帧的必要像素数据转换为char *并作为回调函数的参数给出。那我怎么能生成这样的char *数组呢?在互联网上,我看到了一些例子:
for(y=0; y<height; y++)
{
fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);
}
或类似的东西。这是真的吗?哪个尺寸将是我的char *?我看到我们写宽度* 3 *高度字节?
答案 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
个字节的数据。