正确清洁AVFrame

时间:2019-04-01 08:51:21

标签: ffmpeg libav

我正在使用av_frame_alloc()函数创建AVFrame对象,并使用内部调用av_frame_unref()的av_frame_free(&frame)清除该对象,但无法正确清理内存。我的应用程序的堆大小在运行时呈指数增长。

不起作用:

AVFrame* frame = av_frame_alloc();
av_frame_free(&frame);

工作:

AVFrame* frame = av_frame_alloc();
av_free(frame->data[0]);

据我所知,av_frame_free()调用av_freep(),后者调用av_free()释放动态内存。清除内存,如果我直接使用av_free(frame-> data [0])而不是av_frame_free(&frame)

1 个答案:

答案 0 :(得分:0)

我使用libav和H.264开发了一个有关视频屏幕共享应用程序的个人项目,以便进行60 FPS视频编码。

要解决我的内存泄漏问题,我使用frame分配了av_frame_alloc,并使其在每个周期都可以使用av_frame_make_writable进行写操作,并使用av_free或{{ 1}}。

因此,请使用以下之一:

av_freep