我正在使用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)
我使用带有H.264的libav开发了一个有关视频屏幕共享应用程序的个人项目,以便进行60 FPS视频编码。
[为了解决我的内存泄漏问题,我使用frame
分配了av_frame_alloc
,使每个周期都可以用av_frame_make_writable
写入,并使用av_free
或av_freep
释放了它们的内存。
因此,请使用以下之一:
av_free(frame);
av_freep(frame);