@@ -230,9 +230,9 @@ struct CARLA_API EngineEvent { | |||||
* Engine options. | * Engine options. | ||||
*/ | */ | ||||
struct CARLA_API EngineOptions { | struct CARLA_API EngineOptions { | ||||
EngineProcessMode processMode; | |||||
EngineProcessMode processMode; | |||||
EngineTransportMode transportMode; | EngineTransportMode transportMode; | ||||
const char* transportExtra; | |||||
const char* transportExtra; | |||||
bool forceStereo; | bool forceStereo; | ||||
bool preferPluginBridges; | bool preferPluginBridges; | ||||
@@ -620,18 +620,14 @@ protected: | |||||
#endif | #endif | ||||
}; | }; | ||||
// ----------------------------------------------------------------------- | |||||
/*! | /*! | ||||
* Carla Engine Meta CV port. | |||||
* Carla Engine Meta CV Port. | |||||
* FIXME needs a better name... | * FIXME needs a better name... | ||||
*/ | */ | ||||
class CARLA_API CarlaEngineCVSourcePorts | class CARLA_API CarlaEngineCVSourcePorts | ||||
{ | { | ||||
protected: | |||||
/*! | |||||
* The constructor, protected. | |||||
*/ | |||||
CarlaEngineCVSourcePorts(); | |||||
public: | public: | ||||
/*! | /*! | ||||
* The destructor. | * The destructor. | ||||
@@ -662,9 +658,15 @@ public: | |||||
#ifndef DOXYGEN | #ifndef DOXYGEN | ||||
protected: | protected: | ||||
/** @internal */ | |||||
struct ProtectedData; | struct ProtectedData; | ||||
ProtectedData* const pData; | ProtectedData* const pData; | ||||
/*! | |||||
* The constructor, protected. | |||||
*/ | |||||
CarlaEngineCVSourcePorts(); | |||||
CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineCVSourcePorts) | CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineCVSourcePorts) | ||||
#endif | #endif | ||||
}; | }; | ||||
@@ -672,7 +674,7 @@ protected: | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
/*! | /*! | ||||
* Carla Engine client. | |||||
* Carla Engine Client. | |||||
* Each plugin requires one client from the engine (created via CarlaEngine::addClient()). | * Each plugin requires one client from the engine (created via CarlaEngine::addClient()). | ||||
* @note This is a virtual class, some engine types provide custom functionality. | * @note This is a virtual class, some engine types provide custom functionality. | ||||
*/ | */ | ||||
@@ -764,9 +766,7 @@ public: | |||||
#ifndef DOXYGEN | #ifndef DOXYGEN | ||||
protected: | protected: | ||||
/*! | |||||
* Internal data, for CarlaEngineClient subclasses only. | |||||
*/ | |||||
/** @internal */ | |||||
struct ProtectedData; | struct ProtectedData; | ||||
ProtectedData* const pData; | ProtectedData* const pData; | ||||
@@ -379,7 +379,14 @@ void CarlaEngine::idle() noexcept | |||||
CarlaEngineClient* CarlaEngine::addClient(CarlaPlugin* const plugin) | CarlaEngineClient* CarlaEngine::addClient(CarlaPlugin* const plugin) | ||||
{ | { | ||||
return new CarlaEngineClient2(*this, pData->graph, plugin); | |||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
return new CarlaEngineClientForStandalone(*this, pData->graph, plugin); | |||||
#else | |||||
return new CarlaEngineClientForBridge(*this); | |||||
// unused | |||||
(void)plugin; | |||||
#endif | |||||
} | } | ||||
float CarlaEngine::getDSPLoad() const noexcept | float CarlaEngine::getDSPLoad() const noexcept | ||||
@@ -19,7 +19,7 @@ | |||||
# error This file should not be compiled if not building bridge | # error This file should not be compiled if not building bridge | ||||
#endif | #endif | ||||
#include "CarlaEngineInternal.hpp" | |||||
#include "CarlaEngineClient.hpp" | |||||
#include "CarlaPlugin.hpp" | #include "CarlaPlugin.hpp" | ||||
#include "CarlaBackendUtils.hpp" | #include "CarlaBackendUtils.hpp" | ||||
@@ -62,12 +62,18 @@ struct LatencyChangedCallback { | |||||
virtual void latencyChanged(const uint32_t samples) noexcept = 0; | virtual void latencyChanged(const uint32_t samples) noexcept = 0; | ||||
}; | }; | ||||
class CarlaEngineBridgeClient : public CarlaEngineClient | |||||
class CarlaEngineBridgeClient : public CarlaEngineClientForSubclassing | |||||
{ | { | ||||
public: | public: | ||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
CarlaEngineBridgeClient(const CarlaEngine& engine, EngineInternalGraph& egraph, CarlaPlugin* const plugin, LatencyChangedCallback* const cb) | |||||
: CarlaEngineClientForSubclassing(engine, egraph, plugin), | |||||
fLatencyCallback(cb) {} | |||||
#else | |||||
CarlaEngineBridgeClient(const CarlaEngine& engine, LatencyChangedCallback* const cb) | CarlaEngineBridgeClient(const CarlaEngine& engine, LatencyChangedCallback* const cb) | ||||
: CarlaEngineClient(engine), | |||||
: CarlaEngineClientForSubclassing(engine), | |||||
fLatencyCallback(cb) {} | fLatencyCallback(cb) {} | ||||
#endif | |||||
protected: | protected: | ||||
void setLatency(const uint32_t samples) noexcept override | void setLatency(const uint32_t samples) noexcept override | ||||
@@ -287,9 +293,13 @@ public: | |||||
fShmNonRtServerControl.commitWrite(); | fShmNonRtServerControl.commitWrite(); | ||||
} | } | ||||
CarlaEngineClient* addClient(CarlaPlugin* const) override | |||||
CarlaEngineClient* addClient(CarlaPlugin* const plugin) override | |||||
{ | { | ||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
return new CarlaEngineBridgeClient(*this, pData->graph, plugin, this); | |||||
#else | |||||
return new CarlaEngineBridgeClient(*this, this); | return new CarlaEngineBridgeClient(*this, this); | ||||
#endif | |||||
} | } | ||||
void idle() noexcept override | void idle() noexcept override | ||||
@@ -22,24 +22,8 @@ | |||||
CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
CarlaEngineClient2::CarlaEngineClient2(const CarlaEngine& engine, EngineInternalGraph& egraph, CarlaPlugin* const plugin) | |||||
: CarlaEngineClient(new ProtectedData(engine, egraph, plugin)) | |||||
{ | |||||
} | |||||
CarlaEngineClient2::~CarlaEngineClient2() | |||||
{ | |||||
} | |||||
PatchbayGraph* CarlaEngineClient2::getPatchbayGraph() const noexcept | |||||
{ | |||||
return pData->egraph.getPatchbayGraph(); | |||||
} | |||||
CarlaPlugin* CarlaEngineClient2::getPlugin() const noexcept | |||||
{ | |||||
return pData->plugin; | |||||
} | |||||
// ----------------------------------------------------------------------- | |||||
// Carla Engine Client | |||||
CarlaEngineClient::CarlaEngineClient(ProtectedData* const p) | CarlaEngineClient::CarlaEngineClient(ProtectedData* const p) | ||||
: pData(p) | : pData(p) | ||||
@@ -49,10 +33,7 @@ CarlaEngineClient::CarlaEngineClient(ProtectedData* const p) | |||||
CarlaEngineClient::~CarlaEngineClient() noexcept | CarlaEngineClient::~CarlaEngineClient() noexcept | ||||
{ | { | ||||
CARLA_SAFE_ASSERT(! pData->active); | |||||
carla_debug("CarlaEngineClient::~CarlaEngineClient()"); | carla_debug("CarlaEngineClient::~CarlaEngineClient()"); | ||||
delete pData; | |||||
} | } | ||||
void CarlaEngineClient::activate() noexcept | void CarlaEngineClient::activate() noexcept | ||||
@@ -289,11 +270,6 @@ void CarlaEngineClient::_clearPorts() | |||||
pData->eventOutList.clear(); | pData->eventOutList.clear(); | ||||
} | } | ||||
// void* CarlaEngineClient::_getNode() const noexcept | |||||
// { | |||||
// return pData->node; | |||||
// } | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE |
@@ -19,35 +19,14 @@ | |||||
#define CARLA_ENGINE_CLIENT_HPP_INCLUDED | #define CARLA_ENGINE_CLIENT_HPP_INCLUDED | ||||
#include "CarlaEngine.hpp" | #include "CarlaEngine.hpp" | ||||
#include "CarlaEngineInternal.hpp" | |||||
#include "CarlaEnginePorts.hpp" | |||||
#include "CarlaStringList.hpp" | #include "CarlaStringList.hpp" | ||||
CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
class EngineInternalGraph; | |||||
class PatchbayGraph; | |||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
// ----------------------------------------------------------------------- | |||||
// Carla Engine Meta CV port | |||||
class CarlaEngineCVSourcePorts2 : public CarlaEngineCVSourcePorts | |||||
{ | |||||
public: | |||||
CarlaEngineCVSourcePorts2() : CarlaEngineCVSourcePorts() {} | |||||
~CarlaEngineCVSourcePorts2() override {} | |||||
void setGraphAndPlugin(PatchbayGraph* const graph, CarlaPlugin* const plugin) noexcept | |||||
{ | |||||
pData->graph = graph; | |||||
pData->plugin = plugin; | |||||
} | |||||
}; | |||||
#endif | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// Carla Engine client (Abstract) | |||||
// Carla Engine Client Protected Data | |||||
struct CarlaEngineClient::ProtectedData { | struct CarlaEngineClient::ProtectedData { | ||||
const CarlaEngine& engine; | const CarlaEngine& engine; | ||||
@@ -56,7 +35,7 @@ struct CarlaEngineClient::ProtectedData { | |||||
uint32_t latency; | uint32_t latency; | ||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | ||||
CarlaEngineCVSourcePorts2 cvSourcePorts; | |||||
CarlaEngineCVSourcePortsForStandalone cvSourcePorts; | |||||
EngineInternalGraph& egraph; | EngineInternalGraph& egraph; | ||||
CarlaPlugin* const plugin; | CarlaPlugin* const plugin; | ||||
#endif | #endif | ||||
@@ -68,7 +47,11 @@ struct CarlaEngineClient::ProtectedData { | |||||
CarlaStringList eventInList; | CarlaStringList eventInList; | ||||
CarlaStringList eventOutList; | CarlaStringList eventOutList; | ||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
ProtectedData(const CarlaEngine& eng, EngineInternalGraph& eg, CarlaPlugin* const p) noexcept | ProtectedData(const CarlaEngine& eng, EngineInternalGraph& eg, CarlaPlugin* const p) noexcept | ||||
#else | |||||
ProtectedData(const CarlaEngine& eng) noexcept | |||||
#endif | |||||
: engine(eng), | : engine(eng), | ||||
active(false), | active(false), | ||||
latency(0), | latency(0), | ||||
@@ -91,17 +74,50 @@ struct CarlaEngineClient::ProtectedData { | |||||
}; | }; | ||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// Carla Engine Client | |||||
class CarlaEngineClient2 : public CarlaEngineClient | |||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
class CarlaEngineClientForStandalone : public CarlaEngineClient | |||||
{ | { | ||||
public: | public: | ||||
CarlaEngineClient2(const CarlaEngine& engine, EngineInternalGraph& egraph, CarlaPlugin* const plugin); | |||||
virtual ~CarlaEngineClient2() override; | |||||
CarlaEngineClientForStandalone(const CarlaEngine& engine, EngineInternalGraph& egraph, CarlaPlugin* const plugin) | |||||
: CarlaEngineClient(new ProtectedData(engine, egraph, plugin)) {} | |||||
~CarlaEngineClientForStandalone() override | |||||
{ | |||||
delete pData; | |||||
} | |||||
protected: | protected: | ||||
PatchbayGraph* getPatchbayGraph() const noexcept; | |||||
CarlaPlugin* getPlugin() const noexcept; | |||||
inline PatchbayGraph* getPatchbayGraph() const noexcept | |||||
{ | |||||
return pData->egraph.getPatchbayGraph(); | |||||
} | |||||
inline CarlaPlugin* getPlugin() const noexcept | |||||
{ | |||||
return pData->plugin; | |||||
} | |||||
CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineClientForStandalone) | |||||
}; | }; | ||||
typedef CarlaEngineClientForStandalone CarlaEngineClientForSubclassing; | |||||
#else | |||||
class CarlaEngineClientForBridge : public CarlaEngineClient | |||||
{ | |||||
public: | |||||
CarlaEngineClientForBridge(const CarlaEngine& engine) | |||||
: CarlaEngineClient(new ProtectedData(engine)) {} | |||||
~CarlaEngineClientForBridge() override | |||||
{ | |||||
delete pData; | |||||
} | |||||
CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineClientForBridge) | |||||
}; | |||||
typedef CarlaEngineClientForBridge CarlaEngineClientForSubclassing; | |||||
#endif | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
@@ -211,31 +211,6 @@ struct EnginePluginData { | |||||
float peaks[4]; | float peaks[4]; | ||||
}; | }; | ||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
// ----------------------------------------------------------------------- | |||||
// CarlaEngineEventPortProtectedData | |||||
struct CarlaEngineEventCV { | |||||
CarlaEngineCVPort* cvPort; | |||||
uint32_t indexOffset; | |||||
float previousValue; | |||||
}; | |||||
struct CarlaEngineCVSourcePorts::ProtectedData { | |||||
CarlaRecursiveMutex rmutex; | |||||
EngineEvent* buffer; | |||||
water::Array<CarlaEngineEventCV> cvs; | |||||
PatchbayGraph* graph; | |||||
CarlaPlugin* plugin; | |||||
ProtectedData(); | |||||
~ProtectedData(); | |||||
CARLA_DECLARE_NON_COPY_STRUCT(ProtectedData) | |||||
}; | |||||
#endif | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// CarlaEngineProtectedData | // CarlaEngineProtectedData | ||||
@@ -523,12 +523,17 @@ public: | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// Jack Engine client | // Jack Engine client | ||||
class CarlaEngineJackClient : public CarlaEngineClient2, | |||||
class CarlaEngineJackClient : public CarlaEngineClientForSubclassing, | |||||
private JackPortDeletionCallback | private JackPortDeletionCallback | ||||
{ | { | ||||
public: | public: | ||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
CarlaEngineJackClient(const CarlaEngine& engine, EngineInternalGraph& egraph, CarlaPlugin* const plugin, jack_client_t* const jackClient) | CarlaEngineJackClient(const CarlaEngine& engine, EngineInternalGraph& egraph, CarlaPlugin* const plugin, jack_client_t* const jackClient) | ||||
: CarlaEngineClient2(engine, egraph, plugin), | |||||
: CarlaEngineClientForSubclassing(engine, egraph, plugin), | |||||
#else | |||||
CarlaEngineJackClient(const CarlaEngine& engine, jack_client_t* const jackClient) | |||||
: CarlaEngineClientForSubclassing(engine), | |||||
#endif | |||||
fJackClient(jackClient), | fJackClient(jackClient), | ||||
fUseClient(engine.getProccessMode() == ENGINE_PROCESS_MODE_SINGLE_CLIENT || engine.getProccessMode() == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS), | fUseClient(engine.getProccessMode() == ENGINE_PROCESS_MODE_SINGLE_CLIENT || engine.getProccessMode() == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS), | ||||
fAudioPorts(), | fAudioPorts(), | ||||
@@ -1445,7 +1450,11 @@ public: | |||||
#endif | #endif | ||||
} | } | ||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
return new CarlaEngineJackClient(*this, pData->graph, plugin, client); | return new CarlaEngineJackClient(*this, pData->graph, plugin, client); | ||||
#else | |||||
return new CarlaEngineJackClient(*this, client); | |||||
#endif | |||||
} | } | ||||
#ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
@@ -15,7 +15,7 @@ | |||||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | * For a full copy of the GNU General Public License see the doc/GPL.txt file. | ||||
*/ | */ | ||||
#include "CarlaEngineInternal.hpp" | |||||
#include "CarlaEnginePorts.hpp" | |||||
#include "CarlaEngineGraph.hpp" | #include "CarlaEngineGraph.hpp" | ||||
#include "CarlaEngineUtils.hpp" | #include "CarlaEngineUtils.hpp" | ||||
#include "CarlaMathUtils.hpp" | #include "CarlaMathUtils.hpp" | ||||
@@ -327,35 +327,6 @@ bool CarlaEngineEventPort::writeMidiEvent(const uint32_t time, const uint8_t cha | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// Carla Engine Meta CV port | // Carla Engine Meta CV port | ||||
CarlaEngineCVSourcePorts::ProtectedData::ProtectedData() | |||||
: rmutex(), | |||||
buffer(nullptr), | |||||
cvs(), | |||||
graph(nullptr), | |||||
plugin(nullptr) | |||||
{ | |||||
} | |||||
CarlaEngineCVSourcePorts::ProtectedData::~ProtectedData() | |||||
{ | |||||
const CarlaRecursiveMutexLocker crml(rmutex); | |||||
carla_stdout("CarlaEngineCVSourcePorts::ProtectedData::~ProtectedData size %i", cvs.size()); | |||||
/* | |||||
for (int i = cvs.size(); --i >= 0;) | |||||
delete cvs[i].cvPort; | |||||
*/ | |||||
cvs.clear(); | |||||
if (buffer != nullptr) | |||||
{ | |||||
delete[] buffer; | |||||
buffer = nullptr; | |||||
} | |||||
} | |||||
CarlaEngineCVSourcePorts::CarlaEngineCVSourcePorts() | CarlaEngineCVSourcePorts::CarlaEngineCVSourcePorts() | ||||
: pData(new ProtectedData()) | : pData(new ProtectedData()) | ||||
{ | { | ||||
@@ -382,7 +353,7 @@ bool CarlaEngineCVSourcePorts::addCVSource(CarlaEngineCVPort* const port, const | |||||
return false; | return false; | ||||
if (pData->graph != nullptr && pData->plugin != nullptr) | if (pData->graph != nullptr && pData->plugin != nullptr) | ||||
pData->graph->reconfigureForCV(pData->plugin, pData->cvs.size()-1, true); | |||||
pData->graph->reconfigureForCV(pData->plugin, static_cast<uint>(pData->cvs.size()-1), true); | |||||
/* | /* | ||||
if (pData->buffer == nullptr) | if (pData->buffer == nullptr) | ||||
@@ -407,7 +378,7 @@ bool CarlaEngineCVSourcePorts::removeCVSource(const uint32_t portIndexOffset) | |||||
if (ecv.indexOffset == portIndexOffset) | if (ecv.indexOffset == portIndexOffset) | ||||
{ | { | ||||
if (pData->graph != nullptr && pData->plugin != nullptr) | if (pData->graph != nullptr && pData->plugin != nullptr) | ||||
pData->graph->reconfigureForCV(pData->plugin, i, false); | |||||
pData->graph->reconfigureForCV(pData->plugin, static_cast<uint>(i), false); | |||||
carla_stdout("found cv source to remove %u", portIndexOffset); | carla_stdout("found cv source to remove %u", portIndexOffset); | ||||
delete ecv.cvPort; | delete ecv.cvPort; | ||||
@@ -0,0 +1,96 @@ | |||||
/* | |||||
* Carla Plugin Host | |||||
* Copyright (C) 2011-2019 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* This program is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU General Public License as | |||||
* published by the Free Software Foundation; either version 2 of | |||||
* the License, or any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
*/ | |||||
#ifndef CARLA_ENGINE_PORTS_HPP_INCLUDED | |||||
#define CARLA_ENGINE_PORTS_HPP_INCLUDED | |||||
#include "CarlaEngine.hpp" | |||||
#include "CarlaEngineInternal.hpp" | |||||
CARLA_BACKEND_START_NAMESPACE | |||||
// ----------------------------------------------------------------------- | |||||
// Carla Engine Meta CV Port Protected Data | |||||
struct CarlaEngineEventCV { | |||||
CarlaEngineCVPort* cvPort; | |||||
uint32_t indexOffset; | |||||
float previousValue; | |||||
}; | |||||
struct CarlaEngineCVSourcePorts::ProtectedData { | |||||
CarlaRecursiveMutex rmutex; | |||||
EngineEvent* buffer; | |||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
PatchbayGraph* graph; | |||||
CarlaPlugin* plugin; | |||||
#endif | |||||
water::Array<CarlaEngineEventCV> cvs; | |||||
ProtectedData() noexcept | |||||
: rmutex(), | |||||
buffer(nullptr), | |||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
graph(nullptr), | |||||
plugin(nullptr), | |||||
#endif | |||||
cvs() {} | |||||
~ProtectedData() | |||||
{ | |||||
{ | |||||
const CarlaRecursiveMutexLocker crml(rmutex); | |||||
for (int i = cvs.size(); --i >= 0;) | |||||
delete cvs[i].cvPort; | |||||
cvs.clear(); | |||||
} | |||||
if (buffer != nullptr) | |||||
{ | |||||
delete[] buffer; | |||||
buffer = nullptr; | |||||
} | |||||
} | |||||
CARLA_DECLARE_NON_COPY_STRUCT(ProtectedData) | |||||
}; | |||||
#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
// ----------------------------------------------------------------------- | |||||
// Carla Engine Meta CV Port | |||||
class CarlaEngineCVSourcePortsForStandalone : public CarlaEngineCVSourcePorts | |||||
{ | |||||
public: | |||||
CarlaEngineCVSourcePortsForStandalone() : CarlaEngineCVSourcePorts() {} | |||||
~CarlaEngineCVSourcePortsForStandalone() override {} | |||||
inline void setGraphAndPlugin(PatchbayGraph* const graph, CarlaPlugin* const plugin) noexcept | |||||
{ | |||||
pData->graph = graph; | |||||
pData->plugin = plugin; | |||||
} | |||||
}; | |||||
#endif | |||||
// ----------------------------------------------------------------------- | |||||
CARLA_BACKEND_END_NAMESPACE | |||||
#endif // CARLA_ENGINE_PORTS_HPP_INCLUDED |