diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2008-01-06 00:08:20 +0300 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2008-01-06 00:08:20 +0300 |
commit | ef7f2bb782de8758afa2d8d1456da8148c38bb65 (patch) | |
tree | 2eb44027cf8367e71172b058e60e718621d25715 /libavcodec/libfaad.c | |
parent | 1d8cfa316884cac0926c64450d3a9db383eab950 (diff) |
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.c | 20 |
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; } |