changeset 64:85ec33975434

Support split OutputDescriptor, and plugins rather than pluginData in listResponse from SDK
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 23 Sep 2016 14:20:29 +0100
parents 72c43bc69616
children 2d866edd79d5
files capnproto/VampnProto.h capnproto/vamp.capnp json/VampJson.h utilities/json-cli.cpp
diffstat 4 files changed, 72 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/capnproto/VampnProto.h	Fri Sep 23 14:20:06 2016 +0100
+++ b/capnproto/VampnProto.h	Fri Sep 23 14:20:29 2016 +0100
@@ -127,11 +127,8 @@
     }
 
     static void
-    buildOutputDescriptor(OutputDescriptor::Builder &b,
-                          const Vamp::Plugin::OutputDescriptor &od) {
-
-        auto basic = b.initBasic();
-        buildBasicDescriptor(basic, od);
+    buildConfiguredOutputDescriptor(ConfiguredOutputDescriptor::Builder &b,
+                                    const Vamp::Plugin::OutputDescriptor &od) {
 
         b.setUnit(od.unit);
 
@@ -162,10 +159,19 @@
     }
 
     static void
-    readOutputDescriptor(Vamp::Plugin::OutputDescriptor &od,
-                         const OutputDescriptor::Reader &r) {
+    buildOutputDescriptor(OutputDescriptor::Builder &b,
+                          const Vamp::Plugin::OutputDescriptor &od) {
 
-        readBasicDescriptor(od, r.getBasic());
+        auto basic = b.initBasic();
+        buildBasicDescriptor(basic, od);
+
+        auto configured = b.initConfigured();
+        buildConfiguredOutputDescriptor(configured, od);
+    }
+    
+    static void
+    readConfiguredOutputDescriptor(Vamp::Plugin::OutputDescriptor &od,
+                                   const ConfiguredOutputDescriptor::Reader &r) {
 
         od.unit = r.getUnit();
 
@@ -195,6 +201,14 @@
     }
 
     static void
+    readOutputDescriptor(Vamp::Plugin::OutputDescriptor &od,
+                         const OutputDescriptor::Reader &r) {
+
+        readBasicDescriptor(od, r.getBasic());
+        readConfiguredOutputDescriptor(od, r.getConfigured());
+    }
+
+    static void
     buildParameterDescriptor(ParameterDescriptor::Builder &b,
                              const Vamp::Plugin::ParameterDescriptor &pd) {
 
@@ -685,10 +699,10 @@
                            const Vamp::HostExt::ListResponse &resp) {
         b.setSuccess(true);
         auto r = b.getResponse().initList();
-        auto p = r.initPlugins(resp.pluginData.size());
-        for (size_t i = 0; i < resp.pluginData.size(); ++i) {
+        auto p = r.initPlugins(resp.plugins.size());
+        for (size_t i = 0; i < resp.plugins.size(); ++i) {
             auto pd = p[i];
-            buildPluginStaticData(pd, resp.pluginData[i]);
+            buildPluginStaticData(pd, resp.plugins[i]);
         }
     }
     
@@ -844,13 +858,13 @@
         if (getRequestResponseType(r) != RRType::List) {
             throw std::logic_error("not a list response");
         }
-        resp.pluginData.clear();
+        resp.plugins.clear();
         if (r.getSuccess()) {
             auto pp = r.getResponse().getList().getPlugins();
             for (const auto &p: pp) {
                 Vamp::HostExt::PluginStaticData psd;
                 readPluginStaticData(psd, p);
-                resp.pluginData.push_back(psd);
+                resp.plugins.push_back(psd);
             }
         }
     }
--- a/capnproto/vamp.capnp	Fri Sep 23 14:20:06 2016 +0100
+++ b/capnproto/vamp.capnp	Fri Sep 23 14:20:29 2016 +0100
@@ -49,20 +49,24 @@
     valueNames         @7  :List(Text)  = [];
 }
 
+struct ConfiguredOutputDescriptor {
+    unit               @0  :Text;
+    hasFixedBinCount   @1  :Bool        = false;
+    binCount           @2  :Int32       = 0;
+    binNames           @3  :List(Text)  = [];
+    hasKnownExtents    @4  :Bool        = false;
+    minValue           @5  :Float32     = 0.0;
+    maxValue           @6  :Float32     = 0.0;
+    isQuantized        @7  :Bool        = false;
+    quantizeStep       @8  :Float32     = 0.0;
+    sampleType         @9  :SampleType;
+    sampleRate         @10 :Float32     = 0.0;
+    hasDuration        @11 :Bool        = false;
+}
+
 struct OutputDescriptor {
     basic              @0  :Basic;
-    unit               @1  :Text;
-    hasFixedBinCount   @2  :Bool        = false;
-    binCount           @3  :Int32       = 0;
-    binNames           @4  :List(Text)  = [];
-    hasKnownExtents    @5  :Bool        = false;
-    minValue           @6  :Float32     = 0.0;
-    maxValue           @7  :Float32     = 0.0;
-    isQuantized        @8  :Bool        = false;
-    quantizeStep       @9  :Float32     = 0.0;
-    sampleType         @10 :SampleType;
-    sampleRate         @11 :Float32     = 0.0;
-    hasDuration        @12 :Bool        = false;
+    configured         @1  :ConfiguredOutputDescriptor;
 }
 
 struct PluginStaticData {
--- a/json/VampJson.h	Fri Sep 23 14:20:06 2016 +0100
+++ b/json/VampJson.h	Fri Sep 23 14:20:29 2016 +0100
@@ -190,9 +190,8 @@
     }
 
     static json11::Json
-    fromOutputDescriptor(const Vamp::Plugin::OutputDescriptor &desc) {
+    fromConfiguredOutputDescriptor(const Vamp::Plugin::OutputDescriptor &desc) {
         json11::Json::object jo {
-            { "basic", fromBasicDescriptor(desc) },
             { "unit", desc.unit },
             { "sampleType", fromSampleType(desc.sampleType) },
             { "sampleRate", desc.sampleRate },
@@ -212,16 +211,23 @@
         return json11::Json(jo);
     }
     
+    static json11::Json
+    fromOutputDescriptor(const Vamp::Plugin::OutputDescriptor &desc) {
+        json11::Json::object jo {
+            { "basic", fromBasicDescriptor(desc) },
+            { "configured", fromConfiguredOutputDescriptor(desc) }
+        };
+        return json11::Json(jo);
+    }
+    
     static Vamp::Plugin::OutputDescriptor
-    toOutputDescriptor(json11::Json j) {
+    toConfiguredOutputDescriptor(json11::Json j) {
 
         Vamp::Plugin::OutputDescriptor od;
         if (!j.is_object()) {
             throw Failure("object expected for output descriptor");
         }
     
-        toBasicDescriptor(j["basic"], od);
-
         od.unit = j["unit"].string_value();
 
         od.sampleType = toSampleType(j["sampleType"].string_value());
@@ -257,6 +263,21 @@
 
         return od;
     }
+    
+    static Vamp::Plugin::OutputDescriptor
+    toOutputDescriptor(json11::Json j) {
+
+        Vamp::Plugin::OutputDescriptor od;
+        if (!j.is_object()) {
+            throw Failure("object expected for output descriptor");
+        }
+
+        od = toConfiguredOutputDescriptor(j);
+    
+        toBasicDescriptor(j["basic"], od);
+
+        return od;
+    }
 
     static json11::Json
     fromParameterDescriptor(const Vamp::PluginBase::ParameterDescriptor &desc) {
@@ -933,7 +954,7 @@
         jo["success"] = true;
 
         json11::Json::array arr;
-        for (const auto &a: resp.pluginData) {
+        for (const auto &a: resp.plugins) {
             arr.push_back(fromPluginStaticData(a));
         }
         json11::Json::object po;
@@ -1123,7 +1144,7 @@
         Vamp::HostExt::ListResponse resp;
         if (successful(j)) {
             for (const auto &a: j["content"]["plugins"].array_items()) {
-                resp.pluginData.push_back(toPluginStaticData(a));
+                resp.plugins.push_back(toPluginStaticData(a));
             }
         }
         return resp;
--- a/utilities/json-cli.cpp	Fri Sep 23 14:20:06 2016 +0100
+++ b/utilities/json-cli.cpp	Fri Sep 23 14:20:29 2016 +0100
@@ -61,7 +61,7 @@
     auto resp = loader->listPluginData();
 
     Json::array j;
-    for (const auto &pd: resp.pluginData) {
+    for (const auto &pd: resp.plugins) {
 	j.push_back(VampJson::fromPluginStaticData(pd));
     }
     return Json(j);