Mercurial > hg > svcore
changeset 242:2f7d27648806
* Fix real-time plugin corruption when getLatency is called for some plugins
* Other minor changes
author | Chris Cannam |
---|---|
date | Thu, 01 Mar 2007 15:35:27 +0000 |
parents | 2b40f83e7627 |
children | ff46f251139e |
files | plugin/DSSIPluginInstance.cpp plugin/LADSPAPluginInstance.cpp |
diffstat | 2 files changed, 32 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/plugin/DSSIPluginInstance.cpp Thu Mar 01 12:15:08 2007 +0000 +++ b/plugin/DSSIPluginInstance.cpp Thu Mar 01 15:35:27 2007 +0000 @@ -268,7 +268,14 @@ #endif if (m_latencyPort) { - if (!m_run) run(Vamp::RealTime::zeroTime); + if (!m_run) { + for (int i = 0; i < getAudioInputCount(); ++i) { + for (int j = 0; j < m_blockSize; ++j) { + m_inputBuffers[i][j] = 0.f; + } + } + run(Vamp::RealTime::zeroTime); + } latency = (size_t)(*m_latencyPort + 0.1); }
--- a/plugin/LADSPAPluginInstance.cpp Thu Mar 01 12:15:08 2007 +0000 +++ b/plugin/LADSPAPluginInstance.cpp Thu Mar 01 15:35:27 2007 +0000 @@ -204,8 +204,10 @@ { for (unsigned int i = 0; i < m_controlPortsIn.size(); ++i) { if (id == m_descriptor->PortNames[m_controlPortsIn[i].first]) { +#ifdef DEBUG_LADSPA std::cerr << "LADSPAPluginInstance::setParameter: Found id " << id << " at control port " << i << std::endl; +#endif setParameterValue(i, value); break; } @@ -222,10 +224,10 @@ // Discover ports numbers and identities // - for (unsigned long i = 0; i < m_descriptor->PortCount; ++i) - { - if (LADSPA_IS_PORT_AUDIO(m_descriptor->PortDescriptors[i])) - { + for (unsigned long i = 0; i < m_descriptor->PortCount; ++i) { + + if (LADSPA_IS_PORT_AUDIO(m_descriptor->PortDescriptors[i])) { + if (LADSPA_IS_PORT_INPUT(m_descriptor->PortDescriptors[i])) { #ifdef DEBUG_LADSPA std::cerr << "LADSPAPluginInstance::init: port " << i << " is audio in" << std::endl; @@ -237,18 +239,20 @@ #endif m_audioPortsOut.push_back(i); } - } - else - if (LADSPA_IS_PORT_CONTROL(m_descriptor->PortDescriptors[i])) - { + + } else if (LADSPA_IS_PORT_CONTROL(m_descriptor->PortDescriptors[i])) { + if (LADSPA_IS_PORT_INPUT(m_descriptor->PortDescriptors[i])) { + #ifdef DEBUG_LADSPA std::cerr << "LADSPAPluginInstance::init: port " << i << " is control in" << std::endl; #endif LADSPA_Data *data = new LADSPA_Data(0.0); m_controlPortsIn.push_back( std::pair<unsigned long, LADSPA_Data*>(i, data)); + } else { + #ifdef DEBUG_LADSPA std::cerr << "LADSPAPluginInstance::init: port " << i << " is control out" << std::endl; #endif @@ -262,6 +266,7 @@ #endif m_latencyPort = data; } + } } #ifdef DEBUG_LADSPA @@ -285,7 +290,14 @@ LADSPAPluginInstance::getLatency() { if (m_latencyPort) { - if (!m_run) run(Vamp::RealTime::zeroTime); + if (!m_run) { + for (int i = 0; i < getAudioInputCount(); ++i) { + for (int j = 0; j < m_blockSize; ++j) { + m_inputBuffers[i][j] = 0.f; + } + } + run(Vamp::RealTime::zeroTime); + } if (*m_latencyPort > 0) return (size_t)*m_latencyPort; } return 0; @@ -506,8 +518,11 @@ { if (!m_descriptor || !m_descriptor->run) return; + int inbuf = 0, outbuf = 0; + for (std::vector<LADSPA_Handle>::iterator hi = m_instanceHandles.begin(); hi != m_instanceHandles.end(); ++hi) { + m_descriptor->run(*hi, m_blockSize); }