comparison VamPipeAdapter.h @ 88:6c4b43298968

Introduce a new layer to abstract away plugin construction, so plugins needing more constructor arguments can easily be dealt with
author Chris Cannam <c.cannam@qmul.ac.uk>
date Wed, 14 Sep 2016 17:58:41 +0100
parents 967b0619b090
children
comparison
equal deleted inserted replaced
87:2fbefc82d460 88:6c4b43298968
43 #include <vamp-hostsdk/PluginBufferingAdapter.h> 43 #include <vamp-hostsdk/PluginBufferingAdapter.h>
44 #include <vamp-hostsdk/PluginChannelAdapter.h> 44 #include <vamp-hostsdk/PluginChannelAdapter.h>
45 45
46 namespace vampipe { 46 namespace vampipe {
47 47
48 class VamPipeAdapterBase 48 class VamPipeAdapterInterface
49 { 49 {
50 public: 50 public:
51 virtual Vamp::HostExt::PluginStaticData getStaticData() const = 0; 51 virtual Vamp::HostExt::PluginStaticData getStaticData() const = 0;
52 virtual Vamp::HostExt::LoadResponse loadPlugin(Vamp::HostExt::LoadRequest r) const = 0; 52 virtual Vamp::HostExt::LoadResponse loadPlugin(Vamp::HostExt::LoadRequest r) const = 0;
53 virtual Vamp::Plugin *createPlugin(float inputSampleRate) const = 0;
53 }; 54 };
54 55
55 template <typename P> 56 template <typename P>
56 class VamPipeAdapter : public VamPipeAdapterBase 57 class VamPipeAdapterBase : public VamPipeAdapterInterface
57 { 58 {
58 const int adaptInputDomain = 0x01; 59 const int adaptInputDomain = 0x01;
59 const int adaptChannelCount = 0x02; 60 const int adaptChannelCount = 0x02;
60 const int adaptBufferSize = 0x04; 61 const int adaptBufferSize = 0x04;
62
63 protected:
64 VamPipeAdapterBase(std::string libname) : m_soname(libname) { }
61 65
62 public: 66 public:
63 VamPipeAdapter(std::string libname) : 67 virtual Vamp::Plugin *createPlugin(float inputSampleRate) const = 0;
64 m_soname(libname) { }
65 68
66 virtual Vamp::HostExt::PluginStaticData getStaticData() const { 69 virtual Vamp::HostExt::PluginStaticData getStaticData() const {
67 P p(44100.f); 70 Vamp::Plugin *p = createPlugin(44100.f);
68 return Vamp::HostExt::PluginStaticData::fromPlugin 71 auto data = Vamp::HostExt::PluginStaticData::fromPlugin
69 (m_soname + ":" + p.getIdentifier(), 72 (m_soname + ":" + p->getIdentifier(),
70 {}, //!!! todo: category - tricky one that 73 {}, //!!! todo: category - tricky one that
71 &p); 74 p);
75 delete p;
76 return data;
72 } 77 }
73 78
74 virtual Vamp::HostExt::LoadResponse loadPlugin(Vamp::HostExt:: 79 virtual Vamp::HostExt::LoadResponse loadPlugin(Vamp::HostExt::
75 LoadRequest r) const { 80 LoadRequest r) const {
76 81
77 // We assume the caller has guaranteed that the request is for 82 // We assume the caller has guaranteed that the request is for
78 // the correct plugin (so we don't have to check the plugin 83 // the correct plugin (so we don't have to check the plugin
79 // key field here) 84 // key field here)
80 85
81 Vamp::Plugin *p = new P(r.inputSampleRate); 86 Vamp::Plugin *p = createPlugin(r.inputSampleRate);
82 87
83 if (r.adapterFlags & adaptInputDomain) { 88 if (r.adapterFlags & adaptInputDomain) {
84 if (p->getInputDomain() == Vamp::Plugin::FrequencyDomain) { 89 if (p->getInputDomain() == Vamp::Plugin::FrequencyDomain) {
85 p = new Vamp::HostExt::PluginInputDomainAdapter(p); 90 p = new Vamp::HostExt::PluginInputDomainAdapter(p);
86 } 91 }
118 123
119 private: 124 private:
120 std::string m_soname; 125 std::string m_soname;
121 }; 126 };
122 127
128 template <typename P>
129 class VamPipeAdapter : public VamPipeAdapterBase<P>
130 {
131 public:
132 VamPipeAdapter(std::string libname) : VamPipeAdapterBase<P>(libname) { }
133
134 virtual Vamp::Plugin *createPlugin(float inputSampleRate) const {
135 return new P(inputSampleRate);
136 }
137 };
138
123 } 139 }
124 140
125 #endif 141 #endif
126 142