我正在尝试使用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中管理自己的内存,并忽略了我在之前分配给pFrame
的dataBuff
。所以我陷入了困境——如何告诉
libav
将解码的帧数据写入我预先分配的内存中?我看到有人在线上和libav论坛上问类似的问题,但没有找到答案。非常感谢~