From 600b4c973fb98f07ec3c5837112865048fb8a607 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Fri, 18 Jan 2013 13:44:10 -0500 Subject: [PATCH] lavr: fix matrix reduction for upmixing in certain cases Do not skip an output if the corresponding input contributes to other output channels. --- libavresample/audio_mix.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libavresample/audio_mix.c b/libavresample/audio_mix.c index 096bcf3d66..487bddf746 100644 --- a/libavresample/audio_mix.c +++ b/libavresample/audio_mix.c @@ -607,6 +607,7 @@ static void reduce_matrix(AudioMix *am, const double *matrix, int stride) corresponding input channel */ for (o = 0; o < FFMIN(am->in_channels, am->out_channels); o++) { int skip = 1; + int o0; for (i = 0; i < am->in_channels; i++) { if ((o != i && matrix[o * stride + i] != 0.0) || @@ -615,6 +616,15 @@ static void reduce_matrix(AudioMix *am, const double *matrix, int stride) break; } } + /* check if the corresponding input channel makes a contribution to + any other output channel */ + i = o; + for (o0 = 0; o0 < am->out_channels; o0++) { + if (o0 != i && matrix[o0 * stride + i] != 0.0) { + skip = 0; + break; + } + } if (skip) { am->output_skip[o] = 1; am->out_matrix_channels--;