[Libav-user] Basic problem : memory leak when playing several movies

Fulbert Boussaton 42 at flubb.net
Thu Sep 12 14:46:31 CEST 2013


Hi everyone,

I use FFMpeg on iOS/armv7 (I just cloned the repository yesterday) and even though I easily managed to make a basic video player (thanks to all the devs by the way, the project is really a technical achievement !), I still have a frustrating memory leak problem.

Short version : some memory is not released each time I play (switch to) a new movie in the same run. The amount of leaking memory depends on the movie, the order is 500KB-5MB.

In order to better explain the situation, here are the operations I execute to open a new movie (The code is slightly modified to keep only the relevant calls) :

AVFormatContext*	Ctx;
avformat_open_input(&Ctx, <...>, NULL, &Options);
avformat_find_stream_info(Ctx, NULL);
AVCodecContext* VCodecCtx = Ctx->streams[0]->codec;
AVCodec* TargetVideoCodec = avcodec_find_decoder(VCodecCtx->codec_id);
avcodec_open2(VCodecCtx, TargetVideoCodec, NULL);
AVFrame* TargetFrame = avcodec_alloc_frame();
AVFrame* TargetFrameRGB = avcodec_alloc_frame();
int FrameSizeInBytes = avpicture_get_size(PIX_FMT_RGB24, VCodecCtx->width, VCodecCtx->height);
uint8_t* FrameBuffer = (uint8_t*) av_malloc(FrameSizeInBytes);
avpicture_fill((AVPicture*) TargetFrameRGB, FrameBuffer, PIX_FMT_RGB24, VCodecCtx->width, VCodecCtx->height);
struct SwsContext* ScaleCtx = sws_getContext(VCodecCtx->width, VCodecCtx->height, VCodecCtx->pix_fmt, VCodecCtx->width, VCodecCtx->height, PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL);

And here are the functions I call to release all the previous structures :

sws_freeContext(ScaleCtx);
avpicture_free((AVPicture*)TargetFrameRGB);
av_free(FrameBuffer);
avcodec_free_frame(&TargetFrame);
avcodec_free_frame(&TargetFrameRGB);
avcodec_close(VCodecCtx);
avformat_close_input(&Ctx);

There's no AVPacket management, picture scaling or anything graphical here because I tried to present you the minimal pieces of code for which the problem occurs.

Obviously, I didn't release something I asked to be allocated so I'm sure I've forgot to call a avXXX_free_something but I can't find anything in the sources and I'm quite stuck.

Is there anybody who can see what the problem is ?


Thanks.

Fulbert.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20130912/e128bcf7/attachment.html>


More information about the Libav-user mailing list