1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-13 00:04:19 +00:00

ProcessorGraph: Fix issue where initialising empty graphs failed

This commit is contained in:
reuk 2020-01-07 12:29:19 +00:00 committed by Tom Poole
parent 07f15909ea
commit 5d1a5e804c

View file

@ -1220,47 +1220,28 @@ bool AudioProcessorGraph::anyNodesNeedPreparing() const noexcept
void AudioProcessorGraph::buildRenderingSequence()
{
std::unique_ptr<RenderSequenceFloat> newSequenceF (new RenderSequenceFloat());
std::unique_ptr<RenderSequenceDouble> newSequenceD (new RenderSequenceDouble());
auto newSequenceF = std::make_unique<RenderSequenceFloat>();
auto newSequenceD = std::make_unique<RenderSequenceDouble>();
{
MessageManagerLock mml;
RenderSequenceBuilder<RenderSequenceFloat> builderF (*this, *newSequenceF);
RenderSequenceBuilder<RenderSequenceDouble> builderD (*this, *newSequenceD);
RenderSequenceBuilder<RenderSequenceFloat> builderF (*this, *newSequenceF);
RenderSequenceBuilder<RenderSequenceDouble> 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);