summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2012-11-06 12:18:57 +0200
committerMartin Storsjö <martin@martin.st>2012-11-07 00:48:50 +0200
commitad961726dc0bec7435aae7fbab10471b9063018b (patch)
tree1141e38fd697b530bca5a913b294ab285371b094
parente6c4c0f7cfaf0378a70f6f7f0611d4c21433067a (diff)
libopencore-amr: Check the return value of amr_decode_fix_avctx
This allows getting rid of redundant checks later in the codec specific init functions. Move the check to before actually initializing the decoder lib, to simplify error handling. This fixes a case of returning a value from a void function, present since d40dab907. Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r--libavcodec/libopencore-amr.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/libavcodec/libopencore-amr.c b/libavcodec/libopencore-amr.c
index a754d521a6..0c472b7b72 100644
--- a/libavcodec/libopencore-amr.c
+++ b/libavcodec/libopencore-amr.c
@@ -27,7 +27,7 @@
#include "audio_frame_queue.h"
#include "internal.h"
-static void amr_decode_fix_avctx(AVCodecContext *avctx)
+static int amr_decode_fix_avctx(AVCodecContext *avctx)
{
const int is_amr_wb = 1 + (avctx->codec_id == AV_CODEC_ID_AMR_WB);
@@ -41,6 +41,7 @@ static void amr_decode_fix_avctx(AVCodecContext *avctx)
avctx->channels = 1;
avctx->channel_layout = AV_CH_LAYOUT_MONO;
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
+ return 0;
}
#if CONFIG_LIBOPENCORE_AMRNB
@@ -107,6 +108,10 @@ static const AVClass class = {
static av_cold int amr_nb_decode_init(AVCodecContext *avctx)
{
AMRContext *s = avctx->priv_data;
+ int ret;
+
+ if ((ret = amr_decode_fix_avctx(avctx)) < 0)
+ return ret;
s->dec_state = Decoder_Interface_init();
if (!s->dec_state) {
@@ -114,13 +119,6 @@ static av_cold int amr_nb_decode_init(AVCodecContext *avctx)
return -1;
}
- amr_decode_fix_avctx(avctx);
-
- if (avctx->channels > 1) {
- av_log(avctx, AV_LOG_ERROR, "amr_nb: multichannel decoding not supported\n");
- return AVERROR(ENOSYS);
- }
-
avcodec_get_frame_defaults(&s->frame);
avctx->coded_frame = &s->frame;
@@ -324,15 +322,12 @@ typedef struct AMRWBContext {
static av_cold int amr_wb_decode_init(AVCodecContext *avctx)
{
AMRWBContext *s = avctx->priv_data;
+ int ret;
- s->state = D_IF_init();
-
- amr_decode_fix_avctx(avctx);
+ if ((ret = amr_decode_fix_avctx(avctx)) < 0)
+ return ret;
- if (avctx->channels > 1) {
- av_log(avctx, AV_LOG_ERROR, "amr_wb: multichannel decoding not supported\n");
- return AVERROR(ENOSYS);
- }
+ s->state = D_IF_init();
avcodec_get_frame_defaults(&s->frame);
avctx->coded_frame = &s->frame;