Make the configuration penalty subtler about inputs
authorJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Wed, 1 Aug 2018 12:24:40 +0000 (14:24 +0200)
committerJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Sun, 12 May 2019 20:32:10 +0000 (22:32 +0200)
Instead of uniformly demote configurations with a non-matching audio
input count (using a penalty offset of 1000), also grade the
impreciseness of the configuration so that those with the nearest input
count are preferred. As for outputs, give a slightly higher handicap to
configuration with too many inputs with regard to the actual audio
inputs that can be fed to the plugin.

POLICY CHANGE: when only imprecise configurations are found the actually
selected one can be different (better) than before this commit.

libs/ardour/audio_unit.cc

index 67938d2de9c131f38638e744cc7e2f435d142635..c8c546c30dabe5b75a7696a36d389f6d694ae486 100644 (file)
@@ -1381,11 +1381,11 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out, Cha
 }
 
 #define FOUNDCFG_IMPRECISE(in, out) {              \
-  float p = fabsf ((float)(out) - preferred_out);  \
-  if (in != audio_in) {                            \
-    p += 1000;                                     \
-  }                                                \
-  if ((out) > preferred_out) { p *= 1.1; }         \
+  const float p =                                  \
+      fabsf ((float)(out) - preferred_out) *       \
+          (((out) > preferred_out) ? 1.1 : 1)      \
+      + fabsf ((float)(in) - audio_in) *           \
+          (((in) > audio_in) ? 275 : 250);         \
   FOUNDCFG_PENALTY(in, out, p);                    \
 }
 
@@ -1483,8 +1483,6 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out, Cha
                                 * Really imprecise only if desired_in != audio_in */
                                FOUNDCFG_IMPRECISE (desired_in, possible_out);
                        }
-                       // ideally we'll also find the closest, best matching
-                       // input configuration with minimal output penalty...
                }
 
        }