Mercurial > hg > piper-vamp-js
changeset 95:5bc28c888d9a
Merge from branch outputid-string-in-featureset
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 19 Sep 2016 14:48:43 +0100 |
parents | fb3912e09acf (current diff) a97aae321809 (diff) |
children | 514ea085c63a |
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; };