From 6708eefe558eb8c307c5bca00083bf4c406dd600 Mon Sep 17 00:00:00 2001 From: Andreas Ă–man Date: Sat, 15 Dec 2007 07:00:19 +0000 Subject: Make AC3 decoder honor avctx->request_channels Originally committed as revision 11220 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/ac3dec.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) (limited to 'libavcodec/ac3dec.c') diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index 4750f0fd46..33f87ab7ff 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -1128,23 +1128,12 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, /* channel config */ ctx->out_channels = ctx->channels; - if (avctx->channels == 0) { - avctx->channels = ctx->out_channels; - } else if(ctx->out_channels < avctx->channels) { - av_log(avctx, AV_LOG_ERROR, "Cannot upmix AC3 from %d to %d channels.\n", - ctx->out_channels, avctx->channels); - return -1; - } - if(avctx->channels == 2) { - ctx->output_mode = AC3_CHMODE_STEREO; - } else if(avctx->channels == 1) { - ctx->output_mode = AC3_CHMODE_MONO; - } else if(avctx->channels != ctx->out_channels) { - av_log(avctx, AV_LOG_ERROR, "Cannot downmix AC3 from %d to %d channels.\n", - ctx->out_channels, avctx->channels); - return -1; + if (avctx->request_channels > 0 && avctx->request_channels <= 2 && + avctx->request_channels < ctx->channels) { + ctx->out_channels = avctx->request_channels; + ctx->output_mode = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO; } - ctx->out_channels = avctx->channels; + avctx->channels = ctx->out_channels; /* parse the audio blocks */ for (blk = 0; blk < NB_BLOCKS; blk++) { -- cgit v1.2.3