Mercurial > hg > piper-cpp
changeset 191:79c64ff2610b
Test setup for testing PluginCache caches framing sizes across init calls.
author | Lucas Thompson <dev@lucas.im> |
---|---|
date | Tue, 07 Feb 2017 16:35:16 +0000 |
parents | 70b0f1f9e039 |
children | bc35e19f3345 |
files | test/vamp-client/tst_PluginStub.cpp |
diffstat | 1 files changed, 119 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/test/vamp-client/tst_PluginStub.cpp Tue Feb 07 11:07:17 2017 +0000 +++ b/test/vamp-client/tst_PluginStub.cpp Tue Feb 07 16:35:16 2017 +0000 @@ -1,5 +1,123 @@ #include "catch/catch.hpp" +#include "vamp-client/Loader.h" +#include "vamp-client/PluginClient.h" +#include "vamp-client/PluginStub.h" +#include "vamp-support/RequestResponse.h" +#include <vector> -TEST_CASE("Configure plugin with parameter dependent preferred framing sizes") { +using namespace piper_vamp; +using namespace piper_vamp::client; +using AudioBuffer = std::vector<std::vector<float>>; +// This stub mimicks the interaction with a Piper server +// Here we only need to implement the configure method +// due to testing only the initialise implemention of PluginStub +class StubClient : public PluginClient +{ +public: + StubClient(PluginStaticData staticData) : m_staticData(staticData) {} + + ConfigurationResponse + configure(PluginStub* plugin, + PluginConfiguration config) override + { + const float scale = plugin->getParameter("framing-scale"); + ConfigurationResponse cr; + cr.plugin = plugin; + + // we want to return different framing sizes + // than config provides + // there isn't really any need to be doing this with a plugin param + cr.framing.blockSize = config.framing.stepSize * scale; + cr.framing.stepSize = config.framing.blockSize * scale; + + + // just return some outputs anyway + // to avoid a failure case we are not testing here. + Vamp::Plugin::OutputDescriptor output; + const auto basic = m_staticData.basicOutputInfo[0]; + output.identifier = basic.identifier; + output.name = basic.name; + output.description = basic.description; + cr.outputs = {output}; + return cr; + } + + Vamp::Plugin::FeatureSet + process(PluginStub* /*plugin*/, + AudioBuffer /*channels*/, + Vamp::RealTime /*timestamp*/) override + { + return {}; + } + + Vamp::Plugin::FeatureSet + finish(PluginStub* /*plugin*/) override + { + return {}; + } + + void + reset(PluginStub* /*plugin*/, PluginConfiguration /*config*/) override + {} +private: + PluginStaticData m_staticData; +}; + + +TEST_CASE("Init plugin with parameter dependent preferred framing sizes") { + + PluginConfiguration defaultConfig; + defaultConfig.channelCount = 1; + defaultConfig.parameterValues = {}; + defaultConfig.framing.blockSize = 1024; + defaultConfig.framing.stepSize = 512; + defaultConfig.parameterValues = {{"framing-scale", 1.0}}; + + Vamp::PluginBase::ParameterDescriptor stubParam; + stubParam.identifier = "framing-scale"; + stubParam.name = "Framing Scale Factor"; + stubParam.description = "Scales the preferred framing sizes"; + stubParam.maxValue = 2.0; + + PluginStaticData staticData; + staticData.pluginKey = "stub"; + staticData.basic = {"stub:param-init", "Stub", "Testing init"}; + staticData.maker = "Lucas Thompson"; + staticData.copyright = "GPL"; + staticData.pluginVersion = 1; + staticData.category = {"Test"}; + staticData.minChannelCount = 1; + staticData.maxChannelCount = 1; + staticData.parameters = {stubParam}; + staticData.inputDomain = Vamp::Plugin::InputDomain::TimeDomain; + staticData.basicOutputInfo = {{"output", "NA", "Not real"}}; + + StubClient stub {staticData}; + + PluginStub vampPiperAdapter { + &stub, + "stub", // plugin key + 44100.0, // sample rate + 0, // adapter flags, don't care here + staticData, + defaultConfig + }; + + vampPiperAdapter.setParameter("framing-scale", 2.0); + // setup + REQUIRE( + vampPiperAdapter.initialise( + 1, + vampPiperAdapter.getPreferredStepSize(), + vampPiperAdapter.getPreferredBlockSize() + ) == false + ); + REQUIRE( + vampPiperAdapter.initialise( + 1, + vampPiperAdapter.getPreferredStepSize(), + vampPiperAdapter.getPreferredBlockSize() + ) + ); }