From de63835867f775b82523a0a245570da2dab4e8c4 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 30 Jan 2022 15:53:34 +0000 Subject: [PATCH] Fix logic around inplace processing audio buffer copy Signed-off-by: falkTX --- src/CardinalPlugin.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index fcaec42..74e16a3 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -388,7 +388,13 @@ class CardinalPlugin : public CardinalBasePlugin { SharedResourcePointer fInitializer; + #if DISTRHO_PLUGIN_NUM_INPUTS != 0 + /* If host audio ins == outs we can get issues for inplace processing. + * So allocate a float array that will serve as safe copy for those cases. + */ float** fAudioBufferCopy; + #endif + std::string fAutosavePath; uint64_t fPreviousFrame; String fWindowSize; @@ -402,7 +408,9 @@ public: CardinalPlugin() : CardinalBasePlugin(kModuleParameters + kWindowParameterCount, 0, kCardinalStateCount), fInitializer(this), + #if DISTRHO_PLUGIN_NUM_INPUTS != 0 fAudioBufferCopy(nullptr), + #endif fPreviousFrame(0) { #ifndef HEADLESS @@ -802,7 +810,7 @@ protected: #if DISTRHO_PLUGIN_NUM_INPUTS != 0 const uint32_t bufferSize = getBufferSize(); fAudioBufferCopy = new float*[DISTRHO_PLUGIN_NUM_INPUTS]; - for (int i=0; idataIns = fAudioBufferCopy; + #else + context->dataIns = nullptr; + #endif context->dataOuts = outputs; }