changeset 13:1d13354ddc44

Build & read config request/response etc
author Chris Cannam <c.cannam@qmul.ac.uk>
date Tue, 17 May 2016 16:18:24 +0100
parents 828930f9a65d
children c35d0909a74e
files capnproto/VampnProto.h json/VampJson.h
diffstat 2 files changed, 88 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/capnproto/VampnProto.h	Tue May 17 13:52:51 2016 +0100
+++ b/capnproto/VampnProto.h	Tue May 17 16:18:24 2016 +0100
@@ -142,6 +142,7 @@
         od.hasFixedBinCount = r.getHasFixedBinCount();
         if (od.hasFixedBinCount) {
             od.binCount = r.getBinCount();
+            od.binNames.clear();
             for (const auto &n: r.getBinNames()) {
                 od.binNames.push_back(n);
             }
@@ -201,6 +202,7 @@
             pd.quantizeStep = r.getQuantizeStep();
         }
 
+        pd.valueNames.clear();
         for (const auto &n: r.getValueNames()) {
             pd.valueNames.push_back(n);
         }
@@ -248,6 +250,7 @@
 
         f.label = r.getLabel();
 
+        f.values.clear();
         for (auto v: r.getValues()) {
             f.values.push_back(v);
         }
@@ -275,6 +278,7 @@
     readFeatureSet(Vamp::Plugin::FeatureSet &fs,
                    const FeatureSet::Reader &r) {
 
+        fs.clear();
         for (const auto &p: r.getFeaturePairs()) {
             Vamp::Plugin::FeatureList vfl;
             for (const auto &f: p.getFeatures()) {
@@ -366,6 +370,7 @@
         d.copyright = r.getCopyright();
         d.pluginVersion = r.getPluginVersion();
 
+        d.category.clear();
         for (auto c: r.getCategory()) {
             d.category.push_back(c);
         }
@@ -373,18 +378,21 @@
         d.minChannelCount = r.getMinChannelCount();
         d.maxChannelCount = r.getMaxChannelCount();
 
+        d.parameters.clear();
         for (auto p: r.getParameters()) {
             Vamp::Plugin::ParameterDescriptor pd;
             readParameterDescriptor(pd, p);
             d.parameters.push_back(pd);
         }
 
+        d.programs.clear();
         for (auto p: r.getPrograms()) {
             d.programs.push_back(p);
         }
 
         d.inputDomain = toInputDomain(r.getInputDomain());
 
+        d.basicOutputInfo.clear();
         for (auto o: r.getBasicOutputInfo()) {
             Vamp::HostExt::PluginStaticData::Basic b;
             readBasicDescriptor(b, o);
@@ -493,6 +501,50 @@
         readPluginConfiguration(resp.defaultConfiguration,
                                 r.getDefaultConfiguration());
     }
+
+    static void
+    buildConfigurationRequest(ConfigurationRequest::Builder &b,
+                              const Vamp::HostExt::ConfigurationRequest &cr,
+                              PluginHandleMapper &mapper) {
+
+        b.setPluginHandle(mapper.pluginToHandle(cr.plugin));
+        auto c = b.initConfiguration();
+        buildPluginConfiguration(c, cr.configuration);
+    }
+
+    static void
+    readConfigurationRequest(Vamp::HostExt::ConfigurationRequest &cr,
+                             const ConfigurationRequest::Reader &r,
+                             PluginHandleMapper &mapper) {
+
+        auto h = r.getPluginHandle();
+        cr.plugin = mapper.handleToPlugin(h);
+        auto c = r.getConfiguration();
+        readPluginConfiguration(cr.configuration, c);
+    }
+
+    static void
+    buildConfigurationResponse(ConfigurationResponse::Builder &b,
+                               const Vamp::HostExt::ConfigurationResponse &cr) {
+
+        auto olist = b.initOutputs(cr.outputs.size());
+        for (size_t i = 0; i < cr.outputs.size(); ++i) {
+            auto od = olist[i];
+            buildOutputDescriptor(od, cr.outputs[i]);
+        }
+    }
+
+    static void
+    readConfigurationResponse(Vamp::HostExt::ConfigurationResponse &cr,
+                              const ConfigurationResponse::Reader &r) {
+
+        cr.outputs.clear();
+        for (const auto &o: r.getOutputs()) {
+            Vamp::Plugin::OutputDescriptor desc;
+            readOutputDescriptor(desc, o);
+            cr.outputs.push_back(desc);
+        }
+    }
 };
 
 }
--- a/json/VampJson.h	Tue May 17 13:52:51 2016 +0100
+++ b/json/VampJson.h	Tue May 17 16:18:24 2016 +0100
@@ -701,21 +701,52 @@
     }
 
     static json11::Json
+    fromConfigurationRequest(const Vamp::HostExt::ConfigurationRequest &cr,
+                             PluginHandleMapper &mapper) {
+
+        json11::Json::object jo;
+
+        jo["pluginHandle"] = mapper.pluginToHandle(cr.plugin);
+        jo["configuration"] = fromPluginConfiguration(cr.configuration);
+        
+        return json11::Json(jo);
+    }
+
+    static Vamp::HostExt::ConfigurationRequest
+    toConfigurationRequest(json11::Json j,
+                           PluginHandleMapper &mapper) {
+
+        std::string err;
+
+        if (!j.has_shape({
+                    { "pluginHandle", json11::Json::NUMBER },
+                    { "configuration", json11::Json::OBJECT } }, err)) {
+            throw Failure("malformed configuration request: " + err);
+        }
+
+        Vamp::HostExt::ConfigurationRequest cr;
+        cr.plugin = mapper.handleToPlugin(j["pluginHandle"].int_value());
+        cr.configuration = toPluginConfiguration(j["configuration"]);
+        return cr;
+    }
+
+    static json11::Json
     fromConfigurationResponse(const Vamp::HostExt::ConfigurationResponse &cr) {
 
-        json11::Json::object jout;
+        json11::Json::object jo;
         
         json11::Json::array outs;
         for (auto &d: cr.outputs) {
             outs.push_back(fromOutputDescriptor(d));
         }
-        jout["outputList"] = outs;
+        jo["outputList"] = outs;
         
-        return json11::Json(jout);
+        return json11::Json(jo);
     }
 
-    static Vamp::HostExt::ConfigurationResponse toConfigurationResponse(json11::Json j) {
-
+    static Vamp::HostExt::ConfigurationResponse
+    toConfigurationResponse(json11::Json j) {
+        
         Vamp::HostExt::ConfigurationResponse cr;
 
         if (!j["outputList"].is_array()) {