changeset 36:7d4c98c696a5

Choose more sensible non-default parameter values where possible
author Chris Cannam
date Mon, 14 Jul 2014 12:43:10 +0100
parents b700f37dc118
children a835f9cf3a3d
files TestDefaults.cpp
diffstat 1 files changed, 32 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/TestDefaults.cpp	Tue Jun 10 08:50:54 2014 +0100
+++ b/TestDefaults.cpp	Mon Jul 14 12:43:10 2014 +0100
@@ -187,13 +187,41 @@
 	if (p->getParameterDescriptors().empty()) return r;
 
         // Set all parameters to non-default values
+
         Plugin::ParameterList pl = p->getParameterDescriptors();
+
         for (int i = 0; i < (int)pl.size(); ++i) {
-            if (pl[i].defaultValue == pl[i].minValue) {
-                p->setParameter(pl[i].identifier, pl[i].maxValue);
-            } else {
-                p->setParameter(pl[i].identifier, pl[i].minValue);
+
+            // Half-way between default and max value, seems a
+            // reasonable guess for something to set it to. We want to
+            // avoid the real extremes because they can sometimes be
+            // very slow, and we want to avoid setting everything to
+            // the same values (e.g. min) because plugins will
+            // sometimes legitimately reject that.
+
+            // Remember to take into account quantization
+
+            float value = (pl[i].defaultValue + pl[i].maxValue) / 2;
+
+            if (pl[i].isQuantized) {
+                value = round(value / pl[i].quantizeStep) * pl[i].quantizeStep;
             }
+
+            if (value > pl[i].maxValue) {
+                value = pl[i].maxValue;
+            }
+            if (value < pl[i].minValue) {
+                value = pl[i].minValue;
+            }
+            if (value == pl[i].defaultValue) {
+                if (pl[i].defaultValue == pl[i].minValue) {
+                    value = pl[i].maxValue;
+                } else {
+                    value = pl[i].minValue;
+                }
+            }
+
+            p->setParameter(pl[i].identifier, value);
         }
 
         if (!initAdapted(p.get(), channels, _step, _step, r)) return r;