changeset 23:40da19b655a7 outputid-string-in-featureset

Update adapter etc for feature set strings
author Chris Cannam
date Fri, 16 Sep 2016 16:28:47 +0100
parents 922c3381cb20
children 2df80eb3e962
files VamPipePluginLibrary.cpp
diffstat 1 files changed, 44 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/VamPipePluginLibrary.cpp	Fri Sep 16 10:14:38 2016 +0100
+++ b/VamPipePluginLibrary.cpp	Fri Sep 16 16:28:47 2016 +0100
@@ -123,25 +123,34 @@
          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);
+            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();
@@ -209,7 +218,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 +303,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 +314,14 @@
 
 	case RRType::Finish:
 	{
-	    auto h = m_mapper.pluginToHandle(request.finishPlugin);
-
+            response.finishResponse.plugin = request.finishPlugin;
 	    response.finishResponse.features =
 		request.finishPlugin->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 +330,15 @@
 	    break;
 	}
     
-	return writeResponse(response);
+	string rstr = writeResponse(response);
+
+        if (request.type == RRType::Finish) {
+            auto h = m_mapper.pluginToHandle(request.finishPlugin);
+            m_mapper.removePlugin(h);
+            delete request.finishPlugin;
+        }
+
+        return rstr;
 
     } catch (const std::exception &e) {
 	return VampJson::fromException(e, request.type).dump();