[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