diff --git a/c++/carla-backend/carla_engine.cpp b/c++/carla-backend/carla_engine.cpp index 97e7282..83783de 100644 --- a/c++/carla-backend/carla_engine.cpp +++ b/c++/carla-backend/carla_engine.cpp @@ -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 } } diff --git a/c++/carla-backend/carla_engine_jack.cpp b/c++/carla-backend/carla_engine_jack.cpp index e7cadad..452b6d0 100644 --- a/c++/carla-backend/carla_engine_jack.cpp +++ b/c++/carla-backend/carla_engine_jack.cpp @@ -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 } diff --git a/c++/carla-bridge/carla_bridge_plugin.cpp b/c++/carla-bridge/carla_bridge_plugin.cpp index b25eb78..9efaa41 100644 --- a/c++/carla-bridge/carla_bridge_plugin.cpp +++ b/c++/carla-bridge/carla_bridge_plugin.cpp @@ -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) {