# HG changeset patch # User cannam # Date 1181124036 0 # Node ID fd58037b4a7b20b39027c0b6750a5e7ab8f60eb0 # Parent 3456fe86d385ba11489651961e2d0e62602f283e * use m_impl for channel and input domain adapters as well diff -r 3456fe86d385 -r fd58037b4a7b vamp-sdk/hostext/PluginChannelAdapter.cpp --- a/vamp-sdk/hostext/PluginChannelAdapter.cpp Wed Jun 06 09:49:50 2007 +0000 +++ b/vamp-sdk/hostext/PluginChannelAdapter.cpp Wed Jun 06 10:00:36 2007 +0000 @@ -40,8 +40,51 @@ namespace HostExt { +class PluginChannelAdapter::Impl +{ +public: + Impl(Plugin *plugin); + ~Impl(); + + bool initialise(size_t channels, size_t stepSize, size_t blockSize); + + FeatureSet process(const float *const *inputBuffers, RealTime timestamp); + +protected: + Plugin *m_plugin; + size_t m_blockSize; + size_t m_inputChannels; + size_t m_pluginChannels; + float **m_buffer; + const float **m_forwardPtrs; +}; + PluginChannelAdapter::PluginChannelAdapter(Plugin *plugin) : - PluginWrapper(plugin), + PluginWrapper(plugin) +{ + m_impl = new Impl(plugin); +} + +PluginChannelAdapter::~PluginChannelAdapter() +{ + delete m_impl; +} + +bool +PluginChannelAdapter::initialise(size_t channels, size_t stepSize, size_t blockSize) +{ + return m_impl->initialise(channels, stepSize, blockSize); +} + +PluginChannelAdapter::FeatureSet +PluginChannelAdapter::process(const float *const *inputBuffers, + RealTime timestamp) +{ + return m_impl->process(inputBuffers, timestamp); +} + +PluginChannelAdapter::Impl::Impl(Plugin *plugin) : + m_plugin(plugin), m_blockSize(0), m_inputChannels(0), m_pluginChannels(0), @@ -50,8 +93,10 @@ { } -PluginChannelAdapter::~PluginChannelAdapter() +PluginChannelAdapter::Impl::~Impl() { + // the adapter will delete the plugin + if (m_buffer) { if (m_inputChannels > m_pluginChannels) { delete[] m_buffer[0]; @@ -71,7 +116,7 @@ } bool -PluginChannelAdapter::initialise(size_t channels, size_t stepSize, size_t blockSize) +PluginChannelAdapter::Impl::initialise(size_t channels, size_t stepSize, size_t blockSize) { m_blockSize = blockSize; @@ -129,8 +174,8 @@ } PluginChannelAdapter::FeatureSet -PluginChannelAdapter::process(const float *const *inputBuffers, - RealTime timestamp) +PluginChannelAdapter::Impl::process(const float *const *inputBuffers, + RealTime timestamp) { // std::cerr << "PluginChannelAdapter::process: " << m_inputChannels << " -> " << m_pluginChannels << " channels" << std::endl; diff -r 3456fe86d385 -r fd58037b4a7b vamp-sdk/hostext/PluginChannelAdapter.h --- a/vamp-sdk/hostext/PluginChannelAdapter.h Wed Jun 06 09:49:50 2007 +0000 +++ b/vamp-sdk/hostext/PluginChannelAdapter.h Wed Jun 06 10:00:36 2007 +0000 @@ -113,11 +113,8 @@ FeatureSet process(const float *const *inputBuffers, RealTime timestamp); protected: - size_t m_blockSize; - size_t m_inputChannels; - size_t m_pluginChannels; - float **m_buffer; - const float **m_forwardPtrs; + class Impl; + Impl *m_impl; }; } diff -r 3456fe86d385 -r fd58037b4a7b vamp-sdk/hostext/PluginInputDomainAdapter.cpp --- a/vamp-sdk/hostext/PluginInputDomainAdapter.cpp Wed Jun 06 09:49:50 2007 +0000 +++ b/vamp-sdk/hostext/PluginInputDomainAdapter.cpp Wed Jun 06 10:00:36 2007 +0000 @@ -42,20 +42,102 @@ namespace HostExt { +class PluginInputDomainAdapter::Impl +{ +public: + Impl(Plugin *plugin, float inputSampleRate); + ~Impl(); + + bool initialise(size_t channels, size_t stepSize, size_t blockSize); + + size_t getPreferredStepSize() const; + size_t getPreferredBlockSize() const; + + FeatureSet process(const float *const *inputBuffers, RealTime timestamp); + +protected: + Plugin *m_plugin; + float m_inputSampleRate; + size_t m_channels; + size_t m_blockSize; + float **m_freqbuf; + double *m_ri; + double *m_ro; + double *m_io; + + void fft(unsigned int n, bool inverse, + double *ri, double *ii, double *ro, double *io); + + size_t makeBlockSizeAcceptable(size_t) const; +}; + PluginInputDomainAdapter::PluginInputDomainAdapter(Plugin *plugin) : - PluginWrapper(plugin), + PluginWrapper(plugin) +{ + m_impl = new Impl(plugin, m_inputSampleRate); +} + +PluginInputDomainAdapter::~PluginInputDomainAdapter() +{ + delete m_impl; +} + +bool +PluginInputDomainAdapter::initialise(size_t channels, size_t stepSize, size_t blockSize) +{ + return m_impl->initialise(channels, stepSize, blockSize); +} + +Plugin::InputDomain +PluginInputDomainAdapter::getInputDomain() const +{ + return TimeDomain; +} + +size_t +PluginInputDomainAdapter::getPreferredStepSize() const +{ + return m_impl->getPreferredStepSize(); +} + +size_t +PluginInputDomainAdapter::getPreferredBlockSize() const +{ + return m_impl->getPreferredBlockSize(); +} + +Plugin::FeatureSet +PluginInputDomainAdapter::process(const float *const *inputBuffers, RealTime timestamp) +{ + return m_impl->process(inputBuffers, timestamp); +} + + PluginInputDomainAdapter::Impl::Impl(Plugin *plugin, float inputSampleRate) : + m_plugin(plugin), + m_inputSampleRate(inputSampleRate), m_channels(0), m_blockSize(0), m_freqbuf(0) { } -PluginInputDomainAdapter::~PluginInputDomainAdapter() +PluginInputDomainAdapter::Impl::~Impl() { + // the adapter will delete the plugin + + if (m_channels > 0) { + for (size_t c = 0; c < m_channels; ++c) { + delete[] m_freqbuf[c]; + } + delete[] m_freqbuf; + delete[] m_ri; + delete[] m_ro; + delete[] m_io; + } } bool -PluginInputDomainAdapter::initialise(size_t channels, size_t stepSize, size_t blockSize) +PluginInputDomainAdapter::Impl::initialise(size_t channels, size_t stepSize, size_t blockSize) { if (m_plugin->getInputDomain() == TimeDomain) { @@ -66,12 +148,12 @@ } if (blockSize < 2) { - std::cerr << "ERROR: Vamp::HostExt::PluginInputDomainAdapter::initialise: blocksize < 2 not supported" << std::endl; + std::cerr << "ERROR: Vamp::HostExt::PluginInputDomainAdapter::Impl::initialise: blocksize < 2 not supported" << std::endl; return false; } if (blockSize & (blockSize-1)) { - std::cerr << "ERROR: Vamp::HostExt::PluginInputDomainAdapter::initialise: non-power-of-two\nblocksize " << blockSize << " not supported" << std::endl; + std::cerr << "ERROR: Vamp::HostExt::PluginInputDomainAdapter::Impl::initialise: non-power-of-two\nblocksize " << blockSize << " not supported" << std::endl; return false; } @@ -99,14 +181,8 @@ return m_plugin->initialise(channels, stepSize, blockSize); } -Plugin::InputDomain -PluginInputDomainAdapter::getInputDomain() const -{ - return TimeDomain; -} - size_t -PluginInputDomainAdapter::getPreferredStepSize() const +PluginInputDomainAdapter::Impl::getPreferredStepSize() const { size_t step = m_plugin->getPreferredStepSize(); @@ -118,7 +194,7 @@ } size_t -PluginInputDomainAdapter::getPreferredBlockSize() const +PluginInputDomainAdapter::Impl::getPreferredBlockSize() const { size_t block = m_plugin->getPreferredBlockSize(); @@ -134,11 +210,11 @@ } size_t -PluginInputDomainAdapter::makeBlockSizeAcceptable(size_t blockSize) const +PluginInputDomainAdapter::Impl::makeBlockSizeAcceptable(size_t blockSize) const { if (blockSize < 2) { - std::cerr << "WARNING: Vamp::HostExt::PluginInputDomainAdapter::initialise: blocksize < 2 not" << std::endl + std::cerr << "WARNING: Vamp::HostExt::PluginInputDomainAdapter::Impl::initialise: blocksize < 2 not" << std::endl << "supported, increasing from " << blockSize << " to 2" << std::endl; blockSize = 2; @@ -163,7 +239,7 @@ nearest = nearest*2; } - std::cerr << "WARNING: Vamp::HostExt::PluginInputDomainAdapter::initialise: non-power-of-two\nblocksize " << blockSize << " not supported, using blocksize " << nearest << " instead" << std::endl; + std::cerr << "WARNING: Vamp::HostExt::PluginInputDomainAdapter::Impl::initialise: non-power-of-two\nblocksize " << blockSize << " not supported, using blocksize " << nearest << " instead" << std::endl; blockSize = nearest; } @@ -176,7 +252,8 @@ #endif Plugin::FeatureSet -PluginInputDomainAdapter::process(const float *const *inputBuffers, RealTime timestamp) +PluginInputDomainAdapter::Impl::process(const float *const *inputBuffers, + RealTime timestamp) { if (m_plugin->getInputDomain() == TimeDomain) { return m_plugin->process(inputBuffers, timestamp); @@ -259,8 +336,8 @@ } void -PluginInputDomainAdapter::fft(unsigned int n, bool inverse, - double *ri, double *ii, double *ro, double *io) +PluginInputDomainAdapter::Impl::fft(unsigned int n, bool inverse, + double *ri, double *ii, double *ro, double *io) { if (!ri || !ro || !io) return; diff -r 3456fe86d385 -r fd58037b4a7b vamp-sdk/hostext/PluginInputDomainAdapter.h --- a/vamp-sdk/hostext/PluginInputDomainAdapter.h Wed Jun 06 09:49:50 2007 +0000 +++ b/vamp-sdk/hostext/PluginInputDomainAdapter.h Wed Jun 06 10:00:36 2007 +0000 @@ -88,17 +88,8 @@ FeatureSet process(const float *const *inputBuffers, RealTime timestamp); protected: - size_t m_channels; - size_t m_blockSize; - float **m_freqbuf; - double *m_ri; - double *m_ro; - double *m_io; - - void fft(unsigned int n, bool inverse, - double *ri, double *ii, double *ro, double *io); - - size_t makeBlockSizeAcceptable(size_t) const; + class Impl; + Impl *m_impl; }; }