Browse Source

Carla: Don't register master client for plugin-bridges

Makes plugin-bridges use a single client, which is more friendly to ladish
but also better way in general
tags/v0.9.0
falkTX 13 years ago
parent
commit
93f8315778
3 changed files with 58 additions and 35 deletions
  1. +6
    -8
      c++/carla-backend/carla_engine.cpp
  2. +36
    -10
      c++/carla-backend/carla_engine_jack.cpp
  3. +16
    -17
      c++/carla-bridge/carla_bridge_plugin.cpp

+ 6
- 8
c++/carla-backend/carla_engine.cpp View File

@@ -410,11 +410,11 @@ short CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, con
{
case PLUGIN_NONE:
break;
case PLUGIN_INTERNAL:
#ifndef BUILD_BRIDGE
case PLUGIN_INTERNAL:
plugin = CarlaPlugin::newNative(init);
#endif
break;
#endif
case PLUGIN_LADSPA:
plugin = CarlaPlugin::newLADSPA(init, extra);
break;
@@ -427,12 +427,7 @@ short CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, con
case PLUGIN_VST:
plugin = CarlaPlugin::newVST(init);
break;
#ifdef BUILD_BRIDGE
case PLUGIN_GIG:
case PLUGIN_SF2:
case PLUGIN_SFZ:
break;
#else
#ifndef BUILD_BRIDGE
case PLUGIN_GIG:
plugin = CarlaPlugin::newGIG(init);
break;
@@ -442,6 +437,9 @@ short CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, con
case PLUGIN_SFZ:
plugin = CarlaPlugin::newSFZ(init);
break;
#else
default:
break;
#endif
}
}


+ 36
- 10
c++/carla-backend/carla_engine_jack.cpp View File

@@ -64,9 +64,11 @@ public:
{
qDebug("CarlaEngineJack::init(\"%s\")", clientName);

client = jackbridge_client_open(clientName, JackNullOption, nullptr);
state = JackTransportStopped;
freewheel = false;
state = JackTransportStopped;

#ifndef BUILD_BRIDGE
client = jackbridge_client_open(clientName, JackNullOption, nullptr);

if (client)
{
@@ -79,7 +81,6 @@ public:
jackbridge_set_process_callback(client, carla_jack_process_callback, this);
jackbridge_on_shutdown(client, carla_jack_shutdown_callback, this);

#ifndef BUILD_BRIDGE
if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK)
{
rackJackPorts[rackPortAudioIn1] = jackbridge_port_register(client, "in1", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
@@ -91,7 +92,6 @@ public:
rackJackPorts[rackPortMidiIn] = jackbridge_port_register(client, "midi-in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
rackJackPorts[rackPortMidiOut] = jackbridge_port_register(client, "midi-out", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
}
#endif

if (jackbridge_activate(client) == 0)
{
@@ -109,6 +109,11 @@ public:
setLastError("Failed to create new JACK client");

return false;
#else
name = getFixedClientName(clientName);
CarlaEngine::init(name);
return true;
#endif
}

bool close()
@@ -122,9 +127,12 @@ public:
name = nullptr;
}

#ifdef BUILD_BRIDGE
client = nullptr;
return true;
#else
if (jackbridge_deactivate(client) == 0)
{
#ifndef BUILD_BRIDGE
if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK)
{
jackbridge_port_unregister(client, rackJackPorts[rackPortAudioIn1]);
@@ -136,7 +144,6 @@ public:
jackbridge_port_unregister(client, rackJackPorts[rackPortMidiIn]);
jackbridge_port_unregister(client, rackJackPorts[rackPortMidiOut]);
}
#endif

if (jackbridge_client_close(client) == 0)
{
@@ -150,6 +157,7 @@ public:
setLastError("Failed to deactivate the JACK client");

client = nullptr;
#endif
return false;
}

@@ -168,17 +176,28 @@ public:
CarlaEngineClientNativeHandle handle;
handle.type = CarlaEngineTypeJack;

#ifndef BUILD_BRIDGE
#ifdef BUILD_BRIDGE
client = handle.jackClient = jackbridge_client_open(plugin->name(), JackNullOption, nullptr);

sampleRate = jackbridge_get_sample_rate(client);
bufferSize = jackbridge_get_buffer_size(client);

jackbridge_set_sample_rate_callback(client, carla_jack_srate_callback, this);
jackbridge_set_buffer_size_callback(client, carla_jack_bufsize_callback, this);
jackbridge_set_freewheel_callback(client, carla_jack_freewheel_callback, this);
jackbridge_set_process_callback(handle.jackClient, carla_jack_process_callback, this);
jackbridge_on_shutdown(client, carla_jack_shutdown_callback, this);
#else
if (carlaOptions.processMode == PROCESS_MODE_SINGLE_CLIENT)
{
handle.jackClient = client;
}
else if (carlaOptions.processMode == PROCESS_MODE_MULTIPLE_CLIENTS)
#endif
{
handle.jackClient = jackbridge_client_open(plugin->name(), JackNullOption, nullptr);
jackbridge_set_process_callback(handle.jackClient, carla_jack_process_callback_plugin, plugin);
}
#endif

return new CarlaEngineClient(handle);
}
@@ -212,7 +231,6 @@ protected:
if (maxPluginNumber() == 0)
return;
#endif

state = jackbridge_transport_query(client, &pos);

timeInfo.playing = (state != JackTransportStopped);
@@ -427,7 +445,15 @@ protected:
}
}
#else
Q_UNUSED(nframes);
CarlaPlugin* const plugin = getPluginUnchecked(0);

if (plugin && plugin->enabled())
{
plugin->engineProcessLock();
plugin->initBuffers();
processPlugin(plugin, nframes);
plugin->engineProcessUnlock();
}
#endif
}



+ 16
- 17
c++/carla-bridge/carla_bridge_plugin.cpp View File

@@ -674,6 +674,7 @@ int main(int argc, char* argv[])

qargc = argc;
qargv = argv;
initSignalHandler();

const char* const oscUrl = argv[1];
const char* const stype = argv[2];
@@ -715,34 +716,35 @@ int main(int argc, char* argv[])
}

// Init backend engine
CarlaBackend::CarlaEngineJack engine;
engine.setCallback(client.callback, &client);
CarlaBackend::CarlaEngine* engine = CarlaBackend::CarlaEngine::newDriverByName("JACK");
engine->setCallback(client.callback, &client);

// bridge client <-> engine
client.registerOscEngine(&engine);
client.registerOscEngine(engine);

// Init engine
QString engName = QString("%1 (master)").arg(name ? name : label);
engName.truncate(engine.maxClientNameSize());
engName.truncate(engine->maxClientNameSize());

if (! engine.init(engName.toUtf8().constData()))
if (! engine->init(engName.toUtf8().constData()))
{
const char* const lastError = CarlaBackend::getLastError();
qWarning("Bridge engine failed to start, error was:\n%s", lastError);
engine.close();
engine->close();
delete engine;
client.sendOscBridgeError(lastError);
client.quit();
return 2;
}

/// Init plugin
short id = engine.addPlugin(itype, filename, name, label);
short id = engine->addPlugin(itype, filename, name, label);
int ret;

if (id >= 0 && id < CarlaBackend::MAX_PLUGINS)
{
CarlaBackend::CarlaPlugin* const plugin = engine.getPlugin(id);
client.setStuff(&engine, plugin);
CarlaBackend::CarlaPlugin* const plugin = engine->getPlugin(id);
client.setStuff(engine, plugin);

// create window if needed
bool guiResizable;
@@ -757,6 +759,8 @@ int main(int argc, char* argv[])
if (! useOsc)
plugin->setActive(true, false, false);

client.exec(nullptr, !useOsc);

ret = 0;
}
else
@@ -770,14 +774,9 @@ int main(int argc, char* argv[])
ret = 1;
}

if (ret == 0)
{
initSignalHandler();
client.exec(nullptr, !useOsc);
}

engine.removeAllPlugins();
engine.close();
engine->removeAllPlugins();
engine->close();
delete engine;

if (useOsc)
{


Loading…
Cancel
Save