PluginChannelAdapter.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "PluginChannelAdapter.h"
00038
00039 namespace Vamp {
00040
00041 namespace HostExt {
00042
00043 class PluginChannelAdapter::Impl
00044 {
00045 public:
00046 Impl(Plugin *plugin);
00047 ~Impl();
00048
00049 bool initialise(size_t channels, size_t stepSize, size_t blockSize);
00050
00051 FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
00052
00053 protected:
00054 Plugin *m_plugin;
00055 size_t m_blockSize;
00056 size_t m_inputChannels;
00057 size_t m_pluginChannels;
00058 float **m_buffer;
00059 const float **m_forwardPtrs;
00060 };
00061
00062 PluginChannelAdapter::PluginChannelAdapter(Plugin *plugin) :
00063 PluginWrapper(plugin)
00064 {
00065 m_impl = new Impl(plugin);
00066 }
00067
00068 PluginChannelAdapter::~PluginChannelAdapter()
00069 {
00070 delete m_impl;
00071 }
00072
00073 bool
00074 PluginChannelAdapter::initialise(size_t channels, size_t stepSize, size_t blockSize)
00075 {
00076 return m_impl->initialise(channels, stepSize, blockSize);
00077 }
00078
00079 PluginChannelAdapter::FeatureSet
00080 PluginChannelAdapter::process(const float *const *inputBuffers,
00081 RealTime timestamp)
00082 {
00083 return m_impl->process(inputBuffers, timestamp);
00084 }
00085
00086 PluginChannelAdapter::Impl::Impl(Plugin *plugin) :
00087 m_plugin(plugin),
00088 m_blockSize(0),
00089 m_inputChannels(0),
00090 m_pluginChannels(0),
00091 m_buffer(0),
00092 m_forwardPtrs(0)
00093 {
00094 }
00095
00096 PluginChannelAdapter::Impl::~Impl()
00097 {
00098
00099
00100 if (m_buffer) {
00101 if (m_inputChannels > m_pluginChannels) {
00102 delete[] m_buffer[0];
00103 } else {
00104 for (size_t i = 0; i < m_pluginChannels - m_inputChannels; ++i) {
00105 delete[] m_buffer[i];
00106 }
00107 }
00108 delete[] m_buffer;
00109 m_buffer = 0;
00110 }
00111
00112 if (m_forwardPtrs) {
00113 delete[] m_forwardPtrs;
00114 m_forwardPtrs = 0;
00115 }
00116 }
00117
00118 bool
00119 PluginChannelAdapter::Impl::initialise(size_t channels, size_t stepSize, size_t blockSize)
00120 {
00121 m_blockSize = blockSize;
00122
00123 size_t minch = m_plugin->getMinChannelCount();
00124 size_t maxch = m_plugin->getMaxChannelCount();
00125
00126 m_inputChannels = channels;
00127
00128 if (m_inputChannels < minch) {
00129
00130 m_forwardPtrs = new const float *[minch];
00131
00132 if (m_inputChannels > 1) {
00133
00134
00135 m_buffer = new float*[minch - channels];
00136 for (size_t i = 0; i < minch; ++i) {
00137 m_buffer[i] = new float[blockSize];
00138 for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (size_t weywordflow">for (