From a2617d4252b22bdad1855eb2bd4e6d7ab7cc5b10 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 8 Apr 2012 00:46:18 +0100 Subject: [PATCH] Misc fixes --- src/carla/Makefile | 13 +++---- src/carla/carla_threads.cpp | 23 ++++++++---- src/carla/carla_threads.h | 5 ++- src/carla/dssi.cpp | 5 --- src/carla/lv2-rtmempool/rtmempool.c | 2 +- src/carla/lv2.cpp | 56 +++++++++++++++++------------ src/carla/vst.cpp | 5 ++- 7 files changed, 64 insertions(+), 45 deletions(-) diff --git a/src/carla/Makefile b/src/carla/Makefile index f7a2a7e..6ce31aa 100644 --- a/src/carla/Makefile +++ b/src/carla/Makefile @@ -7,10 +7,11 @@ CC ?= gcc CXX ?= g++ -CARLA_BUILD_FLAGS = -Wall -std=c++0x -fPIC -I. -I../carla-includes `pkg-config --cflags jack fluidsynth liblo QtCore QtGui` $(CXXFLAGS) -# CARLA_BUILD_FLAGS += -DNDEBUG -DQT_NO_DEBUG -DQT_NO_DEBUG_STREAM -DQT_NO_DEBUG_OUTPUT -O2 -fvisibility=hidden -ffast-math -fomit-frame-pointer -mtune=generic -msse -CARLA_BUILD_FLAGS += -DDEBUG -O0 -g -CARLA_LINK_FLAGS = -shared -fPIC -ldl `pkg-config --libs jack fluidsynth liblo QtCore QtGui` $(LDFLAGS) +CARLA_C_FLAGS = -Wall -fPIC -I. -I../carla-includes $(CFLAGS) +CARLA_CXX_FLAGS = -Wall -std=c++0x -fPIC -I. -I../carla-includes `pkg-config --cflags jack fluidsynth liblo QtCore QtGui` $(CXXFLAGS) +#CARLA_CXX_FLAGS += -DNDEBUG -DQT_NO_DEBUG -DQT_NO_DEBUG_STREAM -DQT_NO_DEBUG_OUTPUT -O2 -fvisibility=hidden -ffast-math -fomit-frame-pointer -mtune=generic -msse +CARLA_CXX_FLAGS += -DDEBUG -O0 -g +CARLA_LINK_FLAGS = -shared -fPIC -ldl `pkg-config --libs jack fluidsynth liblo QtCore QtGui` $(LDFLAGS) OBJS = carla_backend.o carla_bridge.o carla_jack.o carla_osc.o carla_shared.o carla_threads.o ladspa.o dssi.o lv2.o vst.o sf2.o lv2-rtmempool/rtmempool.o @@ -24,10 +25,10 @@ carla_backend.dll: $(OBJS) windows.def $(CXX) $(OBJS) windows.def $(CARLA_LINK_FLAGS) -o carla_backend.dll .c.o: - $(CC) -c $< $(CARLA_BUILD_FLAGS) -o $@ + $(CC) -c $< $(CARLA_C_FLAGS) -o $@ .cpp.o: - $(CXX) -c $< $(CARLA_BUILD_FLAGS) -o $@ + $(CXX) -c $< $(CARLA_CXX_FLAGS) -o $@ clean: rm -f *.o lv2-rtmempool/*.o *.so *.dll diff --git a/src/carla/carla_threads.cpp b/src/carla/carla_threads.cpp index 5765d7d..44ea602 100644 --- a/src/carla/carla_threads.cpp +++ b/src/carla/carla_threads.cpp @@ -203,23 +203,29 @@ CarlaPluginThread::CarlaPluginThread(CarlaPlugin* plugin, PluginThreadMode mode) { qDebug("CarlaPluginThread::CarlaPluginThread(%p, %i)", plugin, mode); - m_process = new QProcess(nullptr); + m_process = nullptr; } CarlaPluginThread::~CarlaPluginThread() { - delete m_process; + if (m_process) + delete m_process; } -void CarlaPluginThread::setOscData(const char* binary, const char* label, const char* data1) +void CarlaPluginThread::setOscData(const char* binary, const char* label, const char* data1, const char* data2, const char* data3) { m_binary = QString(binary); m_label = QString(label); m_data1 = QString(data1); + m_data2 = QString(data2); + m_data3 = QString(data3); } void CarlaPluginThread::run() { + if (m_process == nullptr) + m_process = new QProcess(nullptr); + QStringList arguments; switch (m_mode) @@ -232,9 +238,12 @@ void CarlaPluginThread::run() break; case PLUGIN_THREAD_LV2_GUI: - //arguments << QString("%1/%2").arg(get_host_osc_url()).arg(m_plugin->id()); - //arguments << m_label; - //arguments << QString("%1 (GUI)").arg(m_plugin->name()); + /* osc_url */ arguments << QString("%1/%2").arg(get_host_osc_url()).arg(m_plugin->id()); + /* URI */ arguments << m_label; + /* ui-URI */ arguments << m_data1; + /* ui-filename */ arguments << m_data2; + /* ui-bundle */ arguments << m_data3; + /* ui-title */ arguments << QString("%1 (GUI)").arg(m_plugin->name()); break; case PLUGIN_THREAD_BRIDGE: @@ -243,6 +252,7 @@ void CarlaPluginThread::run() /* filename */ arguments << m_plugin->filename(); /* label */ arguments << m_label; break; + default: break; } @@ -253,6 +263,7 @@ void CarlaPluginThread::run() switch (m_mode) { case PLUGIN_THREAD_DSSI_GUI: + case PLUGIN_THREAD_LV2_GUI: if (m_plugin->update_osc_gui()) { m_process->waitForFinished(-1); diff --git a/src/carla/carla_threads.h b/src/carla/carla_threads.h index 996d2d6..0167820 100644 --- a/src/carla/carla_threads.h +++ b/src/carla/carla_threads.h @@ -50,7 +50,8 @@ public: CarlaPluginThread(CarlaPlugin* plugin, PluginThreadMode mode); ~CarlaPluginThread(); - void setOscData(const char* binary, const char* label, const char* data1=""); + void startNow(); + void setOscData(const char* binary, const char* label, const char* data1="", const char* data2="", const char* data3=""); protected: virtual void run(); @@ -62,6 +63,8 @@ private: QString m_binary; QString m_label; QString m_data1; + QString m_data2; + QString m_data3; QProcess* m_process; }; diff --git a/src/carla/dssi.cpp b/src/carla/dssi.cpp index 453f10e..2139be4 100644 --- a/src/carla/dssi.cpp +++ b/src/carla/dssi.cpp @@ -19,8 +19,6 @@ #include "dssi/dssi.h" -#include - class DssiPlugin : public CarlaPlugin { public: @@ -50,7 +48,6 @@ public: { if (osc.data.target) { - qDebug("DSSI GUI close - sending UI hide & quit"); osc_send_hide(&osc.data); osc_send_quit(&osc.data); } @@ -72,8 +69,6 @@ public: delete osc.thread; } - else - qDebug("DSSI GUI close - no thread registered"); osc_clear_data(&osc.data); } diff --git a/src/carla/lv2-rtmempool/rtmempool.c b/src/carla/lv2-rtmempool/rtmempool.c index f538923..9d6457e 100644 --- a/src/carla/lv2-rtmempool/rtmempool.c +++ b/src/carla/lv2-rtmempool/rtmempool.c @@ -387,7 +387,7 @@ rtsafe_memory_pool_create2( void rtmempool_allocator_init( - struct lv2_rtsafe_memory_pool_provider * allocator_ptr) + lv2_rtsafe_memory_pool_provider * allocator_ptr) { allocator_ptr->create = rtsafe_memory_pool_create2; allocator_ptr->destroy = rtsafe_memory_pool_destroy; diff --git a/src/carla/lv2.cpp b/src/carla/lv2.cpp index 0820620..abf30b3 100644 --- a/src/carla/lv2.cpp +++ b/src/carla/lv2.cpp @@ -167,24 +167,31 @@ public: break; case GUI_EXTERNAL_OSC: - // FIXME - fix dssi first, then copy - -// if (gui.visible) -// osc_send_hide(&osc.data); - -// osc_send_quit(&osc.data); + if (osc.data.target) + { + osc_send_hide(&osc.data); + osc_send_quit(&osc.data); + } -// if (osc.thread) -// { -// osc.thread->quit(); + if (osc.thread) + { + // Wait a bit first, try safe quit else force kill + if (osc.thread->isRunning()) + { + if (osc.thread->wait(2000) == false) + osc.thread->quit(); -// if (!osc.thread->wait(3000)) // 3 sec -// qWarning("Failed to properly stop LV2 OSC GUI thread"); + if (osc.thread->isRunning() && osc.thread->wait(1000) == false) + { + qWarning("Failed to properly stop LV2 OSC-GUI thread"); + osc.thread->terminate(); + } + } -// delete osc.thread; -// } + delete osc.thread; + } -// osc_clear_data(&osc.data); + osc_clear_data(&osc.data); break; @@ -2081,31 +2088,34 @@ public: if (is_bridged) { - gui.type = GUI_EXTERNAL_OSC; - //osc.thread = lv2_thread; - //CarlaPluginThread* lv2ui_thread = new Lv2OscGuiThread(); - //lv2_thread->set_plugin_id(plugin->id); - //lv2_thread->set_ui_type(UiType); - //lv2_thread->start(); + const char* osc_binary; switch (UiType) { case LV2_UI_QT4: qDebug("Will use LV2 Qt4 UI, bridged"); + osc_binary = nullptr; break; - case LV2_UI_X11: qDebug("Will use LV2 X11 UI, bridged"); + osc_binary = nullptr; break; - case LV2_UI_GTK2: qDebug("Will use LV2 Gtk2 UI, bridged"); + osc_binary = nullptr; break; - default: qDebug("Will use LV2 Unknown UI, bridged"); + osc_binary = nullptr; break; } + + if (osc_binary) + { + gui.type = GUI_EXTERNAL_OSC; + osc.thread = new CarlaPluginThread(this, CarlaPluginThread::PLUGIN_THREAD_LV2_GUI); + osc.thread->setOscData("lv2-gtk here", descriptor->URI, ui.descriptor->URI, ui.rdf_descriptor->Binary, ui.rdf_descriptor->Bundle); + } } else { diff --git a/src/carla/vst.cpp b/src/carla/vst.cpp index f55e255..561743f 100644 --- a/src/carla/vst.cpp +++ b/src/carla/vst.cpp @@ -65,7 +65,6 @@ public: gui.width = 0; gui.height = 0; - // FIXME? memset(midi_events, 0, sizeof(VstMidiEvent)*MAX_MIDI_EVENTS); for (unsigned short i=0; iflags & effFlagsIsSynth) return PLUGIN_CATEGORY_SYNTH; - // TODO - try to get category from label - return PLUGIN_CATEGORY_NONE; + return get_category_from_name(m_name); } virtual long unique_id() @@ -175,6 +173,7 @@ public: virtual void set_parameter_value(uint32_t param_id, double value, bool gui_send, bool osc_send, bool callback_send) { + fix_parameter_value(value, param.ranges[param_id]); effect->setParameter(effect, param_id, value); CarlaPlugin::set_parameter_value(param_id, value, gui_send, osc_send, callback_send); }