[FFmpeg-cvslog] r11422 - in trunk/libavcodec: aac_ac3_parser.c libfaad.c
jbr
subversion
Sat Jan 5 22:08:20 CET 2008
Author: jbr
Date: Sat Jan 5 22:08:20 2008
New Revision: 11422
Log:
add downmixing support to libfaad decoder
Modified:
trunk/libavcodec/aac_ac3_parser.c
trunk/libavcodec/libfaad.c
Modified: trunk/libavcodec/aac_ac3_parser.c
==============================================================================
--- trunk/libavcodec/aac_ac3_parser.c (original)
+++ trunk/libavcodec/aac_ac3_parser.c Sat Jan 5 22:08:20 2008
@@ -60,11 +60,12 @@ int ff_aac_ac3_parse(AVCodecParserContex
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;
Modified: trunk/libavcodec/libfaad.c
==============================================================================
--- trunk/libavcodec/libfaad.c (original)
+++ trunk/libavcodec/libfaad.c Sat Jan 5 22:08:20 2008
@@ -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
} else {
avctx->sample_rate = samplerate;
avctx->channels = channels;
+ channel_setup(avctx);
s->init = 1;
}
}
@@ -170,6 +186,7 @@ static int faac_decode_frame(AVCodecCont
}
avctx->sample_rate = srate;
avctx->channels = channels;
+ channel_setup(avctx);
s->init = 1;
}
@@ -308,6 +325,9 @@ static int faac_decode_init(AVCodecConte
faac_init_mp4(avctx);
+ if(!s->init && avctx->channels > 0)
+ channel_setup(avctx);
+
return 0;
}
More information about the ffmpeg-cvslog
mailing list