diff VamPipePluginLibrary.cpp @ 81:5e6ff69b4209

Make base64/text selectable when serialising process and feature blocks; add base64 version as an output format for vampipe-convert; make VamPipePluginLibrary switch to returning base64 encoding as soon as it is fed any as input
author Chris Cannam <c.cannam@qmul.ac.uk>
date Thu, 08 Sep 2016 15:27:48 +0100
parents c2a90b45642e
children a313ce2577ea
line wrap: on
line diff
--- a/VamPipePluginLibrary.cpp	Wed Sep 07 16:38:24 2016 +0100
+++ b/VamPipePluginLibrary.cpp	Thu Sep 08 15:27:48 2016 +0100
@@ -64,7 +64,8 @@
     return j;
 }
 
-VamPipePluginLibrary::VamPipePluginLibrary(vector<VamPipeAdapterBase *> pp)
+VamPipePluginLibrary::VamPipePluginLibrary(vector<VamPipeAdapterBase *> pp) :
+    m_useBase64(false)
 {
     for (VamPipeAdapterBase *p: pp) {
 	string key = p->getStaticData().pluginKey;
@@ -73,7 +74,7 @@
 }
 
 RequestOrResponse
-VamPipePluginLibrary::readRequest(string req) const
+VamPipePluginLibrary::readRequest(string req)
 {
     RequestOrResponse rr;
     rr.direction = RequestOrResponse::Request;
@@ -82,6 +83,7 @@
 
     //!!! reduce, reduce
     rr.type = VampJson::getRequestResponseType(j);
+    VampJson::BufferSerialisation serialisation = VampJson::BufferSerialisation::Text;
 
     switch (rr.type) {
 
@@ -95,7 +97,7 @@
 	rr.configurationRequest = VampJson::toVampRequest_Configure(j, m_mapper);
 	break;
     case RRType::Process:
-	rr.processRequest = VampJson::toVampRequest_Process(j, m_mapper);
+	rr.processRequest = VampJson::toVampRequest_Process(j, m_mapper, serialisation);
 	break;
     case RRType::Finish:
 	rr.finishPlugin = VampJson::toVampRequest_Finish(j, m_mapper);
@@ -104,6 +106,10 @@
 	break;
     }
 
+    if (serialisation == VampJson::BufferSerialisation::Base64) {
+        m_useBase64 = true;
+    }
+    
     return rr;
 }
 
@@ -112,6 +118,11 @@
 {
     Json j;
 
+    VampJson::BufferSerialisation serialisation =
+        (m_useBase64 ?
+         VampJson::BufferSerialisation::Base64 :
+         VampJson::BufferSerialisation::Text);
+
     switch (rr.type) {
 
     case RRType::List:
@@ -124,10 +135,10 @@
 	j = VampJson::fromVampResponse_Configure(rr.configurationResponse);
 	break;
     case RRType::Process:
-	j = VampJson::fromVampResponse_Process(rr.processResponse);
+	j = VampJson::fromVampResponse_Process(rr.processResponse, serialisation);
 	break;
     case RRType::Finish:
-	j = VampJson::fromVampResponse_Finish(rr.finishResponse);
+	j = VampJson::fromVampResponse_Finish(rr.finishResponse, serialisation);
 	break;
     case RRType::NotValid:
 	break;
@@ -189,6 +200,7 @@
     try {
 	request = readRequest(req);
     } catch (const std::exception &e) {
+        std::cerr << "FAILURE" << std::endl;
 	return VampJson::fromException(e, RRType::NotValid).dump();
     }
 
@@ -253,7 +265,7 @@
 	    }
 
 	    response.processResponse.features =
-		preq.plugin->process(fbuffers, preq.timestamp);
+                preq.plugin->process(fbuffers, preq.timestamp);
 	    response.success = true;
 
 	    delete[] fbuffers;