I investigated further and found I made a basic error : the releasing code was not called as it should !
So, the code was correct (bar the avpicture_free call) and doesn't leak at all. Sorry for the noise... Fulbert. On Sep 12, 2013, at 14:46, Fulbert <[email protected]> wrote: > 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. > _______________________________________________ > Libav-user mailing list > [email protected] > http://ffmpeg.org/mailman/listinfo/libav-user _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
