Browse Source

Misc work; cleanup

tags/1.9.4
falkTX 11 years ago
parent
commit
b4ab53fb09
9 changed files with 305 additions and 376 deletions
  1. +11
    -9
      source/backend/CarlaEngine.hpp
  2. +16
    -126
      source/backend/engine/CarlaEngine.cpp
  3. +166
    -43
      source/backend/engine/CarlaEngineInternal.cpp
  4. +47
    -21
      source/backend/engine/CarlaEngineInternal.hpp
  5. +1
    -0
      source/backend/engine/CarlaEngineJack.cpp
  6. +2
    -131
      source/backend/engine/CarlaEngineJuce.cpp
  7. +60
    -44
      source/backend/engine/CarlaEngineRtAudio.cpp
  8. +1
    -1
      source/utils/LinkedList.hpp
  9. +1
    -1
      source/utils/RtLinkedList.hpp

+ 11
- 9
source/backend/CarlaEngine.hpp View File

@@ -934,7 +934,7 @@ public:
/*!
* Set last error.
*/
void setLastError(const char* const error) const;
void setLastError(const char* const error) const noexcept;

// -------------------------------------------------------------------
// Misc
@@ -1005,6 +1005,16 @@ public:
*/
void registerEnginePlugin(const unsigned int id, CarlaPlugin* const plugin) noexcept;

#ifndef BUILD_BRIDGE
/*!
* Virtual functions for handling MIDI ports in the rack patchbay.
*/
virtual bool connectRackMidiInPort(const int) { return false; }
virtual bool connectRackMidiOutPort(const int) { return false; }
virtual bool disconnectRackMidiInPort(const int) { return false; }
virtual bool disconnectRackMidiOutPort(const int) { return false; }
#endif

// -------------------------------------------------------------------

protected:
@@ -1050,14 +1060,6 @@ protected:
// -------------------------------------------------------------------
// Patchbay stuff

/*!
* Virtual functions for handling MIDI ports in the rack patchbay.
*/
virtual bool connectRackMidiInPort(const int) { return false; }
virtual bool connectRackMidiOutPort(const int) { return false; }
virtual bool disconnectRackMidiInPort(const int) { return false; }
virtual bool disconnectRackMidiOutPort(const int) { return false; }

/*!
* Virtual functions for handling patchbay state.
*/


+ 16
- 126
source/backend/engine/CarlaEngine.cpp View File

@@ -1491,7 +1491,7 @@ bool CarlaEngine::saveProject(const char* const filename)
bool firstPlugin = true;
char strBuf[STR_MAX+1];

for (unsigned int i=0; i < pData->curPluginCount; ++i)
for (uint i=0; i < pData->curPluginCount; ++i)
{
CarlaPlugin* const plugin(pData->plugins[i].plugin);

@@ -1654,6 +1654,7 @@ const char* CarlaEngine::runFileCallback(const FileCallbackOpcode action, const

void CarlaEngine::setFileCallback(const FileCallbackFunc func, void* const ptr) noexcept
{
carla_debug("CarlaEngine::setFileCallback(%p, %p)", func, ptr);

pData->fileCallback = func;
pData->fileCallbackPtr = ptr;
@@ -1663,107 +1664,19 @@ void CarlaEngine::setFileCallback(const FileCallbackFunc func, void* const ptr)
// -----------------------------------------------------------------------
// Patchbay

bool CarlaEngine::patchbayConnect(const int /*groupA*/, const int portA, const int /*groupB*/, const int portB)
bool CarlaEngine::patchbayConnect(const int groupA, const int portA, const int groupB, const int portB)
{
CARLA_SAFE_ASSERT_RETURN(pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY, false);
CARLA_SAFE_ASSERT_RETURN(pData->bufAudio.isReady, false);
carla_debug("CarlaEngineRtAudio::patchbayConnect(%i, %i)", portA, portB);

if (pData->bufAudio.usePatchbay)
{
// not implemented yet
return false;
}
carla_debug("CarlaEngine::patchbayConnect(%i, %i)", portA, portB);

EngineRackBuffers* const rack(pData->bufAudio.rack);

CARLA_SAFE_ASSERT_RETURN_ERR(portA > RACK_PATCHBAY_PORT_MAX, "Invalid output port");
CARLA_SAFE_ASSERT_RETURN_ERR(portB > RACK_PATCHBAY_PORT_MAX, "Invalid input port");

// only allow connections between Carla and other ports
if (portA < 0 && portB < 0)
if (portA < 0 || portB < 0)
{
setLastError("Invalid connection (1)");
setLastError("Invalid connection");
return false;
}
if (portA >= 0 && portB >= 0)
{
setLastError("Invalid connection (2)");
return false;
}

const int carlaPort = (portA < 0) ? portA : portB;
const int targetPort = (carlaPort == portA) ? portB : portA;
bool makeConnection = false;

switch (carlaPort)
{
case RACK_PATCHBAY_PORT_AUDIO_IN1:
CARLA_SAFE_ASSERT_BREAK(targetPort >= RACK_PATCHBAY_GROUP_AUDIO_IN*1000);
CARLA_SAFE_ASSERT_BREAK(targetPort <= RACK_PATCHBAY_GROUP_AUDIO_IN*1000+999);
rack->connectLock.enter();
rack->connectedIn1.append(targetPort - RACK_PATCHBAY_GROUP_AUDIO_IN*1000);
rack->connectLock.leave();
makeConnection = true;
break;

case RACK_PATCHBAY_PORT_AUDIO_IN2:
CARLA_SAFE_ASSERT_BREAK(targetPort >= RACK_PATCHBAY_GROUP_AUDIO_IN*1000);
CARLA_SAFE_ASSERT_BREAK(targetPort <= RACK_PATCHBAY_GROUP_AUDIO_IN*1000+999);
rack->connectLock.enter();
rack->connectedIn2.append(targetPort - RACK_PATCHBAY_GROUP_AUDIO_IN*1000);
rack->connectLock.leave();
makeConnection = true;
break;

case RACK_PATCHBAY_PORT_AUDIO_OUT1:
CARLA_SAFE_ASSERT_BREAK(targetPort >= RACK_PATCHBAY_GROUP_AUDIO_OUT*1000);
CARLA_SAFE_ASSERT_BREAK(targetPort <= RACK_PATCHBAY_GROUP_AUDIO_OUT*1000+999);
rack->connectLock.enter();
rack->connectedOut1.append(targetPort - RACK_PATCHBAY_GROUP_AUDIO_OUT*1000);
rack->connectLock.leave();
makeConnection = true;
break;

case RACK_PATCHBAY_PORT_AUDIO_OUT2:
CARLA_SAFE_ASSERT_BREAK(targetPort >= RACK_PATCHBAY_GROUP_AUDIO_OUT*1000);
CARLA_SAFE_ASSERT_BREAK(targetPort <= RACK_PATCHBAY_GROUP_AUDIO_OUT*1000+999);
rack->connectLock.enter();
rack->connectedOut2.append(targetPort - RACK_PATCHBAY_GROUP_AUDIO_OUT*1000);
rack->connectLock.leave();
makeConnection = true;
break;

case RACK_PATCHBAY_PORT_MIDI_IN:
CARLA_SAFE_ASSERT_BREAK(targetPort >= RACK_PATCHBAY_GROUP_MIDI_IN*1000);
CARLA_SAFE_ASSERT_BREAK(targetPort <= RACK_PATCHBAY_GROUP_MIDI_IN*1000+999);
makeConnection = connectRackMidiInPort(targetPort - RACK_PATCHBAY_GROUP_MIDI_IN*1000);
break;

case RACK_PATCHBAY_PORT_MIDI_OUT:
CARLA_SAFE_ASSERT_BREAK(targetPort >= RACK_PATCHBAY_GROUP_MIDI_OUT*1000);
CARLA_SAFE_ASSERT_BREAK(targetPort <= RACK_PATCHBAY_GROUP_MIDI_OUT*1000+999);
makeConnection = connectRackMidiOutPort(targetPort - RACK_PATCHBAY_GROUP_MIDI_OUT*1000);
break;
}

if (! makeConnection)
{
setLastError("Invalid connection (3)");
return false;
}

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = portA;
connectionToId.portIn = portB;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, portA, portB, 0.0f, nullptr);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;

return true;
return pData->bufAudio.connect(this, groupA, portA, groupB, portB);
}

bool CarlaEngine::patchbayDisconnect(const uint connectionId)
@@ -1778,6 +1691,7 @@ bool CarlaEngine::patchbayDisconnect(const uint connectionId)
return false;
}

#if 0
EngineRackBuffers* const rack(pData->bufAudio.rack);

CARLA_SAFE_ASSERT_RETURN_ERR(rack->usedConnections.count() > 0, "No connections available");
@@ -1846,6 +1760,7 @@ bool CarlaEngine::patchbayDisconnect(const uint connectionId)
return true;
}
}
#endif

setLastError("Failed to find connection");
return false;
@@ -1884,9 +1799,8 @@ const char* CarlaEngine::getLastError() const noexcept
return pData->lastError;
}

void CarlaEngine::setLastError(const char* const error) const
void CarlaEngine::setLastError(const char* const error) const noexcept
{

pData->lastError = error;
}

@@ -2067,7 +1981,7 @@ void CarlaEngine::bufferSizeChanged(const uint32_t newBufferSize)
{
carla_debug("CarlaEngine::bufferSizeChanged(%i)", newBufferSize);

for (unsigned int i=0; i < pData->curPluginCount; ++i)
for (uint i=0; i < pData->curPluginCount; ++i)
{
CarlaPlugin* const plugin(pData->plugins[i].plugin);

@@ -2082,7 +1996,7 @@ void CarlaEngine::sampleRateChanged(const double newSampleRate)
{
carla_debug("CarlaEngine::sampleRateChanged(%g)", newSampleRate);

for (unsigned int i=0; i < pData->curPluginCount; ++i)
for (uint i=0; i < pData->curPluginCount; ++i)
{
CarlaPlugin* const plugin(pData->plugins[i].plugin);

@@ -2097,7 +2011,7 @@ void CarlaEngine::offlineModeChanged(const bool isOfflineNow)
{
carla_debug("CarlaEngine::offlineModeChanged(%s)", bool2str(isOfflineNow));

for (unsigned int i=0; i < pData->curPluginCount; ++i)
for (uint i=0; i < pData->curPluginCount; ++i)
{
CarlaPlugin* const plugin(pData->plugins[i].plugin);

@@ -2138,33 +2052,7 @@ const char* const* CarlaEngine::getPatchbayConnections() const
{
carla_debug("CarlaEngine::getPatchbayConnections()");

if (pData->bufAudio.usePatchbay)
{
CARLA_SAFE_ASSERT_RETURN(pData->bufAudio.patchbay != nullptr, nullptr);
return pData->bufAudio.patchbay->getConnections();
}
else
{
CARLA_SAFE_ASSERT_RETURN(pData->bufAudio.rack != nullptr, nullptr);
return pData->bufAudio.rack->getConnections();
}
}

static int getCarlaPortIdFromName(const char* const shortname) noexcept
{
if (std::strcmp(shortname, "AudioIn1") == 0)
return RACK_PATCHBAY_PORT_AUDIO_IN1;
if (std::strcmp(shortname, "AudioIn2") == 0)
return RACK_PATCHBAY_PORT_AUDIO_IN2;
if (std::strcmp(shortname, "AudioOut1") == 0)
return RACK_PATCHBAY_PORT_AUDIO_OUT1;
if (std::strcmp(shortname, "AudioOut2") == 0)
return RACK_PATCHBAY_PORT_AUDIO_OUT2;
if (std::strcmp(shortname, "MidiIn") == 0)
return RACK_PATCHBAY_PORT_MIDI_IN;
if (std::strcmp(shortname, "MidiOut") == 0)
return RACK_PATCHBAY_PORT_MIDI_OUT;
return RACK_PATCHBAY_PORT_MAX;
return pData->bufAudio.getConnections();
}

void CarlaEngine::restorePatchbayConnection(const char* const connSource, const char* const connTarget)
@@ -2173,6 +2061,7 @@ void CarlaEngine::restorePatchbayConnection(const char* const connSource, const
CARLA_SAFE_ASSERT_RETURN(connTarget != nullptr && connTarget[0] != '\0',);
carla_debug("CarlaEngine::restorePatchbayConnection(\"%s\", \"%s\")", connSource, connTarget);

#if 0
if (pData->bufAudio.usePatchbay)
{
// TODO
@@ -2249,6 +2138,7 @@ void CarlaEngine::restorePatchbayConnection(const char* const connSource, const

patchbayConnect(targetGroup, targetPort, sourceGroup, sourcePort);
}
#endif
}
#endif



+ 166
- 43
source/backend/engine/CarlaEngineInternal.cpp View File

@@ -290,12 +290,12 @@ EngineRackBuffers::EngineRackBuffers(const uint32_t bufferSize)
resize(bufferSize);
}

EngineRackBuffers::~EngineRackBuffers()
EngineRackBuffers::~EngineRackBuffers() noexcept
{
clear();
}

void EngineRackBuffers::clear()
void EngineRackBuffers::clear() noexcept
{
lastConnectionId = 0;

@@ -348,6 +348,96 @@ void EngineRackBuffers::resize(const uint32_t bufferSize)
}
}

bool EngineRackBuffers::connect(CarlaEngine* const engine, const int groupA, const int portA, const int groupB, const int portB) noexcept
{
CARLA_SAFE_ASSERT_RETURN(engine != nullptr, false);
CARLA_SAFE_ASSERT_RETURN(groupA != groupB, false);
CARLA_SAFE_ASSERT_RETURN(groupA >= RACK_PATCHBAY_GROUP_CARLA && groupA < RACK_PATCHBAY_GROUP_MAX, false);
CARLA_SAFE_ASSERT_RETURN(groupB >= RACK_PATCHBAY_GROUP_CARLA && groupB < RACK_PATCHBAY_GROUP_MAX, false);
CARLA_SAFE_ASSERT_RETURN(portA >= 0, false);
CARLA_SAFE_ASSERT_RETURN(portB >= 0, false);

int carlaPort, otherPort;

if (groupA == RACK_PATCHBAY_GROUP_CARLA)
{
carlaPort = portA;
otherPort = portB;
}
else
{
CARLA_SAFE_ASSERT_RETURN(groupB == RACK_PATCHBAY_GROUP_CARLA, false);

carlaPort = portB;
otherPort = portA;
}

bool makeConnection = false;

switch (carlaPort)
{
case RACK_PATCHBAY_CARLA_PORT_AUDIO_IN1:
connectLock.enter();
connectedIn1.append(otherPort);
connectLock.leave();
makeConnection = true;
break;

case RACK_PATCHBAY_CARLA_PORT_AUDIO_IN2:
connectLock.enter();
connectedIn2.append(otherPort);
connectLock.leave();
makeConnection = true;
break;

case RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT1:
connectLock.enter();
connectedOut1.append(otherPort);
connectLock.leave();
makeConnection = true;
break;

case RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT2:
connectLock.enter();
connectedOut2.append(otherPort);
connectLock.leave();
makeConnection = true;
break;

case RACK_PATCHBAY_CARLA_PORT_MIDI_IN:
makeConnection = engine->connectRackMidiInPort(otherPort);
break;

case RACK_PATCHBAY_CARLA_PORT_MIDI_OUT:
makeConnection = engine->connectRackMidiOutPort(otherPort);
break;
}

if (! makeConnection)
{
engine->setLastError("Invalid rack connection");
return false;
}

ConnectionToId connectionToId;
connectionToId.id = lastConnectionId;
connectionToId.groupA = groupA;
connectionToId.portA = portA;
connectionToId.groupB = groupB;
connectionToId.portB = portB;

char strBuf[STR_MAX+1];
strBuf[STR_MAX] = '\0';
std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", groupA, portA, groupB, portB);

engine->callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, lastConnectionId, 0, 0, 0.0f, strBuf);

usedConnections.append(connectionToId);
++lastConnectionId;

return true;
}

const char* const* EngineRackBuffers::getConnections() const
{
if (usedConnections.count() == 0)
@@ -360,56 +450,54 @@ const char* const* EngineRackBuffers::getConnections() const
{
const ConnectionToId& connection(it.getValue());

const int otherPort((connection.portOut >= 0) ? connection.portOut : connection.portIn);
const int carlaPort((otherPort == connection.portOut) ? connection.portIn : connection.portOut);
CARLA_SAFE_ASSERT_CONTINUE(connection.groupA != connection.groupB);
CARLA_SAFE_ASSERT_CONTINUE(connection.groupA >= RACK_PATCHBAY_GROUP_CARLA && connection.groupA < RACK_PATCHBAY_GROUP_MAX);
CARLA_SAFE_ASSERT_CONTINUE(connection.groupB >= RACK_PATCHBAY_GROUP_CARLA && connection.groupB < RACK_PATCHBAY_GROUP_MAX);
CARLA_SAFE_ASSERT_CONTINUE(connection.portA >= 0);
CARLA_SAFE_ASSERT_CONTINUE(connection.portB >= 0);

if (otherPort >= RACK_PATCHBAY_GROUP_MIDI_OUT*1000)
{
CARLA_SAFE_ASSERT_CONTINUE(carlaPort == RACK_PATCHBAY_PORT_MIDI_IN);

const int portId(otherPort-RACK_PATCHBAY_GROUP_MIDI_OUT*1000);
int carlaPort, otherPort;

std::sprintf(strBuf, "MidiOut:%i", portId+1);
connList.append(carla_strdup(strBuf));

connList.append(carla_strdup("Carla:MidiOut"));
}
else if (otherPort >= RACK_PATCHBAY_GROUP_MIDI_IN*1000)
if (connection.groupA == RACK_PATCHBAY_GROUP_CARLA)
{
CARLA_SAFE_ASSERT_CONTINUE(carlaPort == RACK_PATCHBAY_PORT_MIDI_OUT);

const int portId(otherPort-RACK_PATCHBAY_GROUP_MIDI_IN*1000);

connList.append(carla_strdup("Carla:MidiIn"));

std::sprintf(strBuf, "MidiIn:%i", portId+1);
connList.append(carla_strdup(strBuf));
carlaPort = connection.portA;
otherPort = connection.portB;
}
else if (otherPort >= RACK_PATCHBAY_GROUP_AUDIO_OUT*1000)
else
{
CARLA_SAFE_ASSERT_CONTINUE(carlaPort == RACK_PATCHBAY_PORT_AUDIO_OUT1 || carlaPort == RACK_PATCHBAY_PORT_AUDIO_OUT2);

const int portId(otherPort-RACK_PATCHBAY_GROUP_AUDIO_OUT*1000);
CARLA_SAFE_ASSERT_CONTINUE(connection.groupB == RACK_PATCHBAY_GROUP_CARLA);

std::sprintf(strBuf, "AudioOut:%i", portId+1);
connList.append(carla_strdup(strBuf));

connList.append(carla_strdup((carlaPort == RACK_PATCHBAY_PORT_AUDIO_OUT1) ? "Carla:AudioOut1" : "Carla:AudioOut2"));
carlaPort = connection.portB;
otherPort = connection.portA;
}
else if (otherPort >= RACK_PATCHBAY_GROUP_AUDIO_IN*1000)

switch (carlaPort)
{
CARLA_SAFE_ASSERT_CONTINUE(carlaPort == RACK_PATCHBAY_PORT_AUDIO_IN1 || carlaPort == RACK_PATCHBAY_PORT_AUDIO_IN2);
case RACK_PATCHBAY_CARLA_PORT_AUDIO_IN1:
case RACK_PATCHBAY_CARLA_PORT_AUDIO_IN2:
std::sprintf(strBuf, "AudioIn:%i", otherPort+1);
connList.append(carla_strdup(strBuf));
connList.append(carla_strdup((carlaPort == RACK_PATCHBAY_CARLA_PORT_AUDIO_IN1) ? "Carla:AudioIn1" : "Carla:AudioIn2"));
break;

const int portId(otherPort-RACK_PATCHBAY_GROUP_AUDIO_IN*1000);
case RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT1:
case RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT2:
connList.append(carla_strdup((carlaPort == RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT1) ? "Carla:AudioOut1" : "Carla:AudioOut2"));
std::sprintf(strBuf, "AudioOut:%i", otherPort+1);
connList.append(carla_strdup(strBuf));
break;

connList.append(carla_strdup((carlaPort == RACK_PATCHBAY_PORT_AUDIO_IN1) ? "Carla:AudioIn1" : "Carla:AudioIn2"));
case RACK_PATCHBAY_CARLA_PORT_MIDI_IN:
std::sprintf(strBuf, "MidiIn:%i", otherPort+1);
connList.append(carla_strdup(strBuf));
connList.append(carla_strdup("Carla:MidiIn"));
break;

std::sprintf(strBuf, "AudioIn:%i", portId+1);
case RACK_PATCHBAY_CARLA_PORT_MIDI_OUT:
connList.append(carla_strdup("Carla:MidiOut"));
std::sprintf(strBuf, "MidiOut:%i", otherPort+1);
connList.append(carla_strdup(strBuf));
}
else
{
CARLA_SAFE_ASSERT_RETURN(false, nullptr);
break;
}
}

@@ -437,12 +525,12 @@ EnginePatchbayBuffers::EnginePatchbayBuffers(const uint32_t bufferSize)
resize(bufferSize);
}

EnginePatchbayBuffers::~EnginePatchbayBuffers()
EnginePatchbayBuffers::~EnginePatchbayBuffers() noexcept
{
clear();
}

void EnginePatchbayBuffers::clear()
void EnginePatchbayBuffers::clear() noexcept
{
}

@@ -450,6 +538,13 @@ void EnginePatchbayBuffers::resize(const uint32_t /*bufferSize*/)
{
}

bool EnginePatchbayBuffers::connect(CarlaEngine* const engine, const int, const int, const int, const int) noexcept
{
CARLA_SAFE_ASSERT_RETURN(engine != nullptr, false);

return false;
}

const char* const* EnginePatchbayBuffers::getConnections() const
{
return nullptr;
@@ -490,7 +585,7 @@ void EngineInternalAudio::initPatchbay() noexcept
}
}

void EngineInternalAudio::clear()
void EngineInternalAudio::clear() noexcept
{
isReady = false;
inCount = 0;
@@ -540,6 +635,34 @@ void EngineInternalAudio::resize(const uint32_t bufferSize)
}
}

bool EngineInternalAudio::connect(CarlaEngine* const engine, const int groupA, const int portA, const int groupB, const int portB) noexcept
{
if (usePatchbay)
{
CARLA_SAFE_ASSERT_RETURN(patchbay != nullptr, nullptr);
return patchbay->connect(engine, groupA, portA, groupB, portB);
}
else
{
CARLA_SAFE_ASSERT_RETURN(rack != nullptr, nullptr);
return rack->connect(engine, groupA, portA, groupB, portB);
}
}

const char* const* EngineInternalAudio::getConnections() const
{
if (usePatchbay)
{
CARLA_SAFE_ASSERT_RETURN(patchbay != nullptr, nullptr);
return patchbay->getConnections();
}
else
{
CARLA_SAFE_ASSERT_RETURN(rack != nullptr, nullptr);
return rack->getConnections();
}
}

// -----------------------------------------------------------------------
// InternalEvents



+ 47
- 21
source/backend/engine/CarlaEngineInternal.hpp View File

@@ -48,22 +48,21 @@ const unsigned short kMaxEngineEventInternalCount = 512;
// Rack Patchbay stuff

enum RackPatchbayGroupIds {
RACK_PATCHBAY_GROUP_CARLA = 0,
RACK_PATCHBAY_GROUP_AUDIO_IN = 1,
RACK_PATCHBAY_GROUP_AUDIO_OUT = 2,
RACK_PATCHBAY_GROUP_MIDI_IN = 3,
RACK_PATCHBAY_GROUP_MIDI_OUT = 4,
RACK_PATCHBAY_GROUP_MAX = 5
RACK_PATCHBAY_GROUP_CARLA = 0,
RACK_PATCHBAY_GROUP_AUDIO = 1,
RACK_PATCHBAY_GROUP_MIDI = 2,
RACK_PATCHBAY_GROUP_MAX = 3
};

enum RackPatchbayPortIds {
RACK_PATCHBAY_PORT_AUDIO_IN1 = -1,
RACK_PATCHBAY_PORT_AUDIO_IN2 = -2,
RACK_PATCHBAY_PORT_AUDIO_OUT1 = -3,
RACK_PATCHBAY_PORT_AUDIO_OUT2 = -4,
RACK_PATCHBAY_PORT_MIDI_IN = -5,
RACK_PATCHBAY_PORT_MIDI_OUT = -6,
RACK_PATCHBAY_PORT_MAX = -7
enum RackPatchbayCarlaPortIds {
RACK_PATCHBAY_CARLA_PORT_NULL = 0,
RACK_PATCHBAY_CARLA_PORT_AUDIO_IN1 = 1,
RACK_PATCHBAY_CARLA_PORT_AUDIO_IN2 = 2,
RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT1 = 3,
RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT2 = 4,
RACK_PATCHBAY_CARLA_PORT_MIDI_IN = 5,
RACK_PATCHBAY_CARLA_PORT_MIDI_OUT = 6,
RACK_PATCHBAY_CARLA_PORT_MAX = 7
};

struct PortNameToId {
@@ -73,10 +72,30 @@ struct PortNameToId {

struct ConnectionToId {
uint id;
int portOut;
int portIn;
int groupA;
int portA;
int groupB;
int portB;
};

static inline
int getCarlaRackPortIdFromName(const char* const shortname) noexcept
{
if (std::strcmp(shortname, "AudioIn1") == 0)
return RACK_PATCHBAY_CARLA_PORT_AUDIO_IN1;
if (std::strcmp(shortname, "AudioIn2") == 0)
return RACK_PATCHBAY_CARLA_PORT_AUDIO_IN2;
if (std::strcmp(shortname, "AudioOut1") == 0)
return RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT1;
if (std::strcmp(shortname, "AudioOut2") == 0)
return RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT2;
if (std::strcmp(shortname, "MidiIn") == 0)
return RACK_PATCHBAY_CARLA_PORT_MIDI_IN;
if (std::strcmp(shortname, "MidiOut") == 0)
return RACK_PATCHBAY_CARLA_PORT_MIDI_OUT;
return RACK_PATCHBAY_CARLA_PORT_NULL;
}

// -----------------------------------------------------------------------
// EngineRackBuffers

@@ -95,9 +114,11 @@ struct EngineRackBuffers {
LinkedList<ConnectionToId> usedConnections;

EngineRackBuffers(const uint32_t bufferSize);
~EngineRackBuffers();
void clear();
~EngineRackBuffers() noexcept;
void clear() noexcept;
void resize(const uint32_t bufferSize);

bool connect(CarlaEngine* const engine, const int groupA, const int portA, const int groupB, const int port) noexcept;
const char* const* getConnections() const;

CARLA_DECLARE_NON_COPY_STRUCT(EngineRackBuffers)
@@ -109,9 +130,11 @@ struct EngineRackBuffers {
struct EnginePatchbayBuffers {
// TODO
EnginePatchbayBuffers(const uint32_t bufferSize);
~EnginePatchbayBuffers();
void clear();
~EnginePatchbayBuffers() noexcept;
void clear() noexcept;
void resize(const uint32_t bufferSize);

bool connect(CarlaEngine* const engine, const int groupA, const int portA, const int groupB, const int port) noexcept;
const char* const* getConnections() const;

CARLA_DECLARE_NON_COPY_STRUCT(EnginePatchbayBuffers)
@@ -135,10 +158,13 @@ struct EngineInternalAudio {
EngineInternalAudio() noexcept;
~EngineInternalAudio() noexcept;
void initPatchbay() noexcept;
void clear();
void clear() noexcept;
void create(const uint32_t bufferSize);
void resize(const uint32_t bufferSize);

bool connect(CarlaEngine* const engine, const int groupA, const int portA, const int groupB, const int port) noexcept;
const char* const* getConnections() const;

CARLA_DECLARE_NON_COPY_STRUCT(EngineInternalAudio)
};



+ 1
- 0
source/backend/engine/CarlaEngineJack.cpp View File

@@ -968,6 +968,7 @@ public:
fUsedConnections.append(connectionToId);

char strBuf[STR_MAX+1];
strBuf[STR_MAX] = '\0';
std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", groupA, portA, groupB, portB);

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0.0f, strBuf);


+ 2
- 131
source/backend/engine/CarlaEngineJuce.cpp View File

@@ -266,7 +266,7 @@ public:
else
std::snprintf(strBuf, STR_MAX, "capture_%i", i+1);

callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_IN, static_cast<int>(RACK_PATCHBAY_GROUP_AUDIO_IN*1000 + i), PATCHBAY_PORT_TYPE_AUDIO, 0.0f, strBuf);
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_IN, static_cast<int>(i), PATCHBAY_PORT_TYPE_AUDIO, 0.0f, strBuf);
}
}

@@ -291,144 +291,15 @@ public:
else
std::snprintf(strBuf, STR_MAX, "playback_%i", i+1);

callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_OUT, static_cast<int>(RACK_PATCHBAY_GROUP_AUDIO_OUT*1000 + i), PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, strBuf);
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_OUT, static_cast<int>(i), static_cast<int>(PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT), 0.0f, strBuf);
}
}

#if 0 // midi implemented yet
// MIDI In
{
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_MIDI_IN, PATCHBAY_ICON_HARDWARE, -1, 0.0f, "Readable MIDI ports");

for (unsigned int i=0, count=fDummyMidiIn.getPortCount(); i < count; ++i)
{
PortNameToId portNameToId;
portNameToId.portId = RACK_PATCHBAY_GROUP_MIDI_IN*1000 + i;
std::strncpy(portNameToId.name, fDummyMidiIn.getPortName(i).c_str(), STR_MAX);
fUsedMidiIns.append(portNameToId);

callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_MIDI_IN, portNameToId.portId, PATCHBAY_PORT_TYPE_MIDI, 0.0f, portNameToId.name);
}
}

// MIDI Out
{
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_MIDI_OUT, PATCHBAY_ICON_HARDWARE, -1, 0.0f, "Writable MIDI ports");

for (unsigned int i=0, count=fDummyMidiOut.getPortCount(); i < count; ++i)
{
PortNameToId portNameToId;
portNameToId.portId = RACK_PATCHBAY_GROUP_MIDI_OUT*1000 + i;
std::strncpy(portNameToId.name, fDummyMidiOut.getPortName(i).c_str(), STR_MAX);
fUsedMidiOuts.append(portNameToId);

callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, 0, RACK_PATCHBAY_GROUP_MIDI_OUT, portNameToId.portId, PATCHBAY_PORT_TYPE_MIDI|PATCHBAY_PORT_IS_INPUT, portNameToId.name);
}
}
#endif

#if 0
// Connections
rack->connectLock.lock();

for (LinkedList<uint>::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next())
{
const uint& port(it.getValue());
CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.inCount);

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_GROUP_AUDIO_IN*1000 + port;
connectionToId.portIn = RACK_PATCHBAY_PORT_AUDIO_IN1;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
}

for (LinkedList<uint>::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next())
{
const uint& port(it.getValue());
CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.inCount);

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_GROUP_AUDIO_IN*1000 + port;
connectionToId.portIn = RACK_PATCHBAY_PORT_AUDIO_IN2;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
}

for (LinkedList<uint>::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next())
{
const uint& port(it.getValue());
CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.outCount);

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_PORT_AUDIO_OUT1;
connectionToId.portIn = RACK_PATCHBAY_GROUP_AUDIO_OUT*1000 + port;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
}

for (LinkedList<uint>::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next())
{
const uint& port(it.getValue());
CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.outCount);

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_PORT_AUDIO_OUT2;
connectionToId.portIn = RACK_PATCHBAY_GROUP_AUDIO_OUT*1000 + port;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
}

pData->bufAudio.rack->connectLock.unlock();

#if 0
for (LinkedList<MidiPort>::Itenerator it=fMidiIns.begin(); it.valid(); it.next())
{
const MidiPort& midiPort(it.getValue());

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_GROUP_MIDI_IN*1000 + midiPort.portId;
connectionToId.portIn = RACK_PATCHBAY_PORT_MIDI_IN;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
}

for (LinkedList<MidiPort>::Itenerator it=fMidiOuts.begin(); it.valid(); it.next())
{
const MidiPort& midiPort(it.getValue());

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_PORT_MIDI_OUT;
connectionToId.portIn = RACK_PATCHBAY_GROUP_MIDI_OUT*1000 + midiPort.portId;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
}
#endif
#endif

return true;
}


+ 60
- 44
source/backend/engine/CarlaEngineRtAudio.cpp View File

@@ -434,12 +434,12 @@ public:
{
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_CARLA, PATCHBAY_ICON_CARLA, -1, 0.0f, getName());

callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_AUDIO_IN1, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, "audio-in1");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_AUDIO_IN2, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, "audio-in2");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_AUDIO_OUT1, PATCHBAY_PORT_TYPE_AUDIO, 0.0f, "audio-out1");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_AUDIO_OUT2, PATCHBAY_PORT_TYPE_AUDIO, 0.0f, "audio-out2");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_MIDI_IN, PATCHBAY_PORT_TYPE_MIDI|PATCHBAY_PORT_IS_INPUT, 0.0f, "midi-in");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_MIDI_OUT, PATCHBAY_PORT_TYPE_MIDI, 0.0f, "midi-out");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_CARLA_PORT_AUDIO_IN1, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, "audio-in1");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_CARLA_PORT_AUDIO_IN2, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, "audio-in2");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT1, PATCHBAY_PORT_TYPE_AUDIO, 0.0f, "audio-out1");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT2, PATCHBAY_PORT_TYPE_AUDIO, 0.0f, "audio-out2");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_CARLA_PORT_MIDI_IN, PATCHBAY_PORT_TYPE_MIDI|PATCHBAY_PORT_IS_INPUT, 0.0f, "midi-in");
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_CARLA_PORT_MIDI_OUT, PATCHBAY_PORT_TYPE_MIDI, 0.0f, "midi-out");
}

// Audio In
@@ -454,7 +454,7 @@ public:
for (uint i=0; i < pData->bufAudio.inCount; ++i)
{
std::snprintf(strBuf, STR_MAX, "capture_%i", i+1);
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_IN, int(RACK_PATCHBAY_GROUP_AUDIO_IN*1000 + i), int(PATCHBAY_PORT_TYPE_AUDIO), 0.0f, strBuf);
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_IN, static_cast<int>(i), PATCHBAY_PORT_TYPE_AUDIO, 0.0f, strBuf);
}
}

@@ -470,7 +470,7 @@ public:
for (uint i=0; i < pData->bufAudio.outCount; ++i)
{
std::snprintf(strBuf, STR_MAX, "playback_%i", i+1);
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_OUT, int(RACK_PATCHBAY_GROUP_AUDIO_OUT*1000 + i), int(PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT), 0.0f, strBuf);
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_OUT, static_cast<int>(i), PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, strBuf);
}
}

@@ -481,7 +481,7 @@ public:
for (uint i=0, count=fDummyMidiIn.getPortCount(); i < count; ++i)
{
PortNameToId portNameToId;
portNameToId.portId = int(RACK_PATCHBAY_GROUP_MIDI_IN*1000 + i);
portNameToId.portId = static_cast<int>(i);
std::strncpy(portNameToId.name, fDummyMidiIn.getPortName(i).c_str(), STR_MAX);
portNameToId.name[STR_MAX] = '\0';
fUsedMidiIns.append(portNameToId);
@@ -490,23 +490,21 @@ public:
}
}

#if 0 // midi-out not implemented yet
// MIDI Out
{
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_MIDI_OUT, PATCHBAY_ICON_HARDWARE, -1, 0.0f, "Writable MIDI ports");

for (unsigned int i=0, count=fDummyMidiOut.getPortCount(); i < count; ++i)
for (uint i=0, count=fDummyMidiOut.getPortCount(); i < count; ++i)
{
PortNameToId portNameToId;
portNameToId.portId = int(RACK_PATCHBAY_GROUP_MIDI_OUT*1000 + i);
portNameToId.portId = static_cast<int>(i);
std::strncpy(portNameToId.name, fDummyMidiOut.getPortName(i).c_str(), STR_MAX);
portNameToId.name[STR_MAX] = '\0';
fUsedMidiOuts.append(portNameToId);

callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, 0, RACK_PATCHBAY_GROUP_MIDI_OUT, portNameToId.portId, PATCHBAY_PORT_TYPE_MIDI|PATCHBAY_PORT_IS_INPUT, portNameToId.name);
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_MIDI_OUT, portNameToId.portId, PATCHBAY_PORT_TYPE_MIDI|PATCHBAY_PORT_IS_INPUT, 0.0f, portNameToId.name);
}
}
#endif

// Connections
rack->connectLock.enter();
@@ -517,14 +515,17 @@ public:
CARLA_SAFE_ASSERT_CONTINUE(port >= 0 && port < static_cast<int>(pData->bufAudio.inCount));

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_GROUP_AUDIO_IN*1000 + port;
connectionToId.portIn = RACK_PATCHBAY_PORT_AUDIO_IN1;
connectionToId.id = rack->lastConnectionId;
connectionToId.groupOut = RACK_PATCHBAY_GROUP_AUDIO_IN;
connectionToId.portOut = port;
connectionToId.groupIn = RACK_PATCHBAY_GROUP_CARLA;
connectionToId.portIn = RACK_PATCHBAY_CARLA_PORT_AUDIO_IN1;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);
std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupOut, connectionToId.portOut, connectionToId.groupIn, connectionToId.portIn);
callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, 0, 0, 0.0f, strBuf);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
++rack->lastConnectionId;
}

for (LinkedList<int>::Itenerator it = rack->connectedIn2.begin(); it.valid(); it.next())
@@ -533,14 +534,17 @@ public:
CARLA_SAFE_ASSERT_CONTINUE(port >= 0 && port < static_cast<int>(pData->bufAudio.inCount));

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_GROUP_AUDIO_IN*1000 + port;
connectionToId.portIn = RACK_PATCHBAY_PORT_AUDIO_IN2;
connectionToId.id = rack->lastConnectionId;
connectionToId.groupOut = RACK_PATCHBAY_GROUP_AUDIO_IN;
connectionToId.portOut = port;
connectionToId.groupIn = RACK_PATCHBAY_GROUP_CARLA;
connectionToId.portIn = RACK_PATCHBAY_CARLA_PORT_AUDIO_IN2;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);
std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupOut, connectionToId.portOut, connectionToId.groupIn, connectionToId.portIn);
callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, 0, 0, 0.0f, strBuf);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
++rack->lastConnectionId;
}

for (LinkedList<int>::Itenerator it = rack->connectedOut1.begin(); it.valid(); it.next())
@@ -549,14 +553,17 @@ public:
CARLA_SAFE_ASSERT_CONTINUE(port >= 0 && port < static_cast<int>(pData->bufAudio.outCount));

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_PORT_AUDIO_OUT1;
connectionToId.portIn = RACK_PATCHBAY_GROUP_AUDIO_OUT*1000 + port;
connectionToId.id = rack->lastConnectionId;
connectionToId.groupOut = RACK_PATCHBAY_GROUP_CARLA;
connectionToId.portOut = RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT1;
connectionToId.groupIn = RACK_PATCHBAY_GROUP_AUDIO_OUT;
connectionToId.portIn = port;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);
std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupOut, connectionToId.portOut, connectionToId.groupIn, connectionToId.portIn);
callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, 0, 0, 0.0f, strBuf);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
++rack->lastConnectionId;
}

for (LinkedList<int>::Itenerator it = rack->connectedOut2.begin(); it.valid(); it.next())
@@ -565,14 +572,17 @@ public:
CARLA_SAFE_ASSERT_CONTINUE(port >= 0 && port < static_cast<int>(pData->bufAudio.outCount));

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_PORT_AUDIO_OUT2;
connectionToId.portIn = RACK_PATCHBAY_GROUP_AUDIO_OUT*1000 + port;
connectionToId.id = rack->lastConnectionId;
connectionToId.groupOut = RACK_PATCHBAY_GROUP_CARLA;
connectionToId.portOut = RACK_PATCHBAY_CARLA_PORT_AUDIO_OUT2;
connectionToId.groupIn = RACK_PATCHBAY_GROUP_AUDIO_OUT;
connectionToId.portIn = port;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);
std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupOut, connectionToId.portOut, connectionToId.groupIn, connectionToId.portIn);
callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, 0, 0, 0.0f, strBuf);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
++rack->lastConnectionId;
}

pData->bufAudio.rack->connectLock.leave();
@@ -582,14 +592,17 @@ public:
const MidiPort& midiPort(it.getValue());

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_GROUP_MIDI_IN*1000 + midiPort.portId;
connectionToId.portIn = RACK_PATCHBAY_PORT_MIDI_IN;
connectionToId.id = rack->lastConnectionId;
connectionToId.groupOut = RACK_PATCHBAY_GROUP_MIDI_IN;
connectionToId.portOut = midiPort.portId;
connectionToId.groupIn = RACK_PATCHBAY_GROUP_CARLA;
connectionToId.portIn = RACK_PATCHBAY_CARLA_PORT_MIDI_IN;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);
std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupOut, connectionToId.portOut, connectionToId.groupIn, connectionToId.portIn);
callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, 0, 0, 0.0f, strBuf);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
++rack->lastConnectionId;
}

for (LinkedList<MidiPort>::Itenerator it=fMidiOuts.begin(); it.valid(); it.next())
@@ -597,14 +610,17 @@ public:
const MidiPort& midiPort(it.getValue());

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;
connectionToId.portOut = RACK_PATCHBAY_PORT_MIDI_OUT;
connectionToId.portIn = RACK_PATCHBAY_GROUP_MIDI_OUT*1000 + midiPort.portId;
connectionToId.id = rack->lastConnectionId;
connectionToId.groupOut = RACK_PATCHBAY_GROUP_CARLA;
connectionToId.portOut = RACK_PATCHBAY_CARLA_PORT_MIDI_OUT;
connectionToId.groupIn = RACK_PATCHBAY_GROUP_MIDI_OUT;
connectionToId.portIn = midiPort.portId;

callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, connectionToId.portOut, connectionToId.portIn, 0.0f, nullptr);
std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupOut, connectionToId.portOut, connectionToId.groupIn, connectionToId.portIn);
callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, rack->lastConnectionId, 0, 0, 0.0f, strBuf);

rack->usedConnections.append(connectionToId);
rack->lastConnectionId++;
++rack->lastConnectionId;
}

return true;


+ 1
- 1
source/utils/LinkedList.hpp View File

@@ -448,7 +448,7 @@ template<typename T>
class LinkedList : public AbstractLinkedList<T>
{
public:
LinkedList() {}
LinkedList() noexcept {}

private:
typename AbstractLinkedList<T>::Data* _allocate() noexcept override


+ 1
- 1
source/utils/RtLinkedList.hpp View File

@@ -98,7 +98,7 @@ public:
// -------------------------------------------------------------------
// Now the actual rt-linkedlist code

RtLinkedList(Pool& memPool)
RtLinkedList(Pool& memPool) noexcept
: fMemPool(memPool) {}

bool append_sleepy(const T& value) noexcept


Loading…
Cancel
Save