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; }