gur*_*ulu 5 c++ ffmpeg libavcodec libav
我正在尝试按照演示代码使用 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);
Run Code Online (Sandbox Code Playgroud)
虽然这确实设置pFrame->data为dataBuff(如果我打印它们的地址,它们是相同的),但ret = avcodec_receive_frame(pCodecContext, pFrame)接收解码数据的调用总是将数据写入不同的地址。它似乎在底层 API 的某个地方管理自己的内存,并忽略我之前dataBuff分配的内存。pFrame
所以我陷入了困境 - 我如何才能知道libav将解码的帧数据写入我预先分配的内存?我看到人们在网上和 libav 论坛中提出类似的问题,但未能找到答案。
非常感谢~
| 归档时间: |
|
| 查看次数: |
1466 次 |
| 最近记录: |