Browse Source

Cleanup CarlaStateSave struct; Initial code for plugin pipe (no osc)

tags/1.9.6
falkTX 10 years ago
parent
commit
74b4f51476
19 changed files with 153 additions and 140 deletions
  1. +1
    -0
      Makefile
  2. +3
    -7
      source/backend/CarlaPlugin.hpp
  3. +1
    -1
      source/backend/engine/CarlaEngine.cpp
  4. +1
    -1
      source/backend/engine/CarlaEngineJack.cpp
  5. +0
    -6
      source/backend/engine/CarlaEngineOsc.cpp
  6. +3
    -3
      source/backend/engine/CarlaEngineOsc.hpp
  7. +33
    -27
      source/backend/plugin/CarlaPlugin.cpp
  8. +8
    -7
      source/backend/plugin/CarlaPluginBridge.cpp
  9. +6
    -0
      source/backend/plugin/CarlaPluginDSSI.cpp
  10. +6
    -8
      source/backend/plugin/CarlaPluginInternal.cpp
  11. +13
    -15
      source/backend/plugin/CarlaPluginInternal.hpp
  12. +7
    -0
      source/backend/plugin/CarlaPluginLV2.cpp
  13. +4
    -0
      source/backend/plugin/CarlaPluginThread.cpp
  14. +4
    -0
      source/backend/plugin/CarlaPluginThread.hpp
  15. +7
    -1
      source/backend/plugin/CarlaPluginVST2.cpp
  16. +6
    -14
      source/includes/CarlaNative.hpp
  17. +1
    -1
      source/includes/CarlaNativeExtUI.hpp
  18. +19
    -19
      source/utils/CarlaStateUtils.cpp
  19. +30
    -30
      source/utils/CarlaStateUtils.hpp

+ 1
- 0
Makefile View File

@@ -21,6 +21,7 @@ endif
# ---------------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------------


PREFIX := /usr/local PREFIX := /usr/local
LIBDIR := $(PREFIX)/lib
DESTDIR := DESTDIR :=


BINDIR := $(CURDIR)/bin BINDIR := $(CURDIR)/bin


+ 3
- 7
source/backend/CarlaPlugin.hpp View File

@@ -47,11 +47,7 @@ CARLA_BACKEND_START_NAMESPACE
class CarlaEngineAudioPort; class CarlaEngineAudioPort;
class CarlaEngineCVPort; class CarlaEngineCVPort;
class CarlaEngineEventPort; class CarlaEngineEventPort;

/*!
* Save state data.
*/
struct StateSave;
struct CarlaStateSave;


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


@@ -396,14 +392,14 @@ public:
* *
* @see loadStateSave() * @see loadStateSave()
*/ */
const StateSave& getStateSave();
const CarlaStateSave& getStateSave();


/*! /*!
* Get the plugin's save state. * Get the plugin's save state.
* *
* @see getStateSave() * @see getStateSave()
*/ */
void loadStateSave(const StateSave& stateSave);
void loadStateSave(const CarlaStateSave& stateSave);


/*! /*!
* Save the current plugin state to @a filename. * Save the current plugin state to @a filename.


+ 1
- 1
source/backend/engine/CarlaEngine.cpp View File

@@ -1803,7 +1803,7 @@ bool CarlaEngine::loadProjectInternal(juce::XmlDocument& xmlDoc)


if (isPreset || tagName.equalsIgnoreCase("plugin")) if (isPreset || tagName.equalsIgnoreCase("plugin"))
{ {
StateSave stateSave;
CarlaStateSave stateSave;
stateSave.fillFromXmlElement(isPreset ? xmlElement.get() : elem); stateSave.fillFromXmlElement(isPreset ? xmlElement.get() : elem);


callback(ENGINE_CALLBACK_IDLE, 0, 0, 0, 0.0f, nullptr); callback(ENGINE_CALLBACK_IDLE, 0, 0, 0, 0.0f, nullptr);


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

@@ -1058,7 +1058,7 @@ public:
if (needsReinit) if (needsReinit)
{ {
// reload plugin to recreate its ports // reload plugin to recreate its ports
const StateSave& saveState(plugin->getStateSave());
const CarlaStateSave& saveState(plugin->getStateSave());
plugin->reload(); plugin->reload();
plugin->loadStateSave(saveState); plugin->loadStateSave(saveState);
} }


+ 0
- 6
source/backend/engine/CarlaEngineOsc.cpp View File

@@ -388,12 +388,6 @@ int CarlaEngineOsc::handleMessage(const bool isTCP, const char* const path, cons
if (std::strcmp(bmethod, "error") == 0) if (std::strcmp(bmethod, "error") == 0)
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeOscError, argc, argv, types); return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeOscError, argc, argv, types);
} }

// Plugin-specific methods
if (std::strcmp(method, "lv2_atom_transfer") == 0)
return handleMsgLv2AtomTransfer(plugin, argc, argv, types);
if (std::strcmp(method, "lv2_urid_map") == 0)
return handleMsgLv2UridMap(plugin, argc, argv, types);
#endif #endif


carla_stderr("CarlaEngineOsc::handleMessage() - unsupported OSC method '%s'", method); carla_stderr("CarlaEngineOsc::handleMessage() - unsupported OSC method '%s'", method);


+ 3
- 3
source/backend/engine/CarlaEngineOsc.hpp View File

@@ -108,6 +108,7 @@ private:


int handleMessage(const bool isTCP, const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg); int handleMessage(const bool isTCP, const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg);


// Common OSC methods (all bridges)
int handleMsgUpdate(CARLA_ENGINE_OSC_HANDLE_ARGS2, const lo_address source); int handleMsgUpdate(CARLA_ENGINE_OSC_HANDLE_ARGS2, const lo_address source);
int handleMsgExiting(CARLA_ENGINE_OSC_HANDLE_ARGS1); int handleMsgExiting(CARLA_ENGINE_OSC_HANDLE_ARGS1);


@@ -115,11 +116,13 @@ private:
int handleMsgRegister(const bool isTCP, const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source); int handleMsgRegister(const bool isTCP, const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source);
int handleMsgUnregister(); int handleMsgUnregister();


// Common OSC methods (DSSI and bridge UIs)
int handleMsgConfigure(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgConfigure(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgControl(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgControl(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgMidi(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgMidi(CARLA_ENGINE_OSC_HANDLE_ARGS2);


// Internal methods
int handleMsgSetActive(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgSetActive(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgSetDryWet(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgSetDryWet(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgSetVolume(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgSetVolume(CARLA_ENGINE_OSC_HANDLE_ARGS2);
@@ -133,9 +136,6 @@ private:
int handleMsgSetMidiProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgSetMidiProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgNoteOn(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgNoteOn(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgNoteOff(CARLA_ENGINE_OSC_HANDLE_ARGS2); int handleMsgNoteOff(CARLA_ENGINE_OSC_HANDLE_ARGS2);

int handleMsgLv2AtomTransfer(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgLv2UridMap(CARLA_ENGINE_OSC_HANDLE_ARGS2);
#endif #endif


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


+ 33
- 27
source/backend/plugin/CarlaPlugin.cpp View File

@@ -73,7 +73,7 @@ struct ParamSymbol {
// Constructor and destructor // Constructor and destructor


CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const uint id) CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const uint id)
: pData(new ProtectedData(engine, id, this))
: pData(new ProtectedData(engine, id))
{ {
CARLA_SAFE_ASSERT_RETURN(engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(engine != nullptr,);
CARLA_SAFE_ASSERT(id < engine->getMaxPluginNumber()); CARLA_SAFE_ASSERT(id < engine->getMaxPluginNumber());
@@ -471,7 +471,7 @@ void CarlaPlugin::randomizeParameters() noexcept
} }
} }


const StateSave& CarlaPlugin::getStateSave()
const CarlaStateSave& CarlaPlugin::getStateSave()
{ {
pData->stateSave.clear(); pData->stateSave.clear();
prepareForSave(); prepareForSave();
@@ -558,7 +558,7 @@ const StateSave& CarlaPlugin::getStateSave()
if ((paramData.hints & PARAMETER_IS_ENABLED) == 0) if ((paramData.hints & PARAMETER_IS_ENABLED) == 0)
continue; continue;


StateParameter* const stateParameter(new StateParameter());
CarlaStateSave::Parameter* const stateParameter(new CarlaStateSave::Parameter());


stateParameter->isInput = (paramData.type == PARAMETER_INPUT); stateParameter->isInput = (paramData.type == PARAMETER_INPUT);
stateParameter->index = paramData.index; stateParameter->index = paramData.index;
@@ -588,7 +588,7 @@ const StateSave& CarlaPlugin::getStateSave()
{ {
const CustomData& cData(it.getValue()); const CustomData& cData(it.getValue());


StateCustomData* stateCustomData(new StateCustomData());
CarlaStateSave::CustomData* stateCustomData(new CarlaStateSave::CustomData());


stateCustomData->type = carla_strdup(cData.type); stateCustomData->type = carla_strdup(cData.type);
stateCustomData->key = carla_strdup(cData.key); stateCustomData->key = carla_strdup(cData.key);
@@ -600,7 +600,7 @@ const StateSave& CarlaPlugin::getStateSave()
return pData->stateSave; return pData->stateSave;
} }


void CarlaPlugin::loadStateSave(const StateSave& stateSave)
void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
{ {
char strBuf[STR_MAX+1]; char strBuf[STR_MAX+1];
const bool usesMultiProgs(pData->extraHints & PLUGIN_EXTRA_HINT_USES_MULTI_PROGS); const bool usesMultiProgs(pData->extraHints & PLUGIN_EXTRA_HINT_USES_MULTI_PROGS);
@@ -608,9 +608,9 @@ void CarlaPlugin::loadStateSave(const StateSave& stateSave)
// --------------------------------------------------------------- // ---------------------------------------------------------------
// Part 1 - PRE-set custom data (only that which reload programs) // Part 1 - PRE-set custom data (only that which reload programs)


for (LinkedList<StateCustomData*>::Itenerator it = stateSave.customData.begin(); it.valid(); it.next())
for (CarlaStateSave::CustomDataItenerator it = stateSave.customData.begin(); it.valid(); it.next())
{ {
const StateCustomData* const stateCustomData(it.getValue());
const CarlaStateSave::CustomData* const stateCustomData(it.getValue());
const char* const key(stateCustomData->key); const char* const key(stateCustomData->key);


bool wantData = false; bool wantData = false;
@@ -688,9 +688,9 @@ void CarlaPlugin::loadStateSave(const StateSave& stateSave)


const float sampleRate(static_cast<float>(pData->engine->getSampleRate())); const float sampleRate(static_cast<float>(pData->engine->getSampleRate()));


for (LinkedList<StateParameter*>::Itenerator it = stateSave.parameters.begin(); it.valid(); it.next())
for (CarlaStateSave::ParameterItenerator it = stateSave.parameters.begin(); it.valid(); it.next())
{ {
StateParameter* const stateParameter(it.getValue());
CarlaStateSave::Parameter* const stateParameter(it.getValue());


int32_t index = -1; int32_t index = -1;


@@ -778,9 +778,9 @@ void CarlaPlugin::loadStateSave(const StateSave& stateSave)
// --------------------------------------------------------------- // ---------------------------------------------------------------
// Part 5 - set custom data // Part 5 - set custom data


for (LinkedList<StateCustomData*>::Itenerator it = stateSave.customData.begin(); it.valid(); it.next())
for (CarlaStateSave::CustomDataItenerator it = stateSave.customData.begin(); it.valid(); it.next())
{ {
const StateCustomData* const stateCustomData(it.getValue());
const CarlaStateSave::CustomData* const stateCustomData(it.getValue());
const char* const key(stateCustomData->key); const char* const key(stateCustomData->key);


if (getType() == PLUGIN_DSSI && (std::strcmp(key, "reloadprograms") == 0 || std::strcmp(key, "load") == 0 || std::strncmp(key, "patches", 7) == 0)) if (getType() == PLUGIN_DSSI && (std::strcmp(key, "reloadprograms") == 0 || std::strcmp(key, "load") == 0 || std::strncmp(key, "patches", 7) == 0))
@@ -1338,7 +1338,13 @@ void CarlaPlugin::idle()
CarlaString uiTitle(pData->name); CarlaString uiTitle(pData->name);
uiTitle += " (GUI)"; uiTitle += " (GUI)";


if (CarlaPluginUI::tryTransientWinIdMatch(pData->osc.data.target != nullptr ? pData->osc.thread.getPid() : 0, uiTitle, pData->engine->getOptions().frontendWinId, true))
uint32_t pid = 0;
#ifndef BUILD_BRIDGE
if (pData->oscData.target != nullptr && pData->childProcess != nullptr)
pid = pData->childProcess->getPID();
#endif

if (CarlaPluginUI::tryTransientWinIdMatch(pid, uiTitle, pData->engine->getOptions().frontendWinId, true))
pData->transientTryCounter = 0; pData->transientTryCounter = 0;
} }


@@ -1572,14 +1578,14 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url)
// FIXME - remove debug prints later // FIXME - remove debug prints later
carla_stdout("CarlaPlugin::updateOscData(%p, \"%s\")", source, url); carla_stdout("CarlaPlugin::updateOscData(%p, \"%s\")", source, url);


pData->osc.data.clear();
pData->oscData.clear();


const int proto = lo_address_get_protocol(source); const int proto = lo_address_get_protocol(source);


{ {
const char* host = lo_address_get_hostname(source); const char* host = lo_address_get_hostname(source);
const char* port = lo_address_get_port(source); const char* port = lo_address_get_port(source);
pData->osc.data.source = lo_address_new_with_proto(proto, host, port);
pData->oscData.source = lo_address_new_with_proto(proto, host, port);


carla_stdout("CarlaPlugin::updateOscData() - source: host \"%s\", port \"%s\"", host, port); carla_stdout("CarlaPlugin::updateOscData() - source: host \"%s\", port \"%s\"", host, port);
} }
@@ -1587,9 +1593,9 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url)
{ {
char* host = lo_url_get_hostname(url); char* host = lo_url_get_hostname(url);
char* port = lo_url_get_port(url); char* port = lo_url_get_port(url);
pData->osc.data.path = carla_strdup_free(lo_url_get_path(url));
pData->osc.data.target = lo_address_new_with_proto(proto, host, port);
carla_stdout("CarlaPlugin::updateOscData() - target: host \"%s\", port \"%s\", path \"%s\"", host, port, pData->osc.data.path);
pData->oscData.path = carla_strdup_free(lo_url_get_path(url));
pData->oscData.target = lo_address_new_with_proto(proto, host, port);
carla_stdout("CarlaPlugin::updateOscData() - target: host \"%s\", port \"%s\", path \"%s\"", host, port, pData->oscData.path);


std::free(host); std::free(host);
std::free(port); std::free(port);
@@ -1607,7 +1613,7 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url)
if (updateOscDataExtra()) if (updateOscDataExtra())
pData->engine->idleOsc(); pData->engine->idleOsc();


osc_send_sample_rate(pData->osc.data, static_cast<float>(pData->engine->getSampleRate()));
osc_send_sample_rate(pData->oscData, static_cast<float>(pData->engine->getSampleRate()));


for (LinkedList<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) for (LinkedList<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next())
{ {
@@ -1618,24 +1624,24 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url)
CARLA_SAFE_ASSERT_CONTINUE(cData.value != nullptr); CARLA_SAFE_ASSERT_CONTINUE(cData.value != nullptr);


if (std::strcmp(cData.type, CUSTOM_DATA_TYPE_STRING) == 0) if (std::strcmp(cData.type, CUSTOM_DATA_TYPE_STRING) == 0)
osc_send_configure(pData->osc.data, cData.key, cData.value);
osc_send_configure(pData->oscData, cData.key, cData.value);
} }


if (pData->prog.current >= 0) if (pData->prog.current >= 0)
osc_send_program(pData->osc.data, static_cast<uint32_t>(pData->prog.current));
osc_send_program(pData->oscData, static_cast<uint32_t>(pData->prog.current));


if (pData->midiprog.current >= 0) if (pData->midiprog.current >= 0)
{ {
const MidiProgramData& curMidiProg(pData->midiprog.getCurrent()); const MidiProgramData& curMidiProg(pData->midiprog.getCurrent());


if (getType() == PLUGIN_DSSI) if (getType() == PLUGIN_DSSI)
osc_send_program(pData->osc.data, curMidiProg.bank, curMidiProg.program);
osc_send_program(pData->oscData, curMidiProg.bank, curMidiProg.program);
else else
osc_send_midi_program(pData->osc.data, curMidiProg.bank, curMidiProg.program);
osc_send_midi_program(pData->oscData, curMidiProg.bank, curMidiProg.program);
} }


for (uint32_t i=0; i < pData->param.count; ++i) for (uint32_t i=0; i < pData->param.count; ++i)
osc_send_control(pData->osc.data, pData->param.data[i].rindex, getParameterValue(i));
osc_send_control(pData->oscData, pData->param.data[i].rindex, getParameterValue(i));


if ((pData->hints & PLUGIN_HAS_CUSTOM_UI) != 0 && pData->engine->getOptions().frontendWinId != 0) if ((pData->hints & PLUGIN_HAS_CUSTOM_UI) != 0 && pData->engine->getOptions().frontendWinId != 0)
pData->transientTryCounter = 1; pData->transientTryCounter = 1;
@@ -1652,7 +1658,7 @@ void CarlaPlugin::updateOscURL()
{ {
const String newURL(String(pData->engine->getOscServerPathUDP()) + String("/") + String(pData->id)); const String newURL(String(pData->engine->getOscServerPathUDP()) + String("/") + String(pData->id));


osc_send_update_url(pData->osc.data, newURL.toRawUTF8());
osc_send_update_url(pData->oscData, newURL.toRawUTF8());
} }


bool CarlaPlugin::waitForOscGuiShow() bool CarlaPlugin::waitForOscGuiShow()
@@ -1663,14 +1669,14 @@ bool CarlaPlugin::waitForOscGuiShow()
// wait for UI 'update' call // wait for UI 'update' call
for (; i < oscUiTimeout/100; ++i) for (; i < oscUiTimeout/100; ++i)
{ {
if (pData->osc.data.target != nullptr)
if (pData->oscData.target != nullptr)
{ {
carla_stdout("CarlaPlugin::waitForOscGuiShow() - got response, asking UI to show itself now"); carla_stdout("CarlaPlugin::waitForOscGuiShow() - got response, asking UI to show itself now");
osc_send_show(pData->osc.data);
osc_send_show(pData->oscData);
return true; return true;
} }


if (pData->osc.thread.isThreadRunning())
if (pData->childProcess != nullptr && pData->childProcess->isRunning())
carla_msleep(100); carla_msleep(100);
else else
return false; return false;


+ 8
- 7
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -63,6 +63,7 @@ using juce::StringArray;


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


#if 0
// ------------------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------------------
// call carla_shm_create with for a XXXXXX temp filename // call carla_shm_create with for a XXXXXX temp filename


@@ -357,8 +358,6 @@ public:
{ {
carla_debug("BridgePlugin::BridgePlugin(%p, %i, %s, %s)", engine, id, BinaryType2Str(btype), PluginType2Str(ptype)); carla_debug("BridgePlugin::BridgePlugin(%p, %i, %s, %s)", engine, id, BinaryType2Str(btype), PluginType2Str(ptype));


pData->osc.thread.setMode(CarlaPluginThread::PLUGIN_THREAD_BRIDGE);

pData->hints |= PLUGIN_IS_BRIDGE; pData->hints |= PLUGIN_IS_BRIDGE;
} }


@@ -2219,6 +2218,7 @@ private:


CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(BridgePlugin) CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(BridgePlugin)
}; };
#endif


CARLA_BACKEND_END_NAMESPACE CARLA_BACKEND_END_NAMESPACE


@@ -2232,7 +2232,7 @@ CarlaPlugin* CarlaPlugin::newBridge(const Initializer& init, BinaryType btype, P
{ {
carla_debug("CarlaPlugin::newBridge({%p, \"%s\", \"%s\", \"%s\"}, %s, %s, \"%s\")", init.engine, init.filename, init.name, init.label, BinaryType2Str(btype), PluginType2Str(ptype), bridgeBinary); carla_debug("CarlaPlugin::newBridge({%p, \"%s\", \"%s\", \"%s\"}, %s, %s, \"%s\")", init.engine, init.filename, init.name, init.label, BinaryType2Str(btype), PluginType2Str(ptype), bridgeBinary);


#ifndef BUILD_BRIDGE
#if 0 //ndef BUILD_BRIDGE
if (bridgeBinary == nullptr || bridgeBinary[0] == '\0') if (bridgeBinary == nullptr || bridgeBinary[0] == '\0')
{ {
init.engine->setLastError("Bridge not possible, bridge-binary not found"); init.engine->setLastError("Bridge not possible, bridge-binary not found");
@@ -2283,7 +2283,7 @@ CarlaPlugin* CarlaPlugin::newBridge(const Initializer& init, BinaryType btype, P
return nullptr; return nullptr;


// unused // unused
(void)bridgeBinary;
(void)bridgeBinary; (void)btype; (void)ptype;
#endif #endif
} }


@@ -2296,11 +2296,12 @@ CarlaPlugin* CarlaPlugin::newBridge(const Initializer& init, BinaryType btype, P
extern int CarlaPluginSetOscBridgeInfo(CarlaPlugin* const plugin, const PluginBridgeOscInfoType type, extern int CarlaPluginSetOscBridgeInfo(CarlaPlugin* const plugin, const PluginBridgeOscInfoType type,
const int argc, const lo_arg* const* const argv, const char* const types); const int argc, const lo_arg* const* const argv, const char* const types);


int CarlaPluginSetOscBridgeInfo(CarlaPlugin* const plugin, const PluginBridgeOscInfoType type,
const int argc, const lo_arg* const* const argv, const char* const types)
int CarlaPluginSetOscBridgeInfo(CarlaPlugin* const plugin, const PluginBridgeOscInfoType /*type*/,
const int /*argc*/, const lo_arg* const* const /*argv*/, const char* const /*types*/)
{ {
CARLA_SAFE_ASSERT(plugin != nullptr && (plugin->getHints() & PLUGIN_IS_BRIDGE) != 0); CARLA_SAFE_ASSERT(plugin != nullptr && (plugin->getHints() & PLUGIN_IS_BRIDGE) != 0);
return bridgePlugin->setOscPluginBridgeInfo(type, argc, argv, types);
return 0;
//return bridgePlugin->setOscPluginBridgeInfo(type, argc, argv, types);
} }


#undef bridgePlugin #undef bridgePlugin


+ 6
- 0
source/backend/plugin/CarlaPluginDSSI.cpp View File

@@ -26,6 +26,7 @@


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


#if 0
// ----------------------------------------------------- // -----------------------------------------------------


class CarlaPluginDSSI : public CarlaPlugin class CarlaPluginDSSI : public CarlaPlugin
@@ -2325,6 +2326,7 @@ private:
}; };


LinkedList<const char*> CarlaPluginDSSI::sMultiSynthList; LinkedList<const char*> CarlaPluginDSSI::sMultiSynthList;
#endif


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


@@ -2332,6 +2334,7 @@ CarlaPlugin* CarlaPlugin::newDSSI(const Initializer& init)
{ {
carla_debug("CarlaPlugin::newDSSI({%p, \"%s\", \"%s\", \"%s\", " P_INT64 "})", init.engine, init.filename, init.name, init.label, init.uniqueId); carla_debug("CarlaPlugin::newDSSI({%p, \"%s\", \"%s\", \"%s\", " P_INT64 "})", init.engine, init.filename, init.name, init.label, init.uniqueId);


#if 0
CarlaPluginDSSI* const plugin(new CarlaPluginDSSI(init.engine, init.id)); CarlaPluginDSSI* const plugin(new CarlaPluginDSSI(init.engine, init.id));


if (! plugin->init(init.filename, init.name, init.label)) if (! plugin->init(init.filename, init.name, init.label))
@@ -2370,6 +2373,9 @@ CarlaPlugin* CarlaPlugin::newDSSI(const Initializer& init)
} }


return plugin; return plugin;
#endif
return nullptr;
(void)init;
} }


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


+ 6
- 8
source/backend/plugin/CarlaPluginInternal.cpp View File

@@ -432,13 +432,7 @@ CarlaPlugin::ProtectedData::PostProc::PostProc() noexcept


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


CarlaPlugin::ProtectedData::OSC::OSC(CarlaEngine* const eng, CarlaPlugin* const plug) noexcept
: data(),
thread(eng, plug) {}

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

CarlaPlugin::ProtectedData::ProtectedData(CarlaEngine* const eng, const uint idx, CarlaPlugin* const plug) noexcept
CarlaPlugin::ProtectedData::ProtectedData(CarlaEngine* const eng, const uint idx) noexcept
: engine(eng), : engine(eng),
client(nullptr), client(nullptr),
id(idx), id(idx),
@@ -471,13 +465,17 @@ CarlaPlugin::ProtectedData::ProtectedData(CarlaEngine* const eng, const uint idx
custom(), custom(),
masterMutex(), masterMutex(),
singleMutex(), singleMutex(),
#ifndef BUILD_BRIDGE
childProcess(),
oscData(),
#endif
stateSave(), stateSave(),
extNotes(), extNotes(),
postRtEvents(), postRtEvents(),
#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
postProc(), postProc(),
#endif #endif
osc(eng, plug) {}
leakDetector_ProtectedData() {}


CarlaPlugin::ProtectedData::~ProtectedData() noexcept CarlaPlugin::ProtectedData::~ProtectedData() noexcept
{ {


+ 13
- 15
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -22,15 +22,19 @@
#include "CarlaPluginThread.hpp" #include "CarlaPluginThread.hpp"


#include "CarlaLibUtils.hpp" #include "CarlaLibUtils.hpp"
#include "CarlaMutex.hpp"
#include "CarlaOscUtils.hpp" #include "CarlaOscUtils.hpp"
#include "CarlaStateUtils.hpp" #include "CarlaStateUtils.hpp"
#include "CarlaString.hpp"


#include "CarlaMIDI.h" #include "CarlaMIDI.h"
#include "RtLinkedList.hpp" #include "RtLinkedList.hpp"


#include "juce_audio_basics.h" #include "juce_audio_basics.h"


using juce::ChildProcess;
using juce::FloatVectorOperations; using juce::FloatVectorOperations;
using juce::ScopedPointer;


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


@@ -250,7 +254,12 @@ struct CarlaPlugin::ProtectedData {
CarlaMutex masterMutex; // global master lock CarlaMutex masterMutex; // global master lock
CarlaMutex singleMutex; // small lock used only in processSingle() CarlaMutex singleMutex; // small lock used only in processSingle()


StateSave stateSave;
#ifndef BUILD_BRIDGE
ScopedPointer<ChildProcess> childProcess;
CarlaOscData oscData;
#endif

CarlaStateSave stateSave;


struct ExternalNotes { struct ExternalNotes {
CarlaMutex mutex; CarlaMutex mutex;
@@ -297,19 +306,7 @@ struct CarlaPlugin::ProtectedData {
} postProc; } postProc;
#endif #endif


struct OSC {
CarlaOscData data;
CarlaPluginThread thread;

OSC(CarlaEngine* const engine, CarlaPlugin* const plugin) noexcept;

#ifdef CARLA_PROPER_CPP11_SUPPORT
OSC() = delete;
CARLA_DECLARE_NON_COPY_STRUCT(OSC)
#endif
} osc;

ProtectedData(CarlaEngine* const engine, const uint idx, CarlaPlugin* const plugin) noexcept;
ProtectedData(CarlaEngine* const engine, const uint idx) noexcept;
~ProtectedData() noexcept; ~ProtectedData() noexcept;


// ------------------------------------------------------------------- // -------------------------------------------------------------------
@@ -359,8 +356,9 @@ struct CarlaPlugin::ProtectedData {


#ifdef CARLA_PROPER_CPP11_SUPPORT #ifdef CARLA_PROPER_CPP11_SUPPORT
ProtectedData() = delete; ProtectedData() = delete;
CARLA_DECLARE_NON_COPY_STRUCT(ProtectedData)
CARLA_DECLARE_NON_COPY_STRUCT(ProtectedData);
#endif #endif
CARLA_LEAK_DETECTOR(ProtectedData);
}; };


CARLA_BACKEND_END_NAMESPACE CARLA_BACKEND_END_NAMESPACE


+ 7
- 0
source/backend/plugin/CarlaPluginLV2.cpp View File

@@ -42,6 +42,7 @@ using juce::File;


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


#if 0
// ----------------------------------------------------- // -----------------------------------------------------


// Maximum default buffer size // Maximum default buffer size
@@ -5951,12 +5952,15 @@ int CarlaEngineOsc::handleMsgLv2UridMap(CARLA_ENGINE_OSC_HANDLE_ARGS2)


#undef lv2PluginPtr #undef lv2PluginPtr


#endif

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


CarlaPlugin* CarlaPlugin::newLV2(const Initializer& init) CarlaPlugin* CarlaPlugin::newLV2(const Initializer& init)
{ {
carla_debug("CarlaPlugin::newLV2({%p, \"%s\", \"%s\", " P_INT64 "})", init.engine, init.name, init.label, init.uniqueId); carla_debug("CarlaPlugin::newLV2({%p, \"%s\", \"%s\", " P_INT64 "})", init.engine, init.name, init.label, init.uniqueId);


#if 0
CarlaPluginLV2* const plugin(new CarlaPluginLV2(init.engine, init.id)); CarlaPluginLV2* const plugin(new CarlaPluginLV2(init.engine, init.id));


if (! plugin->init(init.name, init.label)) if (! plugin->init(init.name, init.label))
@@ -5995,6 +5999,9 @@ CarlaPlugin* CarlaPlugin::newLV2(const Initializer& init)
} }


return plugin; return plugin;
#endif
return nullptr;
(void)init;
} }


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


+ 4
- 0
source/backend/plugin/CarlaPluginThread.cpp View File

@@ -15,6 +15,8 @@
* 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.
*/ */


#if 0

#include "CarlaPlugin.hpp" #include "CarlaPlugin.hpp"
#include "CarlaPluginThread.hpp" #include "CarlaPluginThread.hpp"
#include "CarlaEngine.hpp" #include "CarlaEngine.hpp"
@@ -386,3 +388,5 @@ void CarlaPluginThread::run()
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


CARLA_BACKEND_END_NAMESPACE CARLA_BACKEND_END_NAMESPACE

#endif

+ 4
- 0
source/backend/plugin/CarlaPluginThread.hpp View File

@@ -15,6 +15,8 @@
* 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.
*/ */


#if 0

#ifndef CARLA_PLUGIN_THREAD_HPP_INCLUDED #ifndef CARLA_PLUGIN_THREAD_HPP_INCLUDED
#define CARLA_PLUGIN_THREAD_HPP_INCLUDED #define CARLA_PLUGIN_THREAD_HPP_INCLUDED


@@ -73,3 +75,5 @@ private:
CARLA_BACKEND_END_NAMESPACE CARLA_BACKEND_END_NAMESPACE


#endif // CARLA_PLUGIN_THREAD_HPP_INCLUDED #endif // CARLA_PLUGIN_THREAD_HPP_INCLUDED

#endif

+ 7
- 1
source/backend/plugin/CarlaPluginVST2.cpp View File

@@ -40,6 +40,7 @@ using juce::File;


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


#if 0
// ----------------------------------------------------- // -----------------------------------------------------


const uint PLUGIN_CAN_PROCESS_REPLACING = 0x1000; const uint PLUGIN_CAN_PROCESS_REPLACING = 0x1000;
@@ -2547,6 +2548,8 @@ private:


CarlaPluginVST2* CarlaPluginVST2::sLastCarlaPluginVST2 = nullptr; CarlaPluginVST2* CarlaPluginVST2::sLastCarlaPluginVST2 = nullptr;


#endif

CARLA_BACKEND_END_NAMESPACE CARLA_BACKEND_END_NAMESPACE


#endif // ! USE_JUCE_FOR_VST #endif // ! USE_JUCE_FOR_VST
@@ -2561,7 +2564,7 @@ CarlaPlugin* CarlaPlugin::newVST2(const Initializer& init)


#ifdef USE_JUCE_FOR_VST #ifdef USE_JUCE_FOR_VST
return newJuce(init, "VST"); return newJuce(init, "VST");
#else
#elif 0 //se
CarlaPluginVST2* const plugin(new CarlaPluginVST2(init.engine, init.id)); CarlaPluginVST2* const plugin(new CarlaPluginVST2(init.engine, init.id));


if (! plugin->init(init.filename, init.name, init.uniqueId)) if (! plugin->init(init.filename, init.name, init.uniqueId))
@@ -2580,6 +2583,9 @@ CarlaPlugin* CarlaPlugin::newVST2(const Initializer& init)
} }


return plugin; return plugin;
#else
return nullptr;
(void)init;
#endif #endif
} }




+ 6
- 14
source/includes/CarlaNative.hpp View File

@@ -40,9 +40,7 @@ public:
CARLA_SAFE_ASSERT(host != nullptr); CARLA_SAFE_ASSERT(host != nullptr);
} }


virtual ~NativePluginClass()
{
}
virtual ~NativePluginClass() {}


protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
@@ -268,8 +266,7 @@ protected:
return; return;


// unused // unused
(void)bank;
(void)program;
(void)bank; (void)program;
} }


virtual void setCustomData(const char* const key, const char* const value) virtual void setCustomData(const char* const key, const char* const value)
@@ -281,13 +278,9 @@ protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Plugin process calls // Plugin process calls


virtual void activate()
{
}
virtual void activate() {}


virtual void deactivate()
{
}
virtual void deactivate() {}


virtual void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) = 0; virtual void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) = 0;


@@ -321,13 +314,12 @@ protected:
return; return;


// unused // unused
(void)bank;
(void)program;
(void)bank; (void)program;
} }


virtual void uiSetCustomData(const char* const key, const char* const value) virtual void uiSetCustomData(const char* const key, const char* const value)
{ {
CARLA_SAFE_ASSERT_RETURN(key != nullptr,);
CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',);
CARLA_SAFE_ASSERT_RETURN(value != nullptr,); CARLA_SAFE_ASSERT_RETURN(value != nullptr,);
} }




+ 1
- 1
source/includes/CarlaNativeExtUI.hpp View File

@@ -58,7 +58,7 @@ protected:
carla_stdout("Trying to start UI using \"%s\"", path.buffer()); carla_stdout("Trying to start UI using \"%s\"", path.buffer());


CarlaExternalUI::setData(path, getSampleRate(), getUiName()); CarlaExternalUI::setData(path, getSampleRate(), getUiName());
CarlaExternalUI::startPipeServer();
CarlaExternalUI::startPipeServer(true);
} }
else else
{ {


+ 19
- 19
source/utils/CarlaStateUtils.cpp View File

@@ -108,7 +108,7 @@ static const char* xmlSafeStringCharDup(const String& string, const bool toXml)
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// StateParameter // StateParameter


StateParameter::StateParameter() noexcept
CarlaStateSave::Parameter::Parameter() noexcept
: isInput(true), : isInput(true),
index(-1), index(-1),
name(nullptr), name(nullptr),
@@ -121,7 +121,7 @@ StateParameter::StateParameter() noexcept
value(0.0f) {} value(0.0f) {}
#endif #endif


StateParameter::~StateParameter() noexcept
CarlaStateSave::Parameter::~Parameter() noexcept
{ {
if (name != nullptr) if (name != nullptr)
{ {
@@ -138,12 +138,12 @@ StateParameter::~StateParameter() noexcept
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// StateCustomData // StateCustomData


StateCustomData::StateCustomData() noexcept
CarlaStateSave::CustomData::CustomData() noexcept
: type(nullptr), : type(nullptr),
key(nullptr), key(nullptr),
value(nullptr) {} value(nullptr) {}


StateCustomData::~StateCustomData() noexcept
CarlaStateSave::CustomData::~CustomData() noexcept
{ {
if (type != nullptr) if (type != nullptr)
{ {
@@ -165,7 +165,7 @@ StateCustomData::~StateCustomData() noexcept
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// StateSave // StateSave


StateSave::StateSave() noexcept
CarlaStateSave::CarlaStateSave() noexcept
: type(nullptr), : type(nullptr),
name(nullptr), name(nullptr),
label(nullptr), label(nullptr),
@@ -189,12 +189,12 @@ StateSave::StateSave() noexcept
parameters(), parameters(),
customData() {} customData() {}


StateSave::~StateSave() noexcept
CarlaStateSave::~CarlaStateSave() noexcept
{ {
clear(); clear();
} }


void StateSave::clear() noexcept
void CarlaStateSave::clear() noexcept
{ {
if (type != nullptr) if (type != nullptr)
{ {
@@ -242,15 +242,15 @@ void StateSave::clear() noexcept
currentMidiBank = -1; currentMidiBank = -1;
currentMidiProgram = -1; currentMidiProgram = -1;


for (StateParameterItenerator it = parameters.begin(); it.valid(); it.next())
for (ParameterItenerator it = parameters.begin(); it.valid(); it.next())
{ {
StateParameter* const stateParameter(it.getValue());
Parameter* const stateParameter(it.getValue());
delete stateParameter; delete stateParameter;
} }


for (StateCustomDataItenerator it = customData.begin(); it.valid(); it.next())
for (CustomDataItenerator it = customData.begin(); it.valid(); it.next())
{ {
StateCustomData* const stateCustomData(it.getValue());
CustomData* const stateCustomData(it.getValue());
delete stateCustomData; delete stateCustomData;
} }


@@ -261,7 +261,7 @@ void StateSave::clear() noexcept
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// fillFromXmlElement // fillFromXmlElement


bool StateSave::fillFromXmlElement(const XmlElement* const xmlElement)
bool CarlaStateSave::fillFromXmlElement(const XmlElement* const xmlElement)
{ {
CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr, false); CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr, false);


@@ -386,7 +386,7 @@ bool StateSave::fillFromXmlElement(const XmlElement* const xmlElement)


else if (tag.equalsIgnoreCase("parameter")) else if (tag.equalsIgnoreCase("parameter"))
{ {
StateParameter* const stateParameter(new StateParameter());
Parameter* const stateParameter(new Parameter());


for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement()) for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement())
{ {
@@ -436,7 +436,7 @@ bool StateSave::fillFromXmlElement(const XmlElement* const xmlElement)


else if (tag.equalsIgnoreCase("customdata") || tag.equalsIgnoreCase("custom-data")) else if (tag.equalsIgnoreCase("customdata") || tag.equalsIgnoreCase("custom-data"))
{ {
StateCustomData* const stateCustomData(new StateCustomData());
CustomData* const stateCustomData(new CustomData());


for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement()) for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement())
{ {
@@ -472,7 +472,7 @@ bool StateSave::fillFromXmlElement(const XmlElement* const xmlElement)
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// fillXmlStringFromStateSave // fillXmlStringFromStateSave


String StateSave::toString() const
String CarlaStateSave::toString() const
{ {
String content; String content;


@@ -557,9 +557,9 @@ String StateSave::toString() const
} }
#endif #endif


for (StateParameterItenerator it = parameters.begin(); it.valid(); it.next())
for (ParameterItenerator it = parameters.begin(); it.valid(); it.next())
{ {
StateParameter* const stateParameter(it.getValue());
Parameter* const stateParameter(it.getValue());


String parameterXml("\n"" <Parameter>\n"); String parameterXml("\n"" <Parameter>\n");


@@ -607,9 +607,9 @@ String StateSave::toString() const
content << midiProgramXml; content << midiProgramXml;
} }


for (StateCustomDataItenerator it = customData.begin(); it.valid(); it.next())
for (CustomDataItenerator it = customData.begin(); it.valid(); it.next())
{ {
StateCustomData* const stateCustomData(it.getValue());
CustomData* const stateCustomData(it.getValue());
CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->type != nullptr && stateCustomData->type[0] != '\0'); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->type != nullptr && stateCustomData->type[0] != '\0');
CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->key != nullptr && stateCustomData->key[0] != '\0'); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->key != nullptr && stateCustomData->key[0] != '\0');
CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->value != nullptr); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->value != nullptr);


+ 30
- 30
source/utils/CarlaStateUtils.hpp View File

@@ -27,41 +27,41 @@ CARLA_BACKEND_START_NAMESPACE


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


struct StateParameter {
bool isInput;
int32_t index;
const char* name;
const char* symbol;
float value;
struct CarlaStateSave {
struct Parameter {
bool isInput;
int32_t index;
const char* name;
const char* symbol;
float value;
#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
uint8_t midiChannel;
int16_t midiCC;
uint8_t midiChannel;
int16_t midiCC;
#endif #endif


StateParameter() noexcept;
~StateParameter() noexcept;
Parameter() noexcept;
~Parameter() noexcept;


CARLA_DECLARE_NON_COPY_STRUCT(StateParameter)
};
CARLA_DECLARE_NON_COPY_STRUCT(Parameter)
};


struct StateCustomData {
const char* type;
const char* key;
const char* value;
typedef LinkedList<Parameter*> ParameterList;
typedef LinkedList<Parameter*>::Itenerator ParameterItenerator;


StateCustomData() noexcept;
~StateCustomData() noexcept;
struct CustomData {
const char* type;
const char* key;
const char* value;


CARLA_DECLARE_NON_COPY_STRUCT(StateCustomData)
};
CustomData() noexcept;
~CustomData() noexcept;


typedef LinkedList<StateParameter*> StateParameterList;
typedef LinkedList<StateCustomData*> StateCustomDataList;
CARLA_DECLARE_NON_COPY_STRUCT(CustomData)
};


typedef LinkedList<StateParameter*>::Itenerator StateParameterItenerator;
typedef LinkedList<StateCustomData*>::Itenerator StateCustomDataItenerator;
typedef LinkedList<CustomData*> CustomDataList;
typedef LinkedList<CustomData*>::Itenerator CustomDataItenerator;


struct StateSave {
const char* type; const char* type;
const char* name; const char* name;
const char* label; const char* label;
@@ -85,17 +85,17 @@ struct StateSave {
int32_t currentMidiProgram; int32_t currentMidiProgram;
const char* chunk; const char* chunk;


StateParameterList parameters;
StateCustomDataList customData;
ParameterList parameters;
CustomDataList customData;


StateSave() noexcept;
~StateSave() noexcept;
CarlaStateSave() noexcept;
~CarlaStateSave() noexcept;
void clear() noexcept; void clear() noexcept;


bool fillFromXmlElement(const juce::XmlElement* const xmlElement); bool fillFromXmlElement(const juce::XmlElement* const xmlElement);
juce::String toString() const; juce::String toString() const;


CARLA_DECLARE_NON_COPY_STRUCT(StateSave)
CARLA_DECLARE_NON_COPY_STRUCT(CarlaStateSave)
}; };


static inline static inline


Loading…
Cancel
Save