From 93de415cfe0a4d49778b08dac3e08be326dae7b6 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 15 Jan 2008 14:47:26 +0100 Subject: [PATCH] support for dynamic 2.0/5.1 AC3 changes - bug#3441 --- ac3dec/libac3/downmix.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/ac3dec/libac3/downmix.c b/ac3dec/libac3/downmix.c index 6d42342..18271f1 100644 --- a/ac3dec/libac3/downmix.c +++ b/ac3dec/libac3/downmix.c @@ -251,7 +251,23 @@ downmix_3f_0r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); } } - + +static void +downmix_2f_0r_to_6ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) +{ + uint_32 j; + float *left = 0, *right = 0; + + left = samples[0]; + right = samples[1]; + + for (j = 0; j < 256; j++) + { + s16_samples[j * 6 ] = (sint_16) (*left++ * 32767.0f); + s16_samples[j * 6 + 1] = (sint_16) (*right++ * 32767.0f); + } //FIXME enable output on surround channels, too. +} + static void downmix_2f_0r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) { @@ -368,13 +384,19 @@ void downmix(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) downmix_3f_0r_to_2ch(bsi,samples,s16_samples); break; - // 2/0 + // 2/0 - 2f_0r_to_6ch not really, but allows -D pcm.surround51:1 with 2/0 and 3/2 input (VDR e.g.) case 2: - if (ac3_config.num_output_ch != 2) { + switch (ac3_config.num_output_ch) { + case 2: + downmix_2f_0r_to_2ch(bsi,samples,s16_samples); + break; + case 6: + downmix_2f_0r_to_6ch(bsi,samples,s16_samples); + break; + default: fprintf(stderr,"unsupported 2/0 channels %d\n", ac3_config.num_output_ch); exit(1); } - downmix_2f_0r_to_2ch(bsi,samples,s16_samples); break; // 1/0 -- 2.47.1