]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
Make AC3 decoder honor avctx->request_channels
authorandoma <andoma@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 15 Dec 2007 07:00:19 +0000 (07:00 +0000)
committerandoma <andoma@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 15 Dec 2007 07:00:19 +0000 (07:00 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@11220 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/ac3dec.c

index 4750f0fd46a9f4dec6725120de894c8ba46b01fa..33f87ab7ff552119c464f6fa290a2179fe69e28c 100644 (file)
@@ -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++) {