use request_channels in liba52 decoder
authorJustin Ruggles <justin.ruggles@gmail.com>
Sat, 5 Jan 2008 16:45:25 +0000 (16:45 +0000)
committerJustin Ruggles <justin.ruggles@gmail.com>
Sat, 5 Jan 2008 16:45:25 +0000 (16:45 +0000)
Originally committed as revision 11417 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/liba52.c

index 68147a1..d8065ef 100644 (file)
@@ -117,6 +117,13 @@ static int a52_decode_init(AVCodecContext *avctx)
     s->inbuf_ptr = s->inbuf;
     s->frame_size = 0;
 
+    /* allow downmixing to stereo or mono */
+    if (avctx->channels > 0 && avctx->request_channels > 0 &&
+            avctx->request_channels < avctx->channels &&
+            avctx->request_channels <= 2) {
+        avctx->channels = avctx->request_channels;
+    }
+
     return 0;
 }
 
@@ -179,12 +186,11 @@ static int a52_decode_frame(AVCodecContext *avctx,
                     s->channels = ac3_channels[s->flags & 7];
                     if (s->flags & A52_LFE)
                         s->channels++;
-                    if (avctx->channels == 0)
-                        /* No specific number of channel requested */
-                        avctx->channels = s->channels;
-                    else if (s->channels < avctx->channels) {
-                        av_log(avctx, AV_LOG_ERROR, "ac3dec: AC3 Source channels are less than specified: output to %d channels.. (frmsize: %d)\n", s->channels, len);
                         avctx->channels = s->channels;
+                    if (avctx->request_channels > 0 &&
+                            avctx->request_channels <= 2 &&
+                            avctx->request_channels < s->channels) {
+                        avctx->channels = avctx->request_channels;
                     }
                     avctx->bit_rate = bit_rate;
                 }