如何为libavcodec预分配内存以写入解码后的帧数据?

5

我正在尝试使用libav解码视频,按照演示代码(此处)进行操作。

我需要能够控制pFrame->data[0]中的帧数据存储位置。我已经尝试将pFrame->data设置为自己的缓冲区,如下所示:

// Determine required buffer size and allocate buffer 
int numBytes = av_image_get_buffer_size(pixFmt, width, height, 1); 
(uint8_t*) dataBuff = (uint8_t*) malloc (numBytes * sizeof(uint8_t)); 

// Assign buffer to image planes in pFrame
av_image_fill_arrays(frame->data, frame->linesize, dataBuff, pixFmt, width,
height, 1);

尽管这确实将pFrame->data设置为dataBuff(如果我打印它们的地址,它们是相同的),但是该调用ret = avcodec_receive_frame(pCodecContext, pFrame)以接收已解码数据时,总是将数据写入不同的地址。它似乎在底层API中管理自己的内存,并忽略了我在之前分配给pFramedataBuff
所以我陷入了困境——如何告诉libav将解码的帧数据写入我预先分配的内存中?我看到有人在线上和libav论坛上问类似的问题,但没有找到答案。
非常感谢~
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接