ffmpeg - 正确清洁 AVFrame

标签 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)

最佳答案

我使用带有 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/

相关文章:

c++ - 基于信号/频谱分析的语音识别

python - 尝试通过 Subprocess 发送命令以使用 ffmpeg

ffmpeg - 如何从 .mpd 播放列表文件下载视频

image - 图像中的额外数据 (PPM/PAM/PNM)

javascript - Node.js - 将数据缓冲到 Ffmpeg

ffmpeg 将 mov 转换为 flv

ffmpeg - h264annexb比特流到flv mux ffmpeg库

ffmpeg - 如何控制ffmpeg关键帧的生成?

ffmpeg - 正确的 AVFrame RGB 值

ffmpeg - 为 sws_scale() 分配 AVFrame