多线程视频解码器泄漏内存

时间:2018-01-01 06:54:44

标签: multithreading memory-leaks ffmpeg hardware-acceleration opengl-4

我的目的是创建一个相对简单的视频播放系统,用于我正在开发的大型程序中。视频解码器的相关代码是here。到目前为止我能做的最好的事情是缩小内存泄漏到这部分代码(或者我没有注意到在没有使用视频时发生任何内存泄漏)。

这可能是一个非常广泛的问题,我怎么不确定我所遇到的问题的范围,以及如何说出我的问题。

我想知道的是我错过了什么或做错了导致明显的内存泄漏(明显的是我的意思是我可以看到内存使用量每分钟爬升兆字节)。我已经尝试确保我所做的每个分配都与释放相匹配。

编辑1
这将在运行MSYS2(MinGW64)

的Windows 10计算机上构建

1 个答案:

答案 0 :(得分:1)

捕获泄漏的最佳方法是在编译器中使用内置的内存泄漏检查程序,如果可以使用它编译,则优于valgrind。

将此行添加到您的makefile:

CXXFLAGS += -fno-omit-frame-pointer -fsanitize=address -ggdb3 -O0

如果你使用旧版本的gcc(它不支持内存消毒器/检查器使用clang)。

我所知道的av_packet_unref可能无法按预期工作,如果某些条件未得到满足(您可以在ffmpeg源代码内部阅读更多信息,无法记住它是其中一个头文件的名称)这些)。

编译完成后,让内存显着上升,然后使用 Ctrl + C 退出。内存清理程序将自动转储分配(而不是以后释放)内存的函数/行。如果您无法查看源代码行号,请使用addr2line工具。

希望有所帮助。