changeset 26:98be88612dd1

Merge from branch outputid-string-in-featureset
author Chris Cannam
date Mon, 19 Sep 2016 14:48:43 +0100
parents 922c3381cb20 (current diff) 4a5de1bb2c6a (diff)
children 65fa1b372648
files
diffstat 2 files changed, 56 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/VamPipePluginLibrary.cpp	Fri Sep 16 10:14:38 2016 +0100
+++ b/VamPipePluginLibrary.cpp	Mon Sep 19 14:48:43 2016 +0100
@@ -100,7 +100,7 @@
 	rr.processRequest = VampJson::toVampRequest_Process(j, m_mapper, serialisation);
 	break;
     case RRType::Finish:
-	rr.finishPlugin = VampJson::toVampRequest_Finish(j, m_mapper);
+	rr.finishRequest = VampJson::toVampRequest_Finish(j, m_mapper);
 	break;
     case RRType::NotValid:
 	break;
@@ -123,38 +123,48 @@
          VampJson::BufferSerialisation::Base64 :
          VampJson::BufferSerialisation::Text);
 
-    switch (rr.type) {
+    if (!rr.success) {
 
-    case RRType::List:
-	j = VampJson::fromVampResponse_List("", rr.listResponse);
-	break;
-    case RRType::Load:
-	j = VampJson::fromVampResponse_Load(rr.loadResponse, m_mapper);
-	break;
-    case RRType::Configure:
-	j = VampJson::fromVampResponse_Configure(rr.configurationResponse);
-	break;
-    case RRType::Process:
-	j = VampJson::fromVampResponse_Process(rr.processResponse, serialisation);
-	break;
-    case RRType::Finish:
-	j = VampJson::fromVampResponse_Finish(rr.finishResponse, serialisation);
-	break;
-    case RRType::NotValid:
-	break;
+	j = VampJson::fromError(rr.errorText, rr.type);
+
+    } else {
+    
+        switch (rr.type) {
+
+        case RRType::List:
+            j = VampJson::fromVampResponse_List("", rr.listResponse);
+            break;
+        case RRType::Load:
+            j = VampJson::fromVampResponse_Load(rr.loadResponse, m_mapper);
+            break;
+        case RRType::Configure:
+            j = VampJson::fromVampResponse_Configure(rr.configurationResponse,
+                                                     m_mapper);
+            break;
+        case RRType::Process:
+            j = VampJson::fromVampResponse_Process
+                (rr.processResponse, m_mapper, serialisation);
+            break;
+        case RRType::Finish:
+            j = VampJson::fromVampResponse_Finish
+                (rr.finishResponse, m_mapper, serialisation);
+            break;
+        case RRType::NotValid:
+            break;
+        }
     }
 
     return j.dump();
 }
 
-vector<Vamp::HostExt::PluginStaticData>
+Vamp::HostExt::ListResponse
 VamPipePluginLibrary::listPluginData() const
 {
-    vector<Vamp::HostExt::PluginStaticData> data;
+    Vamp::HostExt::ListResponse resp;
     for (auto a: m_adapters) {
-	data.push_back(a.second->getStaticData());
+	resp.pluginData.push_back(a.second->getStaticData());
     }
-    return data;
+    return resp;
 }
 
 Vamp::HostExt::LoadResponse
@@ -209,7 +219,8 @@
 
         Vamp::Plugin *plugin = m_mapper.handleToPlugin(pluginHandle);
         Vamp::RealTime timestamp(sec, nsec);
-        
+
+        response.processResponse.plugin = plugin;
         response.processResponse.features = plugin->process(inputBuffers, timestamp);
         response.success = true;
 
@@ -293,6 +304,7 @@
 		fbuffers[i] = preq.inputBuffers[i].data();
 	    }
 
+            response.processResponse.plugin = preq.plugin;
 	    response.processResponse.features =
                 preq.plugin->process(fbuffers, preq.timestamp);
 	    response.success = true;
@@ -303,13 +315,14 @@
 
 	case RRType::Finish:
 	{
-	    auto h = m_mapper.pluginToHandle(request.finishPlugin);
-
+            response.finishResponse.plugin = request.finishRequest.plugin;
 	    response.finishResponse.features =
-		request.finishPlugin->getRemainingFeatures();
+		request.finishRequest.plugin->getRemainingFeatures();
 	    
-	    m_mapper.removePlugin(h);
-	    delete request.finishPlugin;
+            // We do not delete the plugin here -- we need it in the
+            // mapper when converting the features. It gets deleted
+            // below, after the writeResponse() call.
+	
 	    response.success = true;
 	    break;
 	}
@@ -318,7 +331,15 @@
 	    break;
 	}
     
-	return writeResponse(response);
+	string rstr = writeResponse(response);
+
+        if (request.type == RRType::Finish) {
+            auto h = m_mapper.pluginToHandle(request.finishRequest.plugin);
+            m_mapper.removePlugin(h);
+            delete request.finishRequest.plugin;
+        }
+
+        return rstr;
 
     } catch (const std::exception &e) {
 	return VampJson::fromException(e, request.type).dump();
--- a/VamPipePluginLibrary.h	Fri Sep 16 10:14:38 2016 +0100
+++ b/VamPipePluginLibrary.h	Mon Sep 19 14:48:43 2016 +0100
@@ -74,13 +74,14 @@
     RequestOrResponse readRequest(std::string req);
     std::string writeResponse(const RequestOrResponse &resp) const;
 
-    //!!! no type for this in RequestResponse.h in vamp sdk, should there be?
-    std::vector<Vamp::HostExt::PluginStaticData> listPluginData() const;
+    Vamp::HostExt::ListResponse listPluginData() const;
     Vamp::HostExt::LoadResponse loadPlugin(Vamp::HostExt::LoadRequest r) const;
     Vamp::HostExt::ConfigurationResponse configurePlugin(Vamp::HostExt::
-							 ConfigurationRequest r) const;
+							 ConfigurationRequest r)
+        const;
 
-    std::map<std::string, VamPipeAdapterInterface *> m_adapters; // pluginKey -> adapter
+    // map from pluginKey -> adapter
+    std::map<std::string, VamPipeAdapterInterface *> m_adapters;
     CountingPluginHandleMapper m_mapper;
     bool m_useBase64;
 };