diff vamp-client/PiperVampPlugin.h @ 287:09753ad777db

Add support for ProgramParameters. In theory this means we can select a program and then re-query the plugin's parameters and get the right values back, just as would happen if we were working with the remote extractor directly as a local Vamp plugin.
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 07 Apr 2020 15:56:02 +0100
parents 4b581a498981
children 26027c3a99a0
line wrap: on
line diff
--- a/vamp-client/PiperVampPlugin.h	Tue Jan 07 11:20:47 2020 +0000
+++ b/vamp-client/PiperVampPlugin.h	Tue Apr 07 15:56:02 2020 +0100
@@ -41,6 +41,7 @@
 
 #include "vamp-support/PluginStaticData.h"
 #include "vamp-support/PluginConfiguration.h"
+#include "vamp-support/PluginProgramParameters.h"
 
 #include "PluginClient.h"
 
@@ -107,7 +108,8 @@
                     float inputSampleRate,
                     int adapterFlags,
                     PluginStaticData psd,
-                    PluginConfiguration defaultConfig) :
+                    PluginConfiguration defaultConfig,
+                    PluginProgramParameters programParameters) :
         Plugin(inputSampleRate),
         m_client(client),
         m_key(pluginKey),
@@ -115,7 +117,8 @@
         m_state(Loaded),
         m_psd(psd),
         m_defaultConfig(defaultConfig),
-        m_config(defaultConfig)
+        m_config(defaultConfig),
+        m_programParameters(programParameters)
     { }
 
     virtual ~PiperVampPlugin() {
@@ -193,11 +196,18 @@
             throw std::logic_error("Can't select program after plugin initialised");
         }
         m_config.currentProgram = program;
+
+        const auto &pp = m_programParameters.programParameters;
+        if (pp.find(program) != pp.end()) {
+            for (auto param: pp.at(program)) {
+                m_config.parameterValues[param.first] = param.second;
+            }
+        }
     }
 
     bool initialise(size_t inputChannels,
-                            size_t stepSize,
-                            size_t blockSize) override {
+                    size_t stepSize,
+                    size_t blockSize) override {
 
         if (m_state == Failed) {
             throw std::logic_error("Plugin is in failed state");
@@ -412,6 +422,7 @@
     OutputList m_outputs;
     PluginConfiguration m_defaultConfig;
     PluginConfiguration m_config;
+    PluginProgramParameters m_programParameters;
 };
 
 }