From a0be30f35e2eee502afcb5c4ec860a3ba1cc1dc6 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 12 Jul 2019 13:19:39 +0200 Subject: [PATCH] Fix crash when plugin adds latency after starting at 0 Signed-off-by: falkTX --- source/backend/plugin/CarlaPluginBridge.cpp | 8 +++++--- source/backend/plugin/CarlaPluginDSSI.cpp | 7 ++++--- source/backend/plugin/CarlaPluginLADSPA.cpp | 7 ++++--- source/backend/plugin/CarlaPluginLV2.cpp | 7 ++++--- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/source/backend/plugin/CarlaPluginBridge.cpp b/source/backend/plugin/CarlaPluginBridge.cpp index 6c0003267..664b86f03 100644 --- a/source/backend/plugin/CarlaPluginBridge.cpp +++ b/source/backend/plugin/CarlaPluginBridge.cpp @@ -1561,7 +1561,7 @@ public: for (uint32_t k=0; k < frames; ++k) { # ifndef BUILD_BRIDGE - if (k < pData->latency.frames) + if (k < pData->latency.frames && pData->latency.buffers != nullptr) bufValue = pData->latency.buffers[c][k]; else if (pData->latency.frames < frames) bufValue = audioIn[c][k-pData->latency.frames]; @@ -1618,8 +1618,10 @@ public: // -------------------------------------------------------------------------------------------------------- // Save latency values for next callback - if (const uint32_t latframes = pData->latency.frames) + if (pData->latency.frames != 0 && pData->latency.buffers != nullptr) { + const uint32_t latframes = pData->latency.frames; + if (latframes <= frames) { for (uint32_t i=0; i < pData->audioIn.count; ++i) @@ -1627,7 +1629,7 @@ public: } else { - const uint32_t diff = pData->latency.frames-frames; + const uint32_t diff = latframes - frames; for (uint32_t i=0, k; iaudioIn.count; ++i) { diff --git a/source/backend/plugin/CarlaPluginDSSI.cpp b/source/backend/plugin/CarlaPluginDSSI.cpp index ba5fd8db4..0ab2cd25e 100644 --- a/source/backend/plugin/CarlaPluginDSSI.cpp +++ b/source/backend/plugin/CarlaPluginDSSI.cpp @@ -1869,7 +1869,7 @@ public: for (uint32_t k=0; k < frames; ++k) { - if (k < pData->latency.frames) + if (k < pData->latency.frames && pData->latency.buffers != nullptr) bufValue = pData->latency.buffers[c][k]; else if (pData->latency.frames < frames) bufValue = fAudioInBuffers[c][k-pData->latency.frames]; @@ -1923,9 +1923,10 @@ public: // -------------------------------------------------------------------------------------------------------- // Save latency values for next callback - if (const uint32_t latframes = pData->latency.frames) + if (pData->latency.frames != 0 && pData->latency.buffers != nullptr) { CARLA_SAFE_ASSERT(timeOffset == 0); + const uint32_t latframes = pData->latency.frames; if (latframes <= frames) { @@ -1934,7 +1935,7 @@ public: } else { - const uint32_t diff = pData->latency.frames-frames; + const uint32_t diff = latframes - frames; for (uint32_t i=0, k; iaudioIn.count; ++i) { diff --git a/source/backend/plugin/CarlaPluginLADSPA.cpp b/source/backend/plugin/CarlaPluginLADSPA.cpp index 49f60285a..c4c0df635 100644 --- a/source/backend/plugin/CarlaPluginLADSPA.cpp +++ b/source/backend/plugin/CarlaPluginLADSPA.cpp @@ -1216,7 +1216,7 @@ public: for (uint32_t k=0; k < frames; ++k) { # ifndef BUILD_BRIDGE - if (k < pData->latency.frames) + if (k < pData->latency.frames && pData->latency.buffers != nullptr) bufValue = pData->latency.buffers[c][k]; else if (pData->latency.frames < frames) bufValue = fAudioInBuffers[c][k-pData->latency.frames]; @@ -1272,9 +1272,10 @@ public: // -------------------------------------------------------------------------------------------------------- // Save latency values for next callback - if (const uint32_t latframes = pData->latency.frames) + if (pData->latency.frames != 0 && pData->latency.buffers != nullptr) { CARLA_SAFE_ASSERT(timeOffset == 0); + const uint32_t latframes = pData->latency.frames; if (latframes <= frames) { @@ -1283,7 +1284,7 @@ public: } else { - const uint32_t diff = pData->latency.frames-frames; + const uint32_t diff = latframes - frames; for (uint32_t i=0, k; iaudioIn.count; ++i) { diff --git a/source/backend/plugin/CarlaPluginLV2.cpp b/source/backend/plugin/CarlaPluginLV2.cpp index 64d3c216c..fdc8ee2dc 100644 --- a/source/backend/plugin/CarlaPluginLV2.cpp +++ b/source/backend/plugin/CarlaPluginLV2.cpp @@ -4066,7 +4066,7 @@ public: for (uint32_t k=0; k < frames; ++k) { # ifndef BUILD_BRIDGE - if (k < pData->latency.frames) + if (k < pData->latency.frames && pData->latency.buffers != nullptr) bufValue = pData->latency.buffers[c][k]; else if (pData->latency.frames < frames) bufValue = fAudioInBuffers[c][k-pData->latency.frames]; @@ -4121,9 +4121,10 @@ public: // -------------------------------------------------------------------------------------------------------- // Save latency values for next callback - if (const uint32_t latframes = pData->latency.frames) + if (pData->latency.frames != 0 && pData->latency.buffers != nullptr) { CARLA_SAFE_ASSERT(timeOffset == 0); + const uint32_t latframes = pData->latency.frames; if (latframes <= frames) { @@ -4132,7 +4133,7 @@ public: } else { - const uint32_t diff = pData->latency.frames-frames; + const uint32_t diff = latframes - frames; for (uint32_t i=0, k; iaudioIn.count; ++i) {