aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorDaniel Kristjansson <danielk@mrl.nyu.edu>2007-07-31 14:51:21 +0000
committerBenoit Fouet <benoit.fouet@free.fr>2007-07-31 14:51:21 +0000
commit29d2dc59f973f9495c703b4cab17ded5c24ab3e8 (patch)
tree045fd38b565b59267d556d7427b9b1c9203fd0a8 /libavcodec
parentc7bf7a826776ada93b3ebf141167af5c3694bab6 (diff)
downloadffmpeg-29d2dc59f973f9495c703b4cab17ded5c24ab3e8.tar.gz
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 Originally committed as revision 9838 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/mpegvideo.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 736680852e..49ae03976d 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -188,14 +188,13 @@ int alloc_picture(MpegEncContext *s, Picture *pic, int shared){
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 @@ int alloc_picture(MpegEncContext *s, Picture *pic, int shared){
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 @@ int alloc_picture(MpegEncContext *s, Picture *pic, int shared){
return 0;
fail: //for the CHECKED_ALLOCZ macro
+ if(r>=0)
+ s->avctx->release_buffer(s->avctx, (AVFrame*)pic);
return -1;
}