正确清洁AVFrame

问题描述 投票:0回答:1

我正在使用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)

ffmpeg libav
1个回答
0
投票

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

[为了解决我的内存泄漏问题,我使用frame分配了av_frame_alloc,使每个周期都可以用av_frame_make_writable写入,并使用av_freeav_freep释放了它们的内存。

因此,请使用以下之一:

av_free(frame);
av_freep(frame);
© www.soinside.com 2019 - 2024. All rights reserved.