lavr: fix matrix reduction for upmixing in certain cases

Do not skip an output if the corresponding input contributes to other output
channels.
This commit is contained in:
Justin Ruggles 2013-01-18 13:44:10 -05:00
parent a3735bb92a
commit 600b4c973f

View File

@ -607,6 +607,7 @@ static void reduce_matrix(AudioMix *am, const double *matrix, int stride)
corresponding input channel */ corresponding input channel */
for (o = 0; o < FFMIN(am->in_channels, am->out_channels); o++) { for (o = 0; o < FFMIN(am->in_channels, am->out_channels); o++) {
int skip = 1; int skip = 1;
int o0;
for (i = 0; i < am->in_channels; i++) { for (i = 0; i < am->in_channels; i++) {
if ((o != i && matrix[o * stride + i] != 0.0) || 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; 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) { if (skip) {
am->output_skip[o] = 1; am->output_skip[o] = 1;
am->out_matrix_channels--; am->out_matrix_channels--;