changeset 10255:b81ec4ac8f96 libavcodec

Make sure priv_data is freed and codec is set to NULL in case of failure of avcodec_open().
author michael
date Wed, 23 Sep 2009 15:16:36 +0000
parents b9f5f8b8f073
children 541055a030f3
files utils.c
diffstat 1 files changed, 7 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/utils.c	Wed Sep 23 14:19:17 2009 +0000
+++ b/utils.c	Wed Sep 23 15:16:36 2009 +0000
@@ -475,23 +475,20 @@
     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 @@
         (*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,