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