当我使用 valgrind 检查 ffmpeg 内存泄漏时,它报告:
==2550== 1 个区块中的 32 个字节在 2,201 条丢失记录中的第 478 条中肯定丢失
==2550== 在 0x4C29F73: malloc (vg_replace_malloc.c:309)
==2550== 由 0x57D3236D:???
==2550== 由 0x57D316D8: ??? ==2550== 由 0x57D212E1: ??? ==2550== 由 0x57D2EB3B: ???
==2550== 由 0x802E8B8: nvenc_open_session (nvenc.c:237)
==2550== 由 0x802F2A2: nvenc_check_device (nvenc.c:446)
==2550== 由 0x802F7D6: nvenc_setup_device (nvenc.c:563)
==2550== 由 0x8032CDC: ff_nvenc_encode_init (nvenc.c:1499)
==2550== 由 0x81C5FC6: avcodec_open2 (utils.c:935)
它可以复制
ffmpeg版本:4.2.1
命令:valgrind --leak-check=yes --log-file=log.txt myprogram
如果我使用由CPU编写的h264编码器,其他代码是一样的,没有内存泄漏。
答案1
我也在 NVIDIA 开发者论坛上问过这个问题。回复如下。您也可以访问原始网站:https://forums.developer.nvidia.com/t/memory-leak-in-nvencopenencodesessionex/254738
这是一个已知问题,已于 2021 年底在从 495 版本开始的驱动程序中修复。
这是一个非关键问题,每个编码器实例都会创建这 32 个字节。这意味着如果您使用例如 ffmpeg 命令行工具,它将在进程结束后被清理。只有当您在一个进程内创建大量编码器会话或启动大量并行编码进程时,这一点才会引人注目,因为它只有 32 个字节。
因此我建议您更新您的 NVIDIA 驱动程序。