Browse Source

Small plugin-bridge fixes

tags/1.9.6
falkTX 10 years ago
parent
commit
881c178458
2 changed files with 24 additions and 26 deletions
  1. +6
    -7
      source/backend/engine/CarlaEngineBridge.cpp
  2. +18
    -19
      source/backend/plugin/CarlaPluginBridge.cpp

+ 6
- 7
source/backend/engine/CarlaEngineBridge.cpp View File

@@ -365,7 +365,6 @@ public:
fShmRtClientControl(),
fShmNonRtClientControl(),
fShmNonRtServerControl(),
fIsRunning(false),
fIsOffline(false),
fFirstIdle(true),
fLastPingCounter(-1),
@@ -389,6 +388,8 @@ public:
~CarlaEngineBridge() noexcept override
{
carla_debug("CarlaEngineBridge::~CarlaEngineBridge()");

clear();
}

// -------------------------------------
@@ -504,7 +505,7 @@ public:

bool isRunning() const noexcept override
{
return isThreadRunning();
return isThreadRunning() || ! fFirstIdle;
}

bool isOffline() const noexcept override
@@ -855,15 +856,15 @@ public:
}
#endif

if (opcode != kPluginBridgeNonRtClientNull && fLastPingCounter > 0)
fLastPingCounter = 0;

switch (opcode)
{
case kPluginBridgeNonRtClientNull:
break;

case kPluginBridgeNonRtClientPing: {
if (fLastPingCounter > 0)
fLastPingCounter = 0;

const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex);

fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPong);
@@ -1395,7 +1396,6 @@ protected:
carla_stderr2("Could not post to client rt semaphore");
}

fIsRunning = false;
callback(ENGINE_CALLBACK_ENGINE_STOPPED, 0, 0, 0, 0.0f, nullptr);
}

@@ -1420,7 +1420,6 @@ private:
BridgeNonRtClientControl fShmNonRtClientControl;
BridgeNonRtServerControl fShmNonRtServerControl;

bool fIsRunning;
bool fIsOffline;
bool fFirstIdle;
int32_t fLastPingCounter;


+ 18
- 19
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -484,14 +484,14 @@ public:
void setData(const char* const binary, const char* const label, const char* const shmIds) noexcept
{
CARLA_SAFE_ASSERT_RETURN(binary != nullptr && binary[0] != '\0',);
CARLA_SAFE_ASSERT_RETURN(label != nullptr,);
CARLA_SAFE_ASSERT_RETURN(shmIds != nullptr && shmIds[0] != '\0',);
CARLA_SAFE_ASSERT(! isThreadRunning());

fBinary = binary;
fLabel = label;
fShmIds = shmIds;

if (label != nullptr)
fLabel = label;
if (fLabel.isEmpty())
fLabel = "\"\"";
}
@@ -1859,14 +1859,13 @@ public:
carla_debug("CarlaPluginBridge::handleNonRtData() - got opcode: %s", PluginBridgeNonRtServerOpcode2str(opcode));
}
#endif
if (opcode != kPluginBridgeNonRtServerNull && fLastPongCounter > 0)
fLastPongCounter = 0;

switch (opcode)
{
case kPluginBridgeNonRtServerNull:
break;

case kPluginBridgeNonRtServerPong:
if (fLastPongCounter > 0)
fLastPongCounter = 0;
break;

case kPluginBridgeNonRtServerPluginInfo1: {
@@ -1962,7 +1961,7 @@ public:
fParams = new BridgeParamInfo[count];

// we might not receive all parameter data, so ensure range max is not 0
for (uint32_t i=0; i<maxParams; ++i)
for (uint32_t i=0; i<count; ++i)
{
pData->param.ranges[i].def = 0.0f;
pData->param.ranges[i].min = 0.0f;
@@ -2069,8 +2068,6 @@ public:
const uint32_t index = fShmNonRtServerControl.readUInt();
const float value = fShmNonRtServerControl.readFloat();

CARLA_SAFE_ASSERT_INT2(index < pData->param.count, index, pData->param.count);

if (index < pData->param.count)
{
const float fixedValue(pData->param.getFixedValue(index, value));
@@ -2085,8 +2082,6 @@ public:
const uint32_t index = fShmNonRtServerControl.readUInt();
const float value = fShmNonRtServerControl.readFloat();

CARLA_SAFE_ASSERT_INT2(index < pData->param.count, index, pData->param.count);

if (index < pData->param.count)
{
const float fixedValue(pData->param.getFixedValue(index, value));
@@ -2099,8 +2094,6 @@ public:
const uint32_t index = fShmNonRtServerControl.readUInt();
const float value = fShmNonRtServerControl.readFloat();

CARLA_SAFE_ASSERT_INT2(index < pData->param.count, index, pData->param.count);

if (index < pData->param.count)
pData->param.ranges[index].def = value;
} break;
@@ -2305,16 +2298,24 @@ public:
return false;
}

if (bridgeBinary == nullptr || bridgeBinary[0] == '\0')
{
pData->engine->setLastError("null bridge binary");
return false;
}

// ---------------------------------------------------------------
// set info

if (name != nullptr && name[0] != '\0')
pData->name = pData->engine->getUniquePluginName(name);

pData->filename = carla_strdup(filename);
if (filename != nullptr && filename[0] != '\0')
pData->filename = carla_strdup(filename);
else
pData->filename = carla_strdup("");

if (bridgeBinary != nullptr)
fBridgeBinary = bridgeBinary;
fBridgeBinary = bridgeBinary;

std::srand(static_cast<uint>(std::time(nullptr)));

@@ -2416,9 +2417,7 @@ public:

if (pData->name == nullptr)
{
if (name != nullptr && name[0] != '\0')
pData->name = pData->engine->getUniquePluginName(name);
else if (label != nullptr && label[0] != '\0')
if (label != nullptr && label[0] != '\0')
pData->name = pData->engine->getUniquePluginName(label);
else
pData->name = pData->engine->getUniquePluginName("unknown");


Loading…
Cancel
Save