Mercurial > hg > svcore
diff transform/RealTimeEffectModelTransformer.cpp @ 1757:776389390473 by-id
Merge
author | Chris Cannam |
---|---|
date | Sat, 06 Jul 2019 18:12:54 +0100 |
parents | fd7f127ecd89 |
children | 5f8fbbde08ff |
line wrap: on
line diff
--- a/transform/RealTimeEffectModelTransformer.cpp Sat Jul 06 18:12:38 2019 +0100 +++ b/transform/RealTimeEffectModelTransformer.cpp Sat Jul 06 18:12:54 2019 +0100 @@ -142,6 +142,25 @@ return; } + sv_samplerate_t sampleRate; + int channelCount; + sv_frame_t startFrame; + sv_frame_t endFrame; + + { // scope so as not to have this borrowed pointer retained around + // the edges of the process loop + auto input = ModelById::getAs<DenseTimeValueModel>(getInputModel()); + if (!input) { + abandon(); + return; + } + + sampleRate = input->getSampleRate(); + channelCount = input->getChannelCount(); + startFrame = input->getStartFrame(); + endFrame = input->getEndFrame(); + } + auto stvm = ModelById::getAs<SparseTimeValueModel>(m_outputs[0]); auto wwfm = ModelById::getAs<WritableWaveFileModel>(m_outputs[0]); @@ -153,17 +172,12 @@ return; } - sv_samplerate_t sampleRate = input->getSampleRate(); - int channelCount = input->getChannelCount(); if (!wwfm && m_input.getChannel() != -1) channelCount = 1; sv_frame_t blockSize = m_plugin->getBufferSize(); float **inbufs = m_plugin->getAudioInputBuffers(); - sv_frame_t startFrame = input->getStartFrame(); - sv_frame_t endFrame = input->getEndFrame(); - Transform transform = m_transforms[0]; RealTime contextStartRT = transform.getStartTime(); @@ -205,6 +219,12 @@ sv_frame_t got = 0; + auto input = ModelById::getAs<DenseTimeValueModel>(getInputModel()); + if (!input) { + abandon(); + return; + } + if (channelCount == 1) { if (inbufs && inbufs[0]) { auto data = input->getData