Mercurial > hg > piper-vamp-js
changeset 47:cedcaa258e22
Support "from" field in list request
author | Chris Cannam |
---|---|
date | Mon, 07 Nov 2016 14:49:05 +0000 |
parents | b780e56eebb4 |
children | 1ed825597b6f |
files | PiperAdapter.h PiperPluginLibrary.cpp PiperPluginLibrary.h |
diffstat | 3 files changed, 33 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/PiperAdapter.h Thu Oct 13 18:13:55 2016 +0100 +++ b/PiperAdapter.h Mon Nov 07 14:49:05 2016 +0000 @@ -48,6 +48,7 @@ class PiperAdapterInterface { public: + virtual std::string getLibraryName() const = 0; virtual piper_vamp::PluginStaticData getStaticData() const = 0; virtual piper_vamp::LoadResponse loadPlugin(piper_vamp::LoadRequest r) const = 0; virtual Vamp::Plugin *createPlugin(float inputSampleRate) const = 0; @@ -65,8 +66,12 @@ public: virtual Vamp::Plugin *createPlugin(float inputSampleRate) const = 0; + + virtual std::string getLibraryName() const override { + return m_soname; + } - virtual piper_vamp::PluginStaticData getStaticData() const { + virtual piper_vamp::PluginStaticData getStaticData() const override { Vamp::Plugin *p = createPlugin(44100.f); auto data = piper_vamp::PluginStaticData::fromPlugin (m_soname + ":" + p->getIdentifier(), @@ -76,7 +81,8 @@ return data; } - virtual piper_vamp::LoadResponse loadPlugin(piper_vamp::LoadRequest r) const { + virtual piper_vamp::LoadResponse loadPlugin(piper_vamp::LoadRequest r) + const override { // We assume the caller has guaranteed that the request is for // the correct plugin (so we don't have to check the plugin @@ -130,7 +136,7 @@ public: PiperAdapter(std::string libname) : PiperAdapterBase<P>(libname) { } - virtual Vamp::Plugin *createPlugin(float inputSampleRate) const { + virtual Vamp::Plugin *createPlugin(float inputSampleRate) const override { return new P(inputSampleRate); } };
--- a/PiperPluginLibrary.cpp Thu Oct 13 18:13:55 2016 +0100 +++ b/PiperPluginLibrary.cpp Mon Nov 07 14:49:05 2016 +0000 @@ -70,10 +70,24 @@ } ListResponse -PiperPluginLibrary::listPluginData() const +PiperPluginLibrary::listPluginData(ListRequest req) const { + bool filtered = !req.from.empty(); ListResponse resp; for (auto a: m_adapters) { + if (filtered) { + auto n = a.second->getLibraryName(); + bool found = false; + for (const auto &f: req.from) { + if (f == n) { + found = true; + break; + } + } + if (!found) { + continue; + } + } resp.available.push_back(a.second->getStaticData()); } return resp; @@ -189,8 +203,15 @@ switch (type) { case RRType::List: - rj = VampJson::fromRpcResponse_List(listPluginData(), id); + { + auto req = VampJson::toRpcRequest_List(j, err); + if (err != "") { + rj = VampJson::fromError(err, type, id); + } else { + rj = VampJson::fromRpcResponse_List(listPluginData(req), id); + } break; + } case RRType::Load: {
--- a/PiperPluginLibrary.h Thu Oct 13 18:13:55 2016 +0100 +++ b/PiperPluginLibrary.h Mon Nov 07 14:49:05 2016 +0000 @@ -69,7 +69,7 @@ std::string requestJsonImpl(std::string req); std::string processRawImpl(int, const float *const *, int, int); - piper_vamp::ListResponse listPluginData() const; + piper_vamp::ListResponse listPluginData(piper_vamp::ListRequest r) const; piper_vamp::LoadResponse loadPlugin(piper_vamp::LoadRequest r, std::string &err) const; piper_vamp::ConfigurationResponse configurePlugin(piper_vamp::ConfigurationRequest r,