OSDN Git Service

Make DCA decoder honor avctx->request_channels in a more advisory way.
authorAndreas Öman <andreas@lonelycoder.com>
Sat, 15 Dec 2007 07:01:33 +0000 (07:01 +0000)
committerAndreas Öman <andreas@lonelycoder.com>
Sat, 15 Dec 2007 07:01:33 +0000 (07:01 +0000)
Originally committed as revision 11221 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/dca.c

index c237cc9..13eb865 100644 (file)
@@ -1159,23 +1159,12 @@ static int dca_decode_frame(AVCodecContext * avctx,
     avctx->bit_rate = s->bit_rate;
 
     channels = s->prim_channels + !!s->lfe;
-    avctx->channels = avctx->request_channels;
-    if(avctx->channels == 0) {
-        avctx->channels = channels;
-    } else if(channels < avctx->channels) {
-        av_log(avctx, AV_LOG_WARNING, "DTS source channels are less than "
-               "specified: output to %d channels.\n", channels);
-        avctx->channels = channels;
-    }
-    if(avctx->channels == 2) {
+    if(avctx->request_channels == 2 && s->prim_channels > 2) {
+        channels = 2;
         s->output = DCA_STEREO;
-    } else if(avctx->channels != channels) {
-        av_log(avctx, AV_LOG_ERROR, "Cannot downmix DTS to %d channels.\n",
-               avctx->channels);
-        return -1;
     }
 
-    channels = avctx->channels;
+    avctx->channels = channels;
     if(*data_size < (s->sample_blocks / 8) * 256 * sizeof(int16_t) * channels)
         return -1;
     *data_size = 0;