changeset 12:828930f9a65d

Configuration request/response structs
author Chris Cannam <c.cannam@qmul.ac.uk>
date Tue, 17 May 2016 13:52:51 +0100
parents aa61cb5c5754
children 1d13354ddc44
files capnproto/vamp.capnp json/VampJson.h utilities/json-cli.cpp
diffstat 3 files changed, 41 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/capnproto/vamp.capnp	Tue May 17 11:15:25 2016 +0100
+++ b/capnproto/vamp.capnp	Tue May 17 13:52:51 2016 +0100
@@ -147,6 +147,7 @@
 	load           @1  :LoadRequest;
 	configure      @2  :ConfigurationRequest;
 	process        @3  :ProcessRequest;
+	finish         @4  :Void;        # getRemainingFeatures and unload plugin
     }
 }
 
@@ -158,6 +159,7 @@
 	load           @3  :LoadResponse;
 	configure      @4  :ConfigurationResponse;
 	process        @5  :FeatureSet;
+	finish         @6  :FeatureSet;
     }
 }
 
--- a/json/VampJson.h	Tue May 17 11:15:25 2016 +0100
+++ b/json/VampJson.h	Tue May 17 13:52:51 2016 +0100
@@ -149,7 +149,7 @@
         }
         return json11::Json(jo);
     }
-
+    
     static Vamp::Plugin::OutputDescriptor
     toOutputDescriptor(json11::Json j) {
 
@@ -658,7 +658,7 @@
                     { "pluginKey", json11::Json::STRING },
                     { "inputSampleRate", json11::Json::NUMBER },
                     { "adapterFlags", json11::Json::ARRAY } }, err)) {
-            throw VampJson::Failure("malformed load request: " + err);
+            throw Failure("malformed load request: " + err);
         }
     
         Vamp::HostExt::LoadRequest req;
@@ -690,7 +690,7 @@
                     { "pluginHandle", json11::Json::NUMBER },
                     { "staticData", json11::Json::OBJECT },
                     { "defaultConfiguration", json11::Json::OBJECT } }, err)) {
-            throw VampJson::Failure("malformed load response: " + err);
+            throw Failure("malformed load response: " + err);
         }
 
         Vamp::HostExt::LoadResponse resp;
@@ -699,6 +699,35 @@
         resp.defaultConfiguration = toPluginConfiguration(j["defaultConfiguration"]);
         return resp;
     }
+
+    static json11::Json
+    fromConfigurationResponse(const Vamp::HostExt::ConfigurationResponse &cr) {
+
+        json11::Json::object jout;
+        
+        json11::Json::array outs;
+        for (auto &d: cr.outputs) {
+            outs.push_back(fromOutputDescriptor(d));
+        }
+        jout["outputList"] = outs;
+        
+        return json11::Json(jout);
+    }
+
+    static Vamp::HostExt::ConfigurationResponse toConfigurationResponse(json11::Json j) {
+
+        Vamp::HostExt::ConfigurationResponse cr;
+
+        if (!j["outputList"].is_array()) {
+            throw Failure("array expected for output list");
+        }
+
+        for (const auto &o: j["outputList"].array_items()) {
+            cr.outputs.push_back(toOutputDescriptor(o));
+        }
+
+        return cr;
+    }
 };
 
 }
--- a/utilities/json-cli.cpp	Tue May 17 11:15:25 2016 +0100
+++ b/utilities/json-cli.cpp	Tue May 17 13:52:51 2016 +0100
@@ -73,7 +73,7 @@
     return response;
 }
     
-Vamp::Plugin::OutputList
+Vamp::HostExt::ConfigurationResponse
 configurePlugin(Vamp::Plugin *plugin, json11::Json j) {
     
     auto config = VampJson::toPluginConfiguration(j);
@@ -83,8 +83,10 @@
     if (outputs.empty()) {
 	throw VampJson::Failure("plugin initialisation failed (invalid channelCount, stepSize, blockSize?)");
     }
-    
-    return outputs;
+
+    Vamp::HostExt::ConfigurationResponse response;
+    response.outputs = outputs;
+    return response;
 }
 
 Json
@@ -139,21 +141,13 @@
     
     Json config = j["configuration"];
 
-    configurePlugin(plugin, config);
+    auto response = configurePlugin(plugin, config);
 
     mapper.markInitialised(handle);
 
     cerr << "Configured and initialised plugin " << handle << endl;
 
-    //!!! to VampJson:
-    Json::object jout;
-    Json::array outs;
-    Vamp::Plugin::OutputList vouts = plugin->getOutputDescriptors();
-    for (auto &o: vouts) {
-	outs.push_back(VampJson::fromOutputDescriptor(o));
-    }
-    jout["outputList"] = outs;
-    return Json(jout);
+    return VampJson::fromConfigurationResponse(response);
 }
 
 Json