diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2013-01-18 13:44:10 -0500 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2013-02-12 13:41:13 -0500 |
commit | 600b4c973fb98f07ec3c5837112865048fb8a607 (patch) | |
tree | 0fb9727a32aaa6499b04d154ad9957935dcd489d | |
parent | a3735bb92a6b65eeed0f646336dba9776a9479dc (diff) | |
download | ffmpeg-600b4c973fb98f07ec3c5837112865048fb8a607.tar.gz |
lavr: fix matrix reduction for upmixing in certain cases
Do not skip an output if the corresponding input contributes to other output
channels.
-rw-r--r-- | libavresample/audio_mix.c | 10 |
1 files changed, 10 insertions, 0 deletions
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--; |