From 5d1a5e804ccbd5fb115ca93a38596fc71c2b1ce3 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 7 Jan 2020 12:29:19 +0000 Subject: [PATCH] ProcessorGraph: Fix issue where initialising empty graphs failed --- .../processors/juce_AudioProcessorGraph.cpp | 39 +++++-------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp index 462c3120cb..1a016a9c42 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp @@ -1220,47 +1220,28 @@ bool AudioProcessorGraph::anyNodesNeedPreparing() const noexcept void AudioProcessorGraph::buildRenderingSequence() { - std::unique_ptr newSequenceF (new RenderSequenceFloat()); - std::unique_ptr newSequenceD (new RenderSequenceDouble()); + auto newSequenceF = std::make_unique(); + auto newSequenceD = std::make_unique(); - { - MessageManagerLock mml; + RenderSequenceBuilder builderF (*this, *newSequenceF); + RenderSequenceBuilder builderD (*this, *newSequenceD); - RenderSequenceBuilder builderF (*this, *newSequenceF); - RenderSequenceBuilder builderD (*this, *newSequenceD); - } + const ScopedLock sl (getCallbackLock()); - struct SampleRateAndBlockSize final - { - double sampleRate; - int blockSize; - }; - - const auto blockDetails = [&] - { - const ScopedLock sl (getCallbackLock()); - auto details = SampleRateAndBlockSize { getSampleRate(), getBlockSize() }; - newSequenceF->prepareBuffers (details.blockSize); - newSequenceD->prepareBuffers (details.blockSize); - return details; - }(); + const auto currentBlockSize = getBlockSize(); + newSequenceF->prepareBuffers (currentBlockSize); + newSequenceD->prepareBuffers (currentBlockSize); if (anyNodesNeedPreparing()) { - const ScopedLock sl (getCallbackLock()); renderSequenceFloat.reset(); renderSequenceDouble.reset(); for (auto* node : nodes) - node->prepare (blockDetails.sampleRate, - blockDetails.blockSize, - this, - getProcessingPrecision()); - - isPrepared = 1; + node->prepare (getSampleRate(), currentBlockSize, this, getProcessingPrecision()); } - const ScopedLock sl (getCallbackLock()); + isPrepared = 1; std::swap (renderSequenceFloat, newSequenceF); std::swap (renderSequenceDouble, newSequenceD);