[FFmpeg-trac] #5004(undetermined:new): ffmpeg leaks memory decoding mpeg2video/encoding mpeg1video
FFmpeg
trac at avcodec.org
Thu Nov 12 18:32:12 CET 2015
#5004: ffmpeg leaks memory decoding mpeg2video/encoding mpeg1video
-------------------------------------+-------------------------------------
Reporter: c-14 | Type: defect
Status: new | Priority: normal
Component: | Version: git-
undetermined | master
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Summary of the bug:
When decoding raw mpeg2video and encoding to raw mpeg1video, ffmpeg leaks
memory.
Note: I have been unable to reproduce with non-mpeg2video input (eg using
-f lavfi -i testsrc directly in the command encoding to mpeg1video does
not cause the leaks)
How to reproduce:
{{{
ffbuild/source/ffmpeg/ffmpeg_g -hide_banner -loglevel quiet -f lavfi -i
testsrc -c:v mpeg2video -t 120 -f mpeg2video pipe:1 | valgrind --leak-
check=yes ffbuild/source/ffmpeg/ffmpeg_g -f mpegvideo -threads 1 -i - -f
mpeg1video -an -threads 1 - > /dev/null
==6798== Memcheck, a memory error detector
==6798== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==6798== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright
info
==6798== Command: ffbuild/source/ffmpeg/ffmpeg_g -f mpegvideo -threads 1
-i - -f mpeg1video -an -threads 1 -
==6798==
ffmpeg version N-76639-g58d32c0 Copyright (c) 2000-2015 the FFmpeg
developers
built with gcc 4.9.3 (Gentoo 4.9.3 p1.0, pie-0.6.2)
configuration: --prefix=/home/radiocarbon/ffbuild --extra-libs=-lstdc++
--enable-fontconfig --enable-libzimg --enable-gpl --enable-libass
--enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libopus
--enable-libvorbis --enable-libvpx --enable-libx264
libavutil 55. 5.100 / 55. 5.100
libavcodec 57. 15.100 / 57. 15.100
libavformat 57. 14.100 / 57. 14.100
libavdevice 57. 0.100 / 57. 0.100
libavfilter 6. 15.100 / 6. 15.100
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.101 / 2. 0.101
libpostproc 54. 0.100 / 54. 0.100
Input #0, mpegvideo, from 'pipe:':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: mpeg2video (Main), yuv420p(tv), 320x240 [SAR 1:1
DAR 4:3], max. 104857 kb/s, 25 fps, 25 tbr, 1200k tbn, 50 tbc
Output #0, mpeg1video, to 'pipe:':
Metadata:
encoder : Lavf57.14.100
Stream #0:0: Video: mpeg1video, yuv420p, 320x240 [SAR 1:1 DAR 4:3],
q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.15.100 mpeg1video
Stream mapping:
Stream #0:0 -> #0:0 (mpeg2video (native) -> mpeg1video (native))
frame= 3000 fps= 67 q=7.2 Lsize= 3214kB time=00:02:00.00 bitrate=
219.4kbits/s
video:3214kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 0.000000%
==6798==
==6798== HEAP SUMMARY:
==6798== in use at exit: 1,265,196 bytes in 8,995 blocks
==6798== total heap usage: 482,338 allocs, 473,343 frees, 32,619,710
bytes allocated
==6798==
==6798== 358 bytes in 1 blocks are possibly lost in loss record 3 of 7
==6798== at 0x4C2C576: memalign (vg_replace_malloc.c:858)
==6798== by 0x4C2C691: posix_memalign (vg_replace_malloc.c:1021)
==6798== by 0xEBA04F: av_malloc (mem.c:97)
==6798== by 0xEAA913: av_buffer_alloc (buffer.c:71)
==6798== by 0xEAA913: av_buffer_make_writable (buffer.c:157)
==6798== by 0x94E487: make_tables_writable (mpegpicture.c:45)
==6798== by 0x94E487: ff_alloc_picture (mpegpicture.c:259)
==6798== by 0x954DB3: alloc_picture (mpegvideo.c:350)
==6798== by 0x954DB3: ff_mpv_frame_start (mpegvideo.c:1246)
==6798== by 0x91C57A: mpeg_field_start (mpeg12dec.c:1674)
==6798== by 0x922CCB: decode_chunks (mpeg12dec.c:2716)
==6798== by 0x92341E: mpeg_decode_frame (mpeg12dec.c:2832)
==6798== by 0xA78667: avcodec_decode_video2 (utils.c:2103)
==6798== by 0x494591: decode_video (ffmpeg.c:2092)
==6798== by 0x498C4F: process_input_packet (ffmpeg.c:2341)
==6798==
==6798== 1,264,798 (71,952 direct, 1,192,846 indirect) bytes in 2,998
blocks are definitely lost in loss record 7 of 7
==6798== at 0x4C2C576: memalign (vg_replace_malloc.c:858)
==6798== by 0x4C2C691: posix_memalign (vg_replace_malloc.c:1021)
==6798== by 0xEBA35B: av_malloc (mem.c:97)
==6798== by 0xEBA35B: av_mallocz (mem.c:254)
==6798== by 0xEAA7FD: av_buffer_ref (buffer.c:94)
==6798== by 0xEB3394: frame_copy_props.constprop.4 (frame.c:361)
==6798== by 0x95F66A: frame_end (mpegvideo_enc.c:1660)
==6798== by 0x95F66A: ff_mpv_encode_picture (mpegvideo_enc.c:1832)
==6798== by 0xA78133: avcodec_encode_video2 (utils.c:1858)
==6798== by 0x496841: do_video_out (ffmpeg.c:1196)
==6798== by 0x49BE80: reap_filters (ffmpeg.c:1387)
==6798== by 0x47D20A: transcode_step (ffmpeg.c:4059)
==6798== by 0x47D20A: transcode (ffmpeg.c:4103)
==6798== by 0x47D20A: main (ffmpeg.c:4296)
==6798==
==6798== LEAK SUMMARY:
==6798== definitely lost: 71,952 bytes in 2,998 blocks
==6798== indirectly lost: 1,192,846 bytes in 5,995 blocks
==6798== possibly lost: 358 bytes in 1 blocks
==6798== still reachable: 40 bytes in 1 blocks
==6798== suppressed: 0 bytes in 0 blocks
==6798== Reachable blocks (those to which a pointer was found) are not
shown.
==6798== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==6798==
==6798== For counts of detected and suppressed errors, rerun with: -v
==6798== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/5004>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list