[FFmpeg-cvslog] r20002 - trunk/libavcodec/utils.c

michael subversion
Wed Sep 23 17:16:37 CEST 2009


Author: michael
Date: Wed Sep 23 17:16:36 2009
New Revision: 20002

Log:
Make sure priv_data is freed and codec is set to NULL in case of failure of avcodec_open().

Modified:
   trunk/libavcodec/utils.c

Modified: trunk/libavcodec/utils.c
==============================================================================
--- trunk/libavcodec/utils.c	Wed Sep 23 16:19:17 2009	(r20001)
+++ trunk/libavcodec/utils.c	Wed Sep 23 17:16:36 2009	(r20002)
@@ -475,23 +475,20 @@ int attribute_align_arg avcodec_open(AVC
     if (((avctx->coded_width || avctx->coded_height)
         && avcodec_check_dimensions(avctx, avctx->coded_width, avctx->coded_height))
         || avctx->channels > SANE_NB_CHANNELS) {
-        av_freep(&avctx->priv_data);
         ret = AVERROR(EINVAL);
-        goto end;
+        goto free_and_end;
     }
 
     avctx->codec = codec;
     if(avctx->codec_id != codec->id || avctx->codec_type != codec->type){
         av_log(avctx, AV_LOG_ERROR, "codec type or id mismatches\n");
-        goto end;
+        goto free_and_end;
     }
     avctx->frame_number = 0;
     if(avctx->codec->init){
         ret = avctx->codec->init(avctx);
         if (ret < 0) {
-            av_freep(&avctx->priv_data);
-            avctx->codec= NULL;
-            goto end;
+            goto free_and_end;
         }
     }
     ret=0;
@@ -503,6 +500,10 @@ end:
         (*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE);
     }
     return ret;
+free_and_end:
+    av_freep(&avctx->priv_data);
+    avctx->codec= NULL;
+    goto end;
 }
 
 int attribute_align_arg avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,



More information about the ffmpeg-cvslog mailing list