summaryrefslogtreecommitdiff
path: root/libavcodec/libfaad.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2008-01-05 21:08:20 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2008-01-05 21:08:20 +0000
commitef7f2bb782de8758afa2d8d1456da8148c38bb65 (patch)
tree2eb44027cf8367e71172b058e60e718621d25715 /libavcodec/libfaad.c
parent1d8cfa316884cac0926c64450d3a9db383eab950 (diff)
downloadffmpeg-ef7f2bb782de8758afa2d8d1456da8148c38bb65.tar.gz
add downmixing support to libfaad decoder
Originally committed as revision 11422 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/libfaad.c')
-rw-r--r--libavcodec/libfaad.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/libavcodec/libfaad.c b/libavcodec/libfaad.c
index 8c265e397b..6de8084334 100644
--- a/libavcodec/libfaad.c
+++ b/libavcodec/libfaad.c
@@ -101,6 +101,21 @@ static const unsigned long faac_srates[] =
24000, 22050, 16000, 12000, 11025, 8000
};
+static void channel_setup(AVCodecContext *avctx)
+{
+#ifdef FAAD2_VERSION
+ FAACContext *s = avctx->priv_data;
+ if (avctx->request_channels > 0 && avctx->request_channels == 2 &&
+ avctx->request_channels < avctx->channels) {
+ faacDecConfigurationPtr faac_cfg;
+ avctx->channels = 2;
+ faac_cfg = s->faacDecGetCurrentConfiguration(s->faac_handle);
+ faac_cfg->downMatrix = 1;
+ s->faacDecSetConfiguration(s->faac_handle, faac_cfg);
+ }
+#endif
+}
+
static int faac_init_mp4(AVCodecContext *avctx)
{
FAACContext *s = avctx->priv_data;
@@ -123,6 +138,7 @@ static int faac_init_mp4(AVCodecContext *avctx)
} else {
avctx->sample_rate = samplerate;
avctx->channels = channels;
+ channel_setup(avctx);
s->init = 1;
}
}
@@ -170,6 +186,7 @@ static int faac_decode_frame(AVCodecContext *avctx,
}
avctx->sample_rate = srate;
avctx->channels = channels;
+ channel_setup(avctx);
s->init = 1;
}
@@ -308,6 +325,9 @@ static int faac_decode_init(AVCodecContext *avctx)
faac_init_mp4(avctx);
+ if(!s->init && avctx->channels > 0)
+ channel_setup(avctx);
+
return 0;
}