Mercurial > libavcodec.hg
changeset 6119:49d225414a3f libavcodec
add downmixing support to libfaad decoder
author | jbr |
---|---|
date | Sat, 05 Jan 2008 21:08:20 +0000 |
parents | 76801e61ddc4 |
children | 6d52514f9c41 |
files | aac_ac3_parser.c libfaad.c |
diffstat | 2 files changed, 24 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/aac_ac3_parser.c Sat Jan 05 18:40:49 2008 +0000 +++ b/aac_ac3_parser.c Sat Jan 05 21:08:20 2008 +0000 @@ -60,11 +60,12 @@ s->frame_size = len; /* update codec info */ avctx->sample_rate = sample_rate; - /* allow downmixing to mono or stereo for AC3 */ + /* allow downmixing to stereo (or mono for AC3) */ if(avctx->request_channels > 0 && avctx->request_channels < channels && - avctx->request_channels <= 2 && - avctx->codec_id == CODEC_ID_AC3) { + (avctx->request_channels <= 2 || + (avctx->request_channels == 1 && + avctx->codec_id == CODEC_ID_AC3))) { avctx->channels = avctx->request_channels; } else { avctx->channels = channels;
--- a/libfaad.c Sat Jan 05 18:40:49 2008 +0000 +++ b/libfaad.c Sat Jan 05 21:08:20 2008 +0000 @@ -101,6 +101,21 @@ 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 @@ } else { avctx->sample_rate = samplerate; avctx->channels = channels; + channel_setup(avctx); s->init = 1; } } @@ -170,6 +186,7 @@ } avctx->sample_rate = srate; avctx->channels = channels; + channel_setup(avctx); s->init = 1; } @@ -308,6 +325,9 @@ faac_init_mp4(avctx); + if(!s->init && avctx->channels > 0) + channel_setup(avctx); + return 0; }