# HG changeset patch # User benoit # Date 1185893481 0 # Node ID 5a61305cc5687d9b433da6a7fce0868b7bf18c8a # Parent 0e1fbd77bf55820745fcf3718315cdcbcd6186ff fix mem leak patch by Daniel Kristjansson: [danielk cuymedia net] Original thread: [FFmpeg-devel] [PATCH] alloc_picture needs to free buffer when it's not going to use it Date: 07/20/2007 07:27 PM diff -r 0e1fbd77bf55 -r 5a61305cc568 mpegvideo.c --- a/mpegvideo.c Tue Jul 31 06:55:48 2007 +0000 +++ b/mpegvideo.c Tue Jul 31 14:51:21 2007 +0000 @@ -188,14 +188,13 @@ const int b8_array_size= s->b8_stride*s->mb_height*2; const int b4_array_size= s->b4_stride*s->mb_height*4; int i; + int r= -1; if(shared){ assert(pic->data[0]); assert(pic->type == 0 || pic->type == FF_BUFFER_TYPE_SHARED); pic->type= FF_BUFFER_TYPE_SHARED; }else{ - int r; - assert(!pic->data[0]); r= s->avctx->get_buffer(s->avctx, (AVFrame*)pic); @@ -207,11 +206,13 @@ if(s->linesize && (s->linesize != pic->linesize[0] || s->uvlinesize != pic->linesize[1])){ av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed (stride changed)\n"); + s->avctx->release_buffer(s->avctx, (AVFrame*)pic); return -1; } if(pic->linesize[1] != pic->linesize[2]){ av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed (uv stride mismatch)\n"); + s->avctx->release_buffer(s->avctx, (AVFrame*)pic); return -1; } @@ -261,6 +262,8 @@ return 0; fail: //for the CHECKED_ALLOCZ macro + if(r>=0) + s->avctx->release_buffer(s->avctx, (AVFrame*)pic); return -1; }