# HG changeset patch # User Chris Cannam # Date 1204135450 0 # Node ID 9b35a1731c3da754c2832bd115234e5030aa69a8 # Parent 9867f99e0bb7b2cf540e22c483a783304332c67e * Tolerable fixes to #1903062 and #1903046 diff -r 9867f99e0bb7 -r 9b35a1731c3d plugin/DSSIPluginInstance.cpp --- a/plugin/DSSIPluginInstance.cpp Fri Feb 15 15:15:29 2008 +0000 +++ b/plugin/DSSIPluginInstance.cpp Wed Feb 27 18:04:10 2008 +0000 @@ -972,11 +972,13 @@ } void -DSSIPluginInstance::run(const Vamp::RealTime &blockTime) +DSSIPluginInstance::run(const Vamp::RealTime &blockTime, size_t count) { static snd_seq_event_t localEventBuffer[EVENT_BUFFER_SIZE]; int evCount = 0; + if (count == 0) count = m_blockSize; + bool needLock = false; if (m_descriptor->select_program) needLock = true; @@ -998,7 +1000,7 @@ m_eventBuffer.skip(m_eventBuffer.getReadSpace()); m_haveLastEventSendTime = false; if (m_descriptor->LADSPA_Plugin->run) { - m_descriptor->LADSPA_Plugin->run(m_instanceHandle, m_blockSize); + m_descriptor->LADSPA_Plugin->run(m_instanceHandle, count); } else { for (size_t ch = 0; ch < m_audioPortsOut.size(); ++ch) { memset(m_outputBuffers[ch], 0, m_blockSize * sizeof(sample_t)); @@ -1039,7 +1041,7 @@ std::cerr << "Type: " << int(ev->type) << ", pitch: " << int(ev->data.note.note) << ", velocity: " << int(ev->data.note.velocity) << std::endl; #endif - if (frameOffset >= int(m_blockSize)) break; + if (frameOffset >= int(count)) break; if (frameOffset < 0) { frameOffset = 0; if (ev->type == SND_SEQ_EVENT_NOTEON) { @@ -1085,11 +1087,11 @@ << std::endl; #endif - m_descriptor->run_synth(m_instanceHandle, m_blockSize, + m_descriptor->run_synth(m_instanceHandle, count, localEventBuffer, evCount); #ifdef DEBUG_DSSI_PROCESS -// for (int i = 0; i < m_blockSize; ++i) { +// for (int i = 0; i < count; ++i) { // std::cout << m_outputBuffers[0][i] << " "; // if (i % 8 == 0) std::cout << std::endl; // } diff -r 9867f99e0bb7 -r 9b35a1731c3d plugin/DSSIPluginInstance.h --- a/plugin/DSSIPluginInstance.h Fri Feb 15 15:15:29 2008 +0000 +++ b/plugin/DSSIPluginInstance.h Wed Feb 27 18:04:10 2008 +0000 @@ -54,7 +54,7 @@ virtual int getPluginVersion() const; virtual std::string getCopyright() const; - virtual void run(const Vamp::RealTime &); + virtual void run(const Vamp::RealTime &, size_t count = 0); virtual unsigned int getParameterCount() const; virtual void setParameterValue(unsigned int parameter, float value); diff -r 9867f99e0bb7 -r 9b35a1731c3d plugin/LADSPAPluginInstance.cpp --- a/plugin/LADSPAPluginInstance.cpp Fri Feb 15 15:15:29 2008 +0000 +++ b/plugin/LADSPAPluginInstance.cpp Wed Feb 27 18:04:10 2008 +0000 @@ -529,14 +529,16 @@ } void -LADSPAPluginInstance::run(const Vamp::RealTime &) +LADSPAPluginInstance::run(const Vamp::RealTime &, size_t count) { if (!m_descriptor || !m_descriptor->run) return; + if (count == 0) count = m_blockSize; + for (std::vector::iterator hi = m_instanceHandles.begin(); hi != m_instanceHandles.end(); ++hi) { - m_descriptor->run(*hi, m_blockSize); + m_descriptor->run(*hi, count); } m_run = true; diff -r 9867f99e0bb7 -r 9b35a1731c3d plugin/LADSPAPluginInstance.h --- a/plugin/LADSPAPluginInstance.h Fri Feb 15 15:15:29 2008 +0000 +++ b/plugin/LADSPAPluginInstance.h Wed Feb 27 18:04:10 2008 +0000 @@ -50,7 +50,7 @@ virtual int getPluginVersion() const; virtual std::string getCopyright() const; - virtual void run(const Vamp::RealTime &rt); + virtual void run(const Vamp::RealTime &rt, size_t count = 0); virtual unsigned int getParameterCount() const; virtual void setParameterValue(unsigned int parameter, float value); diff -r 9867f99e0bb7 -r 9b35a1731c3d plugin/RealTimePluginInstance.h --- a/plugin/RealTimePluginInstance.h Fri Feb 15 15:15:29 2008 +0000 +++ b/plugin/RealTimePluginInstance.h Wed Feb 27 18:04:10 2008 +0000 @@ -86,9 +86,11 @@ /** * Run for one block, starting at the given time. The start time * may be of interest to synths etc that may have queued events - * waiting. Other plugins can ignore it. + * waiting. Other plugins can ignore it. The count, if zero, + * defaults to our fixed buffer size. */ - virtual void run(const Vamp::RealTime &blockStartTime) = 0; + virtual void run(const Vamp::RealTime &blockStartTime, + size_t count = 0) = 0; virtual size_t getBufferSize() const = 0;