我的问题有两个方面。我正在使用libav,ffmpeg,3.1。清理后av_frame_get_buffer
首先,如何恰当地处理缓冲区已分配av_frame_get_buffer
的帧?例如: -
AVFrame *frame = av_frame_alloc();
frame->width = ...;
frame->height = ...;
frame->format = ...;
av_frame_get_buffer(frame, ...);
是否有任何的缓冲区必须手动释放,超越呼叫av_frame_free(frame)
?documentation没有提到任何特殊的东西,但是根据我的经验,ffmpeg文档通常会留下重要的细节,或者至少将它们隐藏在远离明显位置的地方。我查看了av_frame_free
和av_frame_unref
的代码,但它分支很大,我无法确定它是否覆盖了所有内容。
其次,如果一些超出av_frame_free
需要做的事情,那么有没有包罗万象的方式来清理框,如果你不知道如何它的数据已被分配?例如,假设someBuffer
已经与适当大小分配:
AVFrame *frame2 = av_frame_alloc();
frame2->width = ...;
frame2->height = ...;
frame2->format = ...;
av_image_fill_arrays(frame2->data, frame2->linesize, someBuffer,
frame2->format, frame2->width, frame2->height, 1);
是否有自由使用完全相同的代码上面的例子中都frame
和frame2
方式?这是frame
和它的数据应该被释放,frame2
应该被释放,但不是someBuffer
,因为libav没有分配它。