Browse Source

Fix dynamic buffer size against plugin bridges

Closes #752
tags/v2.1-alpha1-winvst
falkTX 6 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),
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;


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

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


Loading…
Cancel
Save