Mercurial > hg > piper-cpp
changeset 13:1d13354ddc44
Build & read config request/response etc
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Tue, 17 May 2016 16:18:24 +0100 |
parents | 828930f9a65d |
children | c35d0909a74e |
files | capnproto/VampnProto.h json/VampJson.h |
diffstat | 2 files changed, 88 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/capnproto/VampnProto.h Tue May 17 13:52:51 2016 +0100 +++ b/capnproto/VampnProto.h Tue May 17 16:18:24 2016 +0100 @@ -142,6 +142,7 @@ od.hasFixedBinCount = r.getHasFixedBinCount(); if (od.hasFixedBinCount) { od.binCount = r.getBinCount(); + od.binNames.clear(); for (const auto &n: r.getBinNames()) { od.binNames.push_back(n); } @@ -201,6 +202,7 @@ pd.quantizeStep = r.getQuantizeStep(); } + pd.valueNames.clear(); for (const auto &n: r.getValueNames()) { pd.valueNames.push_back(n); } @@ -248,6 +250,7 @@ f.label = r.getLabel(); + f.values.clear(); for (auto v: r.getValues()) { f.values.push_back(v); } @@ -275,6 +278,7 @@ readFeatureSet(Vamp::Plugin::FeatureSet &fs, const FeatureSet::Reader &r) { + fs.clear(); for (const auto &p: r.getFeaturePairs()) { Vamp::Plugin::FeatureList vfl; for (const auto &f: p.getFeatures()) { @@ -366,6 +370,7 @@ d.copyright = r.getCopyright(); d.pluginVersion = r.getPluginVersion(); + d.category.clear(); for (auto c: r.getCategory()) { d.category.push_back(c); } @@ -373,18 +378,21 @@ d.minChannelCount = r.getMinChannelCount(); d.maxChannelCount = r.getMaxChannelCount(); + d.parameters.clear(); for (auto p: r.getParameters()) { Vamp::Plugin::ParameterDescriptor pd; readParameterDescriptor(pd, p); d.parameters.push_back(pd); } + d.programs.clear(); for (auto p: r.getPrograms()) { d.programs.push_back(p); } d.inputDomain = toInputDomain(r.getInputDomain()); + d.basicOutputInfo.clear(); for (auto o: r.getBasicOutputInfo()) { Vamp::HostExt::PluginStaticData::Basic b; readBasicDescriptor(b, o); @@ -493,6 +501,50 @@ readPluginConfiguration(resp.defaultConfiguration, r.getDefaultConfiguration()); } + + static void + buildConfigurationRequest(ConfigurationRequest::Builder &b, + const Vamp::HostExt::ConfigurationRequest &cr, + PluginHandleMapper &mapper) { + + b.setPluginHandle(mapper.pluginToHandle(cr.plugin)); + auto c = b.initConfiguration(); + buildPluginConfiguration(c, cr.configuration); + } + + static void + readConfigurationRequest(Vamp::HostExt::ConfigurationRequest &cr, + const ConfigurationRequest::Reader &r, + PluginHandleMapper &mapper) { + + auto h = r.getPluginHandle(); + cr.plugin = mapper.handleToPlugin(h); + auto c = r.getConfiguration(); + readPluginConfiguration(cr.configuration, c); + } + + static void + buildConfigurationResponse(ConfigurationResponse::Builder &b, + const Vamp::HostExt::ConfigurationResponse &cr) { + + auto olist = b.initOutputs(cr.outputs.size()); + for (size_t i = 0; i < cr.outputs.size(); ++i) { + auto od = olist[i]; + buildOutputDescriptor(od, cr.outputs[i]); + } + } + + static void + readConfigurationResponse(Vamp::HostExt::ConfigurationResponse &cr, + const ConfigurationResponse::Reader &r) { + + cr.outputs.clear(); + for (const auto &o: r.getOutputs()) { + Vamp::Plugin::OutputDescriptor desc; + readOutputDescriptor(desc, o); + cr.outputs.push_back(desc); + } + } }; }
--- a/json/VampJson.h Tue May 17 13:52:51 2016 +0100 +++ b/json/VampJson.h Tue May 17 16:18:24 2016 +0100 @@ -701,21 +701,52 @@ } static json11::Json + fromConfigurationRequest(const Vamp::HostExt::ConfigurationRequest &cr, + PluginHandleMapper &mapper) { + + json11::Json::object jo; + + jo["pluginHandle"] = mapper.pluginToHandle(cr.plugin); + jo["configuration"] = fromPluginConfiguration(cr.configuration); + + return json11::Json(jo); + } + + static Vamp::HostExt::ConfigurationRequest + toConfigurationRequest(json11::Json j, + PluginHandleMapper &mapper) { + + std::string err; + + if (!j.has_shape({ + { "pluginHandle", json11::Json::NUMBER }, + { "configuration", json11::Json::OBJECT } }, err)) { + throw Failure("malformed configuration request: " + err); + } + + Vamp::HostExt::ConfigurationRequest cr; + cr.plugin = mapper.handleToPlugin(j["pluginHandle"].int_value()); + cr.configuration = toPluginConfiguration(j["configuration"]); + return cr; + } + + static json11::Json fromConfigurationResponse(const Vamp::HostExt::ConfigurationResponse &cr) { - json11::Json::object jout; + json11::Json::object jo; json11::Json::array outs; for (auto &d: cr.outputs) { outs.push_back(fromOutputDescriptor(d)); } - jout["outputList"] = outs; + jo["outputList"] = outs; - return json11::Json(jout); + return json11::Json(jo); } - static Vamp::HostExt::ConfigurationResponse toConfigurationResponse(json11::Json j) { - + static Vamp::HostExt::ConfigurationResponse + toConfigurationResponse(json11::Json j) { + Vamp::HostExt::ConfigurationResponse cr; if (!j["outputList"].is_array()) {