diff --git a/source/backend/plugin/CarlaPluginBridge.cpp b/source/backend/plugin/CarlaPluginBridge.cpp index 1342d991a..687c92f3b 100644 --- a/source/backend/plugin/CarlaPluginBridge.cpp +++ b/source/backend/plugin/CarlaPluginBridge.cpp @@ -380,6 +380,7 @@ public: fSaved(true), fTimedOut(false), fTimedError(false), + fBufferSize(engine->getBufferSize()), fProcWaitTime(0), fLastPongTime(-1), fBridgeBinary(), @@ -1432,6 +1433,7 @@ public: { CARLA_SAFE_ASSERT_RETURN(! fTimedError, false); CARLA_SAFE_ASSERT_RETURN(frames > 0, false); + CARLA_SAFE_ASSERT_RETURN(frames <= fBufferSize, false); if (pData->audioIn.count > 0) { @@ -1473,7 +1475,7 @@ public: // Reset audio buffers for (uint32_t i=0; i < fInfo.aIns; ++i) - carla_copyFloats(fShmAudioPool.data + (i * frames), audioIn[i], frames); + carla_copyFloats(fShmAudioPool.data + (i * fBufferSize), audioIn[i], frames); // -------------------------------------------------------------------------------------------------------- // TimeInfo @@ -1518,7 +1520,7 @@ public: } for (uint32_t i=0; i < fInfo.aOuts; ++i) - carla_copyFloats(audioOut[i], fShmAudioPool.data + ((i + fInfo.aIns) * frames), frames); + carla_copyFloats(audioOut[i], fShmAudioPool.data + ((i + fInfo.aIns) * fBufferSize), frames); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- @@ -1634,6 +1636,7 @@ public: void bufferSizeChanged(const uint32_t newBufferSize) override { + fBufferSize = newBufferSize; resizeAudioPool(newBufferSize); { @@ -2422,6 +2425,7 @@ private: bool fSaved; bool fTimedOut; bool fTimedError; + uint fBufferSize; uint fProcWaitTime; int64_t fLastPongTime; diff --git a/source/backend/plugin/CarlaPluginJack.cpp b/source/backend/plugin/CarlaPluginJack.cpp index 777f26047..0687e2ecc 100644 --- a/source/backend/plugin/CarlaPluginJack.cpp +++ b/source/backend/plugin/CarlaPluginJack.cpp @@ -203,6 +203,7 @@ public: fTimedOut(false), fTimedError(false), fProcCanceled(false), + fBufferSize(engine->getBufferSize()), fProcWaitTime(0), fLastPingTime(-1), fBridgeThread(engine, this), @@ -904,6 +905,7 @@ public: { CARLA_SAFE_ASSERT_RETURN(! fTimedError, false); CARLA_SAFE_ASSERT_RETURN(frames > 0, false); + CARLA_SAFE_ASSERT_RETURN(frames <= fBufferSize, false); if (pData->audioIn.count > 0) { @@ -935,7 +937,7 @@ public: // Reset audio buffers for (uint32_t i=0; i < fInfo.aIns; ++i) - carla_copyFloats(fShmAudioPool.data + (i * frames), audioIn[i], frames); + carla_copyFloats(fShmAudioPool.data + (i * fBufferSize), audioIn[i], frames); // -------------------------------------------------------------------------------------------------------- // TimeInfo @@ -986,7 +988,7 @@ public: } for (uint32_t i=0; i < fInfo.aOuts; ++i) - carla_copyFloats(audioOut[i], fShmAudioPool.data + ((i + fInfo.aIns) * frames), frames); + carla_copyFloats(audioOut[i], fShmAudioPool.data + ((i + fInfo.aIns) * fBufferSize), frames); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- @@ -1064,6 +1066,7 @@ public: void bufferSizeChanged(const uint32_t newBufferSize) override { + fBufferSize = newBufferSize; resizeAudioPool(newBufferSize); { @@ -1360,6 +1363,7 @@ private: bool fTimedOut; bool fTimedError; bool fProcCanceled; + uint fBufferSize; uint fProcWaitTime; int64_t fLastPingTime;