]> git.sesse.net Git - ffmpeg/blobdiff - libavresample/audio_mix.c
Merge commit '5d21ca45591bb1c1d2265f8ed972d18c563f145e'
[ffmpeg] / libavresample / audio_mix.c
index 487bddf7465240b717b8979331d50fd928ce680c..e6f941727ce1de8195ce1345b2a3328ce8f501aa 100644 (file)
@@ -282,7 +282,7 @@ static void mix_2_to_6_fltp_flt_c(float **samples, float **matrix, int len,
     }
 }
 
-static int mix_function_init(AudioMix *am)
+static av_cold int mix_function_init(AudioMix *am)
 {
     am->func_descr = am->func_descr_generic = "n/a";
     am->mix = am->mix_generic = NULL;
@@ -572,11 +572,22 @@ static void reduce_matrix(AudioMix *am, const double *matrix, int stride)
         int skip = 1;
 
         for (o = 0; o < am->out_channels; o++) {
+            int i0;
             if ((o != i && matrix[o * stride + i] != 0.0) ||
                 (o == i && matrix[o * stride + i] != 1.0)) {
                 skip = 0;
                 break;
             }
+            /* if the input contributes fully to the output, also check that no
+               other inputs contribute to this output */
+            if (o == i) {
+                for (i0 = 0; i0 < am->in_channels; i0++) {
+                    if (i0 != i && matrix[o * stride + i0] != 0.0) {
+                        skip = 0;
+                        break;
+                    }
+                }
+            }
         }
         if (skip) {
             am->input_skip[i] = 1;