annotate test/vamp-client/tst_PluginStub.cpp @ 218:ea8994465322

Rebuild these for capnp v0.6. But it would probably be better at this point not to commit them, as the main reason they are in the repo is because the compiler wasn't available for Visual Studio builds, and that's no longer the case.
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 09 May 2017 11:46:23 +0100
parents a69724686f0b
children 09753ad777db
rev   line source
dev@190 1 #include "catch/catch.hpp"
dev@191 2 #include "vamp-client/Loader.h"
dev@191 3 #include "vamp-client/PluginClient.h"
cannam@213 4 #include "vamp-client/PiperVampPlugin.h"
dev@191 5 #include "vamp-support/RequestResponse.h"
dev@191 6 #include <vector>
dev@190 7
dev@191 8 using namespace piper_vamp;
dev@191 9 using namespace piper_vamp::client;
dev@191 10 using AudioBuffer = std::vector<std::vector<float>>;
dev@190 11
dev@196 12 // This stub fakes the interaction with a Piper server
dev@191 13 // Here we only need to implement the configure method
cannam@213 14 // due to testing only the initialise implemention of PiperVampPlugin
dev@191 15 class StubClient : public PluginClient
dev@191 16 {
dev@191 17 public:
dev@191 18 StubClient(PluginStaticData staticData) : m_staticData(staticData) {}
dev@191 19
dev@191 20 ConfigurationResponse
cannam@213 21 configure(PiperVampPlugin* plugin,
dev@191 22 PluginConfiguration config) override
dev@191 23 {
dev@191 24 const float scale = plugin->getParameter("framing-scale");
dev@191 25 ConfigurationResponse cr;
dev@191 26 cr.plugin = plugin;
dev@191 27
dev@194 28 // we want to return different framing sizes than config provides
dev@191 29 // there isn't really any need to be doing this with a plugin param
dev@194 30 cr.framing.blockSize = config.framing.blockSize * scale;
dev@194 31 cr.framing.stepSize = config.framing.stepSize * scale;
dev@191 32
dev@191 33 // just return some outputs anyway
dev@191 34 // to avoid a failure case we are not testing here.
dev@191 35 Vamp::Plugin::OutputDescriptor output;
dev@191 36 const auto basic = m_staticData.basicOutputInfo[0];
dev@191 37 output.identifier = basic.identifier;
dev@191 38 output.name = basic.name;
dev@191 39 output.description = basic.description;
dev@191 40 cr.outputs = {output};
dev@191 41 return cr;
dev@191 42 }
dev@191 43
dev@191 44 Vamp::Plugin::FeatureSet
cannam@213 45 process(PiperVampPlugin* /*plugin*/,
dev@191 46 AudioBuffer /*channels*/,
dev@191 47 Vamp::RealTime /*timestamp*/) override
dev@191 48 {
dev@191 49 return {};
dev@191 50 }
dev@191 51
dev@191 52 Vamp::Plugin::FeatureSet
cannam@213 53 finish(PiperVampPlugin* /*plugin*/) override
dev@191 54 {
dev@191 55 return {};
dev@191 56 }
dev@191 57
dev@191 58 void
cannam@213 59 reset(PiperVampPlugin* /*plugin*/, PluginConfiguration /*config*/) override
dev@191 60 {}
dev@191 61 private:
dev@191 62 PluginStaticData m_staticData;
dev@191 63 };
dev@191 64
dev@191 65
dev@191 66 TEST_CASE("Init plugin with parameter dependent preferred framing sizes") {
dev@194 67 const std::size_t initialBlockSize = 1024;
dev@194 68 const std::size_t initialStepSize = 512;
dev@191 69 PluginConfiguration defaultConfig;
dev@191 70 defaultConfig.channelCount = 1;
dev@194 71 defaultConfig.framing.blockSize = initialBlockSize;
dev@194 72 defaultConfig.framing.stepSize = initialStepSize;
dev@191 73 defaultConfig.parameterValues = {{"framing-scale", 1.0}};
dev@191 74
dev@191 75 Vamp::PluginBase::ParameterDescriptor stubParam;
dev@191 76 stubParam.identifier = "framing-scale";
dev@191 77 stubParam.name = "Framing Scale Factor";
dev@191 78 stubParam.description = "Scales the preferred framing sizes";
dev@191 79 stubParam.maxValue = 2.0;
dev@191 80
dev@191 81 PluginStaticData staticData;
dev@191 82 staticData.pluginKey = "stub";
dev@202 83 staticData.basic = {"param-init", "Stub", "Testing init"};
dev@191 84 staticData.maker = "Lucas Thompson";
dev@191 85 staticData.copyright = "GPL";
dev@191 86 staticData.pluginVersion = 1;
dev@191 87 staticData.category = {"Test"};
dev@191 88 staticData.minChannelCount = 1;
dev@191 89 staticData.maxChannelCount = 1;
dev@191 90 staticData.parameters = {stubParam};
dev@191 91 staticData.inputDomain = Vamp::Plugin::InputDomain::TimeDomain;
dev@191 92 staticData.basicOutputInfo = {{"output", "NA", "Not real"}};
dev@191 93
dev@191 94 StubClient stub {staticData};
dev@191 95
cannam@213 96 PiperVampPlugin vampPiperAdapter {
dev@191 97 &stub,
dev@191 98 "stub", // plugin key
dev@191 99 44100.0, // sample rate
dev@191 100 0, // adapter flags, don't care here
dev@191 101 staticData,
dev@191 102 defaultConfig
dev@191 103 };
dev@191 104
dev@194 105 const auto initWithPreferredFraming = [&]() -> bool {
dev@194 106 return vampPiperAdapter.initialise(
dev@191 107 1,
dev@191 108 vampPiperAdapter.getPreferredStepSize(),
dev@191 109 vampPiperAdapter.getPreferredBlockSize()
dev@194 110 );
dev@194 111 };
dev@194 112
dev@202 113 const AudioBuffer monoAudio {
dev@202 114 std::vector<float>(vampPiperAdapter.getPreferredBlockSize())
dev@202 115 };
dev@202 116 const std::vector<const float*> channelPtrs {
dev@202 117 monoAudio[0].data()
dev@202 118 };
dev@202 119
dev@194 120 SECTION("Initialises with default parameters")
dev@194 121 {
dev@194 122 REQUIRE( initWithPreferredFraming() );
dev@194 123 }
dev@194 124
dev@194 125 SECTION("Fails to init when changing framing influencing parameter")
dev@194 126 {
dev@194 127 const float scalingFactor = 2.0;
dev@194 128 vampPiperAdapter.setParameter("framing-scale", scalingFactor);
dev@194 129 REQUIRE( initWithPreferredFraming() == false );
dev@194 130 const float configuredStepSize = vampPiperAdapter.getPreferredStepSize();
dev@194 131 const float configuredBlockSize = vampPiperAdapter.getPreferredBlockSize();
dev@194 132 REQUIRE( configuredStepSize == initialStepSize * scalingFactor );
dev@194 133 REQUIRE( configuredBlockSize == initialBlockSize * scalingFactor );
dev@194 134 }
dev@194 135
dev@194 136 SECTION("Cannot process after a failed init call (due to framing)")
dev@194 137 {
dev@194 138 const float scalingFactor = 2.0;
dev@194 139 vampPiperAdapter.setParameter("framing-scale", scalingFactor);
dev@194 140 REQUIRE( initWithPreferredFraming() == false );
dev@202 141 REQUIRE_THROWS( vampPiperAdapter.process(channelPtrs.data(), {}) );
dev@199 142 REQUIRE_THROWS( initWithPreferredFraming() );
dev@194 143 }
dev@194 144
dev@194 145 SECTION("Can process after correctly initialising framing")
dev@194 146 {
dev@194 147 const float scalingFactor = 2.0;
dev@194 148 vampPiperAdapter.setParameter("framing-scale", scalingFactor);
dev@194 149 REQUIRE( initWithPreferredFraming() == false );
dev@194 150 REQUIRE( initWithPreferredFraming() );
dev@194 151 REQUIRE( vampPiperAdapter.process(channelPtrs.data(), {}).empty() );
dev@194 152 }
dev@190 153 }