我正在使用 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);
关于ffmpeg - 正确清洁 AVFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55451248/