Mercurial > hg > vamp-plugin-sdk
diff vamp-sdk/hostext/PluginChannelAdapter.cpp @ 197:fe30a25ee4f8
* Add processInterleaved to PluginChannelAdapter
author | cannam |
---|---|
date | Tue, 07 Oct 2008 21:07:04 +0000 |
parents | 64697dca0d48 |
children |
line wrap: on
line diff
--- a/vamp-sdk/hostext/PluginChannelAdapter.cpp Tue Oct 07 20:07:17 2008 +0000 +++ b/vamp-sdk/hostext/PluginChannelAdapter.cpp Tue Oct 07 21:07:04 2008 +0000 @@ -49,6 +49,7 @@ bool initialise(size_t channels, size_t stepSize, size_t blockSize); FeatureSet process(const float *const *inputBuffers, RealTime timestamp); + FeatureSet processInterleaved(const float *inputBuffers, RealTime timestamp); protected: Plugin *m_plugin; @@ -56,6 +57,7 @@ size_t m_inputChannels; size_t m_pluginChannels; float **m_buffer; + float **m_deinterleave; const float **m_forwardPtrs; }; @@ -83,12 +85,20 @@ return m_impl->process(inputBuffers, timestamp); } +PluginChannelAdapter::FeatureSet +PluginChannelAdapter::processInterleaved(const float *inputBuffers, + RealTime timestamp) +{ + return m_impl->processInterleaved(inputBuffers, timestamp); +} + PluginChannelAdapter::Impl::Impl(Plugin *plugin) : m_plugin(plugin), m_blockSize(0), m_inputChannels(0), m_pluginChannels(0), m_buffer(0), + m_deinterleave(0), m_forwardPtrs(0) { } @@ -109,6 +119,14 @@ m_buffer = 0; } + if (m_deinterleave) { + for (size_t i = 0; i < m_inputChannels; ++i) { + delete[] m_deinterleave[i]; + } + delete[] m_deinterleave; + m_deinterleave = 0; + } + if (m_forwardPtrs) { delete[] m_forwardPtrs; m_forwardPtrs = 0; @@ -174,6 +192,26 @@ } PluginChannelAdapter::FeatureSet +PluginChannelAdapter::Impl::processInterleaved(const float *inputBuffers, + RealTime timestamp) +{ + if (!m_deinterleave) { + m_deinterleave = new float *[m_inputChannels]; + for (size_t i = 0; i < m_inputChannels; ++i) { + m_deinterleave[i] = new float[m_blockSize]; + } + } + + for (size_t i = 0; i < m_inputChannels; ++i) { + for (size_t j = 0; j < m_blockSize; ++j) { + m_deinterleave[i][j] = inputBuffers[j * m_inputChannels + i]; + } + } + + return process(m_deinterleave, timestamp); +} + +PluginChannelAdapter::FeatureSet PluginChannelAdapter::Impl::process(const float *const *inputBuffers, RealTime timestamp) {