From eef9ed74921e9e8593155cd04a7ec3ef79eb0c4e Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 22 Jul 2015 17:52:34 +0200 Subject: [PATCH] Bypass MIDI events on carla-plugin when rack is empty --- source/backend/engine/CarlaEngineNative.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/source/backend/engine/CarlaEngineNative.cpp b/source/backend/engine/CarlaEngineNative.cpp index 339d0a82f..b3ab09cdd 100644 --- a/source/backend/engine/CarlaEngineNative.cpp +++ b/source/backend/engine/CarlaEngineNative.cpp @@ -1306,7 +1306,8 @@ protected: //runPendingRtEvents(); } - void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) + void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, + const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) { const PendingRtEventsRunner prt(this); @@ -1341,8 +1342,17 @@ protected: if (pData->curPluginCount == 0 && ! kIsPatchbay) { - FloatVectorOperations::copy(outBuffer[0], inBuffer[0], static_cast(frames)); - FloatVectorOperations::copy(outBuffer[1], inBuffer[1], static_cast(frames)); + if (outBuffer[0] != inBuffer[0]) + FloatVectorOperations::copy(outBuffer[0], inBuffer[0], static_cast(frames)); + + if (outBuffer[1] != inBuffer[1]) + FloatVectorOperations::copy(outBuffer[1], inBuffer[1], static_cast(frames)); + + for (uint32_t i=0; i < midiEventCount; ++i) + { + if (! pHost->write_midi_event(pHost->handle, &midiEvents[i])) + break; + } return; }