opencv/ffmpeg Intregulation ubuntu 16.04中的内存泄漏

opencv/ffmpeg Intregulation ubuntu 16.04中的内存泄漏,opencv,ffmpeg,valgrind,Opencv,Ffmpeg,Valgrind,使用ubuntu 16.04 opencv 2.4.9、ffmpeg 2.8.17。下面是valgrind的输出。我没有直接使用ffmpeg库 如果我们没有对原始图片进行编码,那么编码的输出缓冲区在这里初始化 调用从这里开始,CvVideoWriter\u FFMPEG::writeFrame 它调用icv_av_write_frame_FFMPEG,传递结构成员exputf 此调用调用FFMPEG api 根据此版本(n2.8.17)的FFMPEG文档,avcodec_encode_v

使用ubuntu 16.04 opencv 2.4.9、ffmpeg 2.8.17。下面是valgrind的输出。我没有直接使用ffmpeg库

如果我们没有对原始图片进行编码,那么编码的输出缓冲区在这里初始化

调用从这里开始,CvVideoWriter\u FFMPEG::writeFrame

它调用icv_av_write_frame_FFMPEG,传递结构成员exputf

此调用调用FFMPEG api

根据此版本(n2.8.17)的FFMPEG文档,avcodec_encode_video2仅在输入缓冲区为空时分配内存,然后调用者必须释放它。但是,如果调用了avcodec_encode_video,输出缓冲区参数可能会被更新,以指向新分配的数据,我假设它应该在以后使用av_free释放。不管怎么说,既然这件事没有发生,这里的一切看起来都井然有序,但瓦尔格林仍然不高兴

==1038== 464,421,923 (477,288 direct, 463,944,635 indirect) bytes in 19,887 blocks are definitely lost in loss record 3,628 of 3,628
==1038==    at 0x4C33B3B: memalign (in /usr/local/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1038==    by 0x4C33C22: posix_memalign (in /usr/local/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1038==    by 0x185EF17F: av_malloc (in /usr/lib/x86_64-linux-gnu/libavutil-ffmpeg.so.54.31.100)
==1038==    by 0x185EF48D: av_mallocz (in /usr/lib/x86_64-linux-gnu/libavutil-ffmpeg.so.54.31.100)
==1038==    by 0x185DCB0E: av_buffer_create (in /usr/lib/x86_64-linux-gnu/libavutil-ffmpeg.so.54.31.100)
==1038==    by 0x185DD083: av_buffer_realloc (in /usr/lib/x86_64-linux-gnu/libavutil-ffmpeg.so.54.31.100)
==1038==    by 0x16EF46E8: av_dup_packet (in /usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56.60.100)
==1038==    by 0x173716D2: avcodec_encode_video2 (in /usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56.60.100)
==1038==    by 0x8EA7377: ??? (in /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9)
==1038==    by 0x8EA8897: CvVideoWriter_FFMPEG::writeFrame(unsigned char const*, int, int, int, int, int) (in /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9)
==1038==    by 0x8EA89BD: cvWriteFrame_FFMPEG (in /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9)
==1038==    by 0x8EAA22E: CvVideoWriter_FFMPEG_proxy::writeFrame(_IplImage const*) (in /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9)