[FFmpeg-cvslog] libmp3lame: improve error handling in MP3lame_encode_init()

Justin Ruggles git at videolan.org
Tue Feb 21 05:29:39 CET 2012


ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Thu Feb 16 22:12:03 2012 -0500| [8dad25ebf7384d824d2a0980ed74c77a32174cc3] | committer: Justin Ruggles

libmp3lame: improve error handling in MP3lame_encode_init()

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8dad25ebf7384d824d2a0980ed74c77a32174cc3
---

 libavcodec/libmp3lame.c |   44 +++++++++++++++++++++++++-------------------
 1 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c
index b8ccb26..1241cdc7 100644
--- a/libavcodec/libmp3lame.c
+++ b/libavcodec/libmp3lame.c
@@ -40,15 +40,27 @@ typedef struct Mp3AudioContext {
     int reservoir;
 } Mp3AudioContext;
 
+
+static av_cold int MP3lame_encode_close(AVCodecContext *avctx)
+{
+    Mp3AudioContext *s = avctx->priv_data;
+
+    av_freep(&avctx->coded_frame);
+
+    lame_close(s->gfp);
+    return 0;
+}
+
 static av_cold int MP3lame_encode_init(AVCodecContext *avctx)
 {
     Mp3AudioContext *s = avctx->priv_data;
+    int ret;
 
     if (avctx->channels > 2)
-        return -1;
+        return AVERROR(EINVAL);
 
     if ((s->gfp = lame_init()) == NULL)
-        goto err;
+        return AVERROR(ENOMEM);
     lame_set_in_samplerate(s->gfp, avctx->sample_rate);
     lame_set_out_samplerate(s->gfp, avctx->sample_rate);
     lame_set_num_channels(s->gfp, avctx->channels);
@@ -66,19 +78,23 @@ static av_cold int MP3lame_encode_init(AVCodecContext *avctx)
     }
     lame_set_bWriteVbrTag(s->gfp,0);
     lame_set_disable_reservoir(s->gfp, !s->reservoir);
-    if (lame_init_params(s->gfp) < 0)
-        goto err_close;
+    if (lame_init_params(s->gfp) < 0) {
+        ret = -1;
+        goto error;
+    }
 
     avctx->frame_size             = lame_get_framesize(s->gfp);
     avctx->coded_frame            = avcodec_alloc_frame();
+    if (!avctx->coded_frame) {
+        ret = AVERROR(ENOMEM);
+        goto error;
+    }
     avctx->coded_frame->key_frame = 1;
 
     return 0;
-
-err_close:
-    lame_close(s->gfp);
-err:
-    return -1;
+error:
+    MP3lame_encode_close(avctx);
+    return ret;
 }
 
 static const int sSampleRates[] = {
@@ -198,16 +214,6 @@ static int MP3lame_encode_frame(AVCodecContext *avctx, unsigned char *frame,
         return 0;
 }
 
-static av_cold int MP3lame_encode_close(AVCodecContext *avctx)
-{
-    Mp3AudioContext *s = avctx->priv_data;
-
-    av_freep(&avctx->coded_frame);
-
-    lame_close(s->gfp);
-    return 0;
-}
-
 #define OFFSET(x) offsetof(Mp3AudioContext, x)
 #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 static const AVOption options[] = {



More information about the ffmpeg-cvslog mailing list