Browse Source

Fix dynamic buffer size against plugin bridges

Closes #752
tags/v2.1-alpha1-winvst
falkTX 7 years ago
parent
commit
2b6c6d8440
2 changed files with 12 additions and 4 deletions
  1. +6
    -2
      source/backend/plugin/CarlaPluginBridge.cpp
  2. +6
    -2
      source/backend/plugin/CarlaPluginJack.cpp

+ 6
- 2
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -380,6 +380,7 @@ public:
fSaved(true), fSaved(true),
fTimedOut(false), fTimedOut(false),
fTimedError(false), fTimedError(false),
fBufferSize(engine->getBufferSize()),
fProcWaitTime(0), fProcWaitTime(0),
fLastPongTime(-1), fLastPongTime(-1),
fBridgeBinary(), fBridgeBinary(),
@@ -1432,6 +1433,7 @@ public:
{ {
CARLA_SAFE_ASSERT_RETURN(! fTimedError, false); CARLA_SAFE_ASSERT_RETURN(! fTimedError, false);
CARLA_SAFE_ASSERT_RETURN(frames > 0, false); CARLA_SAFE_ASSERT_RETURN(frames > 0, false);
CARLA_SAFE_ASSERT_RETURN(frames <= fBufferSize, false);


if (pData->audioIn.count > 0) if (pData->audioIn.count > 0)
{ {
@@ -1473,7 +1475,7 @@ public:
// Reset audio buffers // Reset audio buffers


for (uint32_t i=0; i < fInfo.aIns; ++i) 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 // TimeInfo
@@ -1518,7 +1520,7 @@ public:
} }


for (uint32_t i=0; i < fInfo.aOuts; ++i) 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 #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
// -------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------
@@ -1634,6 +1636,7 @@ public:


void bufferSizeChanged(const uint32_t newBufferSize) override void bufferSizeChanged(const uint32_t newBufferSize) override
{ {
fBufferSize = newBufferSize;
resizeAudioPool(newBufferSize); resizeAudioPool(newBufferSize);


{ {
@@ -2422,6 +2425,7 @@ private:
bool fSaved; bool fSaved;
bool fTimedOut; bool fTimedOut;
bool fTimedError; bool fTimedError;
uint fBufferSize;
uint fProcWaitTime; uint fProcWaitTime;


int64_t fLastPongTime; int64_t fLastPongTime;


+ 6
- 2
source/backend/plugin/CarlaPluginJack.cpp View File

@@ -203,6 +203,7 @@ public:
fTimedOut(false), fTimedOut(false),
fTimedError(false), fTimedError(false),
fProcCanceled(false), fProcCanceled(false),
fBufferSize(engine->getBufferSize()),
fProcWaitTime(0), fProcWaitTime(0),
fLastPingTime(-1), fLastPingTime(-1),
fBridgeThread(engine, this), fBridgeThread(engine, this),
@@ -904,6 +905,7 @@ public:
{ {
CARLA_SAFE_ASSERT_RETURN(! fTimedError, false); CARLA_SAFE_ASSERT_RETURN(! fTimedError, false);
CARLA_SAFE_ASSERT_RETURN(frames > 0, false); CARLA_SAFE_ASSERT_RETURN(frames > 0, false);
CARLA_SAFE_ASSERT_RETURN(frames <= fBufferSize, false);


if (pData->audioIn.count > 0) if (pData->audioIn.count > 0)
{ {
@@ -935,7 +937,7 @@ public:
// Reset audio buffers // Reset audio buffers


for (uint32_t i=0; i < fInfo.aIns; ++i) 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 // TimeInfo
@@ -986,7 +988,7 @@ public:
} }


for (uint32_t i=0; i < fInfo.aOuts; ++i) 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 #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
// -------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------
@@ -1064,6 +1066,7 @@ public:


void bufferSizeChanged(const uint32_t newBufferSize) override void bufferSizeChanged(const uint32_t newBufferSize) override
{ {
fBufferSize = newBufferSize;
resizeAudioPool(newBufferSize); resizeAudioPool(newBufferSize);


{ {
@@ -1360,6 +1363,7 @@ private:
bool fTimedOut; bool fTimedOut;
bool fTimedError; bool fTimedError;
bool fProcCanceled; bool fProcCanceled;
uint fBufferSize;
uint fProcWaitTime; uint fProcWaitTime;


int64_t fLastPingTime; int64_t fLastPingTime;


Loading…
Cancel
Save