[FFmpeg-cvslog] lavr: fix matrix reduction for upmixing in certain cases

Justin Ruggles git at videolan.org
Wed Feb 13 13:05:22 CET 2013


ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Fri Jan 18 13:44:10 2013 -0500| [600b4c973fb98f07ec3c5837112865048fb8a607] | committer: Justin Ruggles

lavr: fix matrix reduction for upmixing in certain cases

Do not skip an output if the corresponding input contributes to other output
channels.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=600b4c973fb98f07ec3c5837112865048fb8a607
---

 libavresample/audio_mix.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/libavresample/audio_mix.c b/libavresample/audio_mix.c
index 096bcf3..487bddf 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--;



More information about the ffmpeg-cvslog mailing list