Opened 11 years ago
Closed 11 years ago
#3338 closed defect (needs_more_info)
Memory leak playing ogv videos
Reported by: | romain145 | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | undetermined |
Version: | unspecified | Keywords: | leak |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Hello,
using the ffmpeg library as part of an SDL application to play ogv video files, I face memory leaks at the end of the video. Ogv videos are generated with ffmpeg2theora.
$ ffmpeg2theora ffmpeg2theora 0.27 - Xiph.Org libtheora 1.1 20090822 (Thusnelda)
FFmpeg version :
$ ffmpeg ffmpeg version N-59766-ge11983b Copyright (c) 2000-2014 the FFmpeg developers built on Jan 11 2014 17:06:41 with gcc 4.7 (Debian 4.7.2-5) configuration: --disable-optimizations libavutil 52. 62.100 / 52. 62.100 libavcodec 55. 47.101 / 55. 47.101 libavformat 55. 22.103 / 55. 22.103 libavdevice 55. 5.102 / 55. 5.102 libavfilter 4. 1.100 / 4. 1.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 17.104 / 0. 17.104 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Commands called at the end of each frame decoding :
av_free_packet(&packet); SDL_DestroyTexture(bmpTex1); av_free(pFrame); av_free(pFrame_YUV420P); av_free(buffer_YUV420P);
At the end of the video :
av_free_packet(&packet); avcodec_close(pCodecCtx); av_close_input_file(pFormatCtx);
Using the same code, playing an avi video file it doesn't show any memory leak.
Video files details :
gears2.ogv file is 2.1MB
$ ffmpeg -i gears2.ogv [...] Input #0, ogg, from 'gear2.ogv': Duration: 00:00:02.08, start: 0.000000, bitrate: 8167 kb/s Stream #0:0: Video: theora, yuv420p, 1024x768 [SAR 3:4 DAR 1:1], 25 tbr, 25 tbn, 25 tbc Metadata: MAJOR_BRAND : MSNV MINOR_VERSION : 16786688 COMPATIBLE_BRANDS: MSNVisommp42 CREATION_TIME : 2013-11-14 14:37:55 ENCODER : Lavf54.6.100
2.avi file is 144MB
$ ffmpeg -i 2.avi [...] Input #0, avi, from '2.avi': Duration: 00:00:02.03, start: 0.000000, bitrate: 566614 kb/s Stream #0:0: Video: rawvideo, bgr24, 1024x768, 30 tbr, 30 tbn, 30 tbc
Attachments (2)
Change History (7)
comment:1 by , 11 years ago
Component: | FFmpeg → undetermined |
---|---|
Keywords: | memory ogv avi removed |
by , 11 years ago
Attachment: | test_video.zip added |
---|
comment:3 by , 11 years ago
From the zip:
AVFrame *pFrame_YUV420P = avcodec_alloc_frame(); if(pFrame_YUV420P == NULL) { fprintf(stderr, "Could not allocate pFrame_YUV420P\n"); } uint8_t *buffer_YUV420P = (uint8_t *)av_malloc(avpicture_get_size(PIX_FMT_YUV420P,pCodecCtx->width, pCodecCtx->height)); avpicture_fill((AVPicture *)pFrame_YUV420P, buffer_YUV420P,PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height);
This is 100% broken. You can't use AVFrame this way. Besides, the decoder allocates the frames for you.
comment:4 by , 11 years ago
Attached a new implementation following explanations on this thread : https://forums.libsdl.org/viewtopic.php?t=9898
Still showing the memory leak.
If still incorrect, please update with the link to the manual part/tutorial referring to this.
Thanks.
comment:5 by , 11 years ago
Resolution: | → needs_more_info |
---|---|
Status: | new → closed |
If you believe there is a bug in FFmpeg, please provide the complete valgrind output and reopen this ticket.
If you need support, please read http://ffmpeg.org/contact.html
Please provide the complete valgrind output and / or provide the sample that allows to reproduce the leak.