| @@ -21,6 +21,8 @@ | |||
| #include "carla_engine_osc.hpp" | |||
| #include "carla_engine_thread.hpp" | |||
| #include <QtCore/QProcessEnvironment> | |||
| CARLA_BACKEND_START_NAMESPACE | |||
| /*! | |||
| @@ -206,7 +208,6 @@ struct CarlaEngineTimeInfo { | |||
| valid(0) {} | |||
| }; | |||
| #ifndef BUILD_BRIDGE | |||
| /*! | |||
| * Engine options. | |||
| */ | |||
| @@ -252,7 +253,6 @@ struct CarlaEngineOptions { | |||
| preferUiBridges(true), | |||
| oscUiTimeout(4000/100) {} | |||
| }; | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| @@ -557,7 +557,7 @@ public: | |||
| /*! | |||
| * Maximum number of loadable plugins. | |||
| * \note This function returns 0 if no engine is not started. | |||
| * \note This function returns 0 if engine is not started. | |||
| */ | |||
| unsigned short maxPluginNumber() const; | |||
| @@ -710,7 +710,6 @@ public: | |||
| */ | |||
| void setLastError(const char* const error); | |||
| #ifndef BUILD_BRIDGE | |||
| // ------------------------------------------------------------------- | |||
| // Options | |||
| @@ -722,6 +721,15 @@ public: | |||
| return options; | |||
| } | |||
| #ifndef BUILD_BRIDGE | |||
| /*! | |||
| * Get the engine options as process environment. | |||
| */ | |||
| const QProcessEnvironment& getOptionsAsProcessEnvironment() const | |||
| { | |||
| return m_procEnv; | |||
| } | |||
| /*! | |||
| * Set the engine option \a option. | |||
| */ | |||
| @@ -916,9 +924,7 @@ protected: | |||
| void processRack(float* inBuf[2], float* outBuf[2], const uint32_t frames); | |||
| #endif | |||
| #ifndef BUILD_BRIDGE | |||
| CarlaEngineOptions options; | |||
| #endif | |||
| CarlaString name; | |||
| uint32_t bufferSize; | |||
| @@ -937,6 +943,10 @@ private: | |||
| void* m_callbackPtr; | |||
| CarlaString m_lastError; | |||
| #ifndef BUILD_BRIDGE | |||
| QProcessEnvironment m_procEnv; | |||
| #endif | |||
| QMutex m_procLock; | |||
| QMutex m_midiLock; | |||
| @@ -18,6 +18,8 @@ | |||
| #ifndef LADSPA_RDF_INCLUDED | |||
| #define LADSPA_RDF_INCLUDED | |||
| // FIXME - use LADSPA_PORT_UNIT_xxx | |||
| #include <cstdlib> | |||
| // Base Types | |||
| @@ -24,11 +24,25 @@ | |||
| #include <cstdlib> | |||
| // Base Types | |||
| typedef float LV2_Data; | |||
| typedef const char* LV2_URI; | |||
| typedef uint32_t LV2_Property; | |||
| typedef unsigned long long LV2_PluginType; | |||
| struct LV2_Type { | |||
| LV2_Property Value; //... | |||
| LV2_URI URI; | |||
| LV2_Type() | |||
| : Value(0), | |||
| URI(nullptr) {} | |||
| ~LV2_Type() | |||
| { | |||
| if (URI) | |||
| ::free((void*)URI); | |||
| } | |||
| }; | |||
| // Port Midi Map Types | |||
| #define LV2_PORT_MIDI_MAP_CC 0x1 | |||
| #define LV2_PORT_MIDI_MAP_NRPN 0x2 | |||
| @@ -45,67 +59,67 @@ typedef unsigned long long LV2_PluginType; | |||
| #define LV2_HAVE_MINIMUM_PORT_POINT(x) ((x) & LV2_PORT_POINT_MINIMUM) | |||
| #define LV2_HAVE_MAXIMUM_PORT_POINT(x) ((x) & LV2_PORT_POINT_MAXIMUM) | |||
| // Port Unit Types | |||
| #define LV2_UNIT_BAR 0x01 | |||
| #define LV2_UNIT_BEAT 0x02 | |||
| #define LV2_UNIT_BPM 0x03 | |||
| #define LV2_UNIT_CENT 0x04 | |||
| #define LV2_UNIT_CM 0x05 | |||
| #define LV2_UNIT_COEF 0x06 | |||
| #define LV2_UNIT_DB 0x07 | |||
| #define LV2_UNIT_DEGREE 0x08 | |||
| #define LV2_UNIT_FRAME 0x09 | |||
| #define LV2_UNIT_HZ 0x0A | |||
| #define LV2_UNIT_INCH 0x0B | |||
| #define LV2_UNIT_KHZ 0x0C | |||
| #define LV2_UNIT_KM 0x0D | |||
| #define LV2_UNIT_M 0x0E | |||
| #define LV2_UNIT_MHZ 0x0F | |||
| #define LV2_UNIT_MIDINOTE 0x10 | |||
| #define LV2_UNIT_MILE 0x11 | |||
| #define LV2_UNIT_MIN 0x12 | |||
| #define LV2_UNIT_MM 0x13 | |||
| #define LV2_UNIT_MS 0x14 | |||
| #define LV2_UNIT_OCT 0x15 | |||
| #define LV2_UNIT_PC 0x16 | |||
| #define LV2_UNIT_S 0x17 | |||
| #define LV2_UNIT_SEMITONE 0x18 | |||
| #define LV2_IS_UNIT_BAR(x) ((x) == LV2_UNIT_BAR) | |||
| #define LV2_IS_UNIT_BEAT(x) ((x) == LV2_UNIT_BEAT) | |||
| #define LV2_IS_UNIT_BPM(x) ((x) == LV2_UNIT_BPM) | |||
| #define LV2_IS_UNIT_CENT(x) ((x) == LV2_UNIT_CENT) | |||
| #define LV2_IS_UNIT_CM(x) ((x) == LV2_UNIT_CM) | |||
| #define LV2_IS_UNIT_COEF(x) ((x) == LV2_UNIT_COEF) | |||
| #define LV2_IS_UNIT_DB(x) ((x) == LV2_UNIT_DB) | |||
| #define LV2_IS_UNIT_DEGREE(x) ((x) == LV2_UNIT_DEGREE) | |||
| #define LV2_IS_UNIT_FRAME(x) ((x) == LV2_UNIT_FRAME) | |||
| #define LV2_IS_UNIT_HZ(x) ((x) == LV2_UNIT_HZ) | |||
| #define LV2_IS_UNIT_INCH(x) ((x) == LV2_UNIT_INCH) | |||
| #define LV2_IS_UNIT_KHZ(x) ((x) == LV2_UNIT_KHZ) | |||
| #define LV2_IS_UNIT_KM(x) ((x) == LV2_UNIT_KM) | |||
| #define LV2_IS_UNIT_M(x) ((x) == LV2_UNIT_M) | |||
| #define LV2_IS_UNIT_MHZ(x) ((x) == LV2_UNIT_MHZ) | |||
| #define LV2_IS_UNIT_MIDINOTE(x) ((x) == LV2_UNIT_MIDINOTE) | |||
| #define LV2_IS_UNIT_MILE(x) ((x) == LV2_UNIT_MILE) | |||
| #define LV2_IS_UNIT_MIN(x) ((x) == LV2_UNIT_MIN) | |||
| #define LV2_IS_UNIT_MM(x) ((x) == LV2_UNIT_MM) | |||
| #define LV2_IS_UNIT_MS(x) ((x) == LV2_UNIT_MS) | |||
| #define LV2_IS_UNIT_OCT(x) ((x) == LV2_UNIT_OCT) | |||
| #define LV2_IS_UNIT_PC(x) ((x) == LV2_UNIT_PC) | |||
| #define LV2_IS_UNIT_S(x) ((x) == LV2_UNIT_S) | |||
| #define LV2_IS_UNIT_SEMITONE(x) ((x) == LV2_UNIT_SEMITONE) | |||
| // Port Unit Hints | |||
| #define LV2_PORT_UNIT 0x1 | |||
| #define LV2_PORT_UNIT_NAME 0x2 | |||
| #define LV2_PORT_UNIT_RENDER 0x4 | |||
| #define LV2_PORT_UNIT_SYMBOL 0x8 | |||
| #define LV2_HAVE_UNIT(x) ((x) & LV2_PORT_UNIT) | |||
| #define LV2_HAVE_UNIT_NAME(x) ((x) & LV2_PORT_UNIT_NAME) | |||
| #define LV2_HAVE_UNIT_RENDER(x) ((x) & LV2_PORT_UNIT_RENDER) | |||
| #define LV2_HAVE_UNIT_SYMBOL(x) ((x) & LV2_PORT_UNIT_SYMBOL) | |||
| #define LV2_PORT_UNIT_NAME 0x1 | |||
| #define LV2_PORT_UNIT_RENDER 0x2 | |||
| #define LV2_PORT_UNIT_SYMBOL 0x4 | |||
| #define LV2_PORT_UNIT_UNIT 0x8 | |||
| #define LV2_HAVE_PORT_UNIT_NAME(x) ((x) & LV2_PORT_UNIT_NAME) | |||
| #define LV2_HAVE_PORT_UNIT_RENDER(x) ((x) & LV2_PORT_UNIT_RENDER) | |||
| #define LV2_HAVE_PORT_UNIT_SYMBOL(x) ((x) & LV2_PORT_UNIT_SYMBOL) | |||
| #define LV2_HAVE_PORT_UNIT_UNIT(x) ((x) & LV2_PORT_UNIT_UNIT) | |||
| // Port Unit Unit | |||
| #define LV2_PORT_UNIT_BAR 0x01 | |||
| #define LV2_PORT_UNIT_BEAT 0x02 | |||
| #define LV2_PORT_UNIT_BPM 0x03 | |||
| #define LV2_PORT_UNIT_CENT 0x04 | |||
| #define LV2_PORT_UNIT_CM 0x05 | |||
| #define LV2_PORT_UNIT_COEF 0x06 | |||
| #define LV2_PORT_UNIT_DB 0x07 | |||
| #define LV2_PORT_UNIT_DEGREE 0x08 | |||
| #define LV2_PORT_UNIT_FRAME 0x09 | |||
| #define LV2_PORT_UNIT_HZ 0x0A | |||
| #define LV2_PORT_UNIT_INCH 0x0B | |||
| #define LV2_PORT_UNIT_KHZ 0x0C | |||
| #define LV2_PORT_UNIT_KM 0x0D | |||
| #define LV2_PORT_UNIT_M 0x0E | |||
| #define LV2_PORT_UNIT_MHZ 0x0F | |||
| #define LV2_PORT_UNIT_MIDINOTE 0x10 | |||
| #define LV2_PORT_UNIT_MILE 0x11 | |||
| #define LV2_PORT_UNIT_MIN 0x12 | |||
| #define LV2_PORT_UNIT_MM 0x13 | |||
| #define LV2_PORT_UNIT_MS 0x14 | |||
| #define LV2_PORT_UNIT_OCT 0x15 | |||
| #define LV2_PORT_UNIT_PC 0x16 | |||
| #define LV2_PORT_UNIT_S 0x17 | |||
| #define LV2_PORT_UNIT_SEMITONE 0x18 | |||
| #define LV2_IS_PORT_UNIT_BAR(x) ((x) == LV2_PORT_UNIT_BAR) | |||
| #define LV2_IS_PORT_UNIT_BEAT(x) ((x) == LV2_PORT_UNIT_BEAT) | |||
| #define LV2_IS_PORT_UNIT_BPM(x) ((x) == LV2_PORT_UNIT_BPM) | |||
| #define LV2_IS_PORT_UNIT_CENT(x) ((x) == LV2_PORT_UNIT_CENT) | |||
| #define LV2_IS_PORT_UNIT_CM(x) ((x) == LV2_PORT_UNIT_CM) | |||
| #define LV2_IS_PORT_UNIT_COEF(x) ((x) == LV2_PORT_UNIT_COEF) | |||
| #define LV2_IS_PORT_UNIT_DB(x) ((x) == LV2_PORT_UNIT_DB) | |||
| #define LV2_IS_PORT_UNIT_DEGREE(x) ((x) == LV2_PORT_UNIT_DEGREE) | |||
| #define LV2_IS_PORT_UNIT_FRAME(x) ((x) == LV2_PORT_UNIT_FRAME) | |||
| #define LV2_IS_PORT_UNIT_HZ(x) ((x) == LV2_PORT_UNIT_HZ) | |||
| #define LV2_IS_PORT_UNIT_INCH(x) ((x) == LV2_PORT_UNIT_INCH) | |||
| #define LV2_IS_PORT_UNIT_KHZ(x) ((x) == LV2_PORT_UNIT_KHZ) | |||
| #define LV2_IS_PORT_UNIT_KM(x) ((x) == LV2_PORT_UNIT_KM) | |||
| #define LV2_IS_PORT_UNIT_M(x) ((x) == LV2_PORT_UNIT_M) | |||
| #define LV2_IS_PORT_UNIT_MHZ(x) ((x) == LV2_PORT_UNIT_MHZ) | |||
| #define LV2_IS_PORT_UNIT_MIDINOTE(x) ((x) == LV2_PORT_UNIT_MIDINOTE) | |||
| #define LV2_IS_PORT_UNIT_MILE(x) ((x) == LV2_PORT_UNIT_MILE) | |||
| #define LV2_IS_PORT_UNIT_MIN(x) ((x) == LV2_PORT_UNIT_MIN) | |||
| #define LV2_IS_PORT_UNIT_MM(x) ((x) == LV2_PORT_UNIT_MM) | |||
| #define LV2_IS_PORT_UNIT_MS(x) ((x) == LV2_PORT_UNIT_MS) | |||
| #define LV2_IS_PORT_UNIT_OCT(x) ((x) == LV2_PORT_UNIT_OCT) | |||
| #define LV2_IS_PORT_UNIT_PC(x) ((x) == LV2_PORT_UNIT_PC) | |||
| #define LV2_IS_PORT_UNIT_S(x) ((x) == LV2_PORT_UNIT_S) | |||
| #define LV2_IS_PORT_UNIT_SEMITONE(x) ((x) == LV2_PORT_UNIT_SEMITONE) | |||
| // Port Types | |||
| #define LV2_PORT_INPUT 0x01 | |||
| @@ -118,9 +132,9 @@ typedef unsigned long long LV2_PluginType; | |||
| #define LV2_PORT_EVENT 0x80 | |||
| #define LV2_PORT_MIDI_LL 0x100 | |||
| // Port Support Types | |||
| #define LV2_PORT_SUPPORTS_MIDI_EVENT 0x1000 | |||
| #define LV2_PORT_SUPPORTS_PATCH_MESSAGE 0x2000 | |||
| // Port Data Types | |||
| #define LV2_PORT_DATA_MIDI_EVENT 0x1000 | |||
| #define LV2_PORT_DATA_PATCH_MESSAGE 0x2000 | |||
| #define LV2_IS_PORT_INPUT(x) ((x) & LV2_PORT_INPUT) | |||
| #define LV2_IS_PORT_OUTPUT(x) ((x) & LV2_PORT_OUTPUT) | |||
| @@ -131,6 +145,9 @@ typedef unsigned long long LV2_PluginType; | |||
| #define LV2_IS_PORT_EVENT(x) ((x) & LV2_PORT_EVENT) | |||
| #define LV2_IS_PORT_MIDI_LL(x) ((x) & LV2_PORT_MIDI_LL) | |||
| #define LV2_PORT_SUPPORTS_MIDI_EVENT ((x) & LV2_PORT_DATA_MIDI_EVENT) | |||
| #define LV2_PORT_SUPPORTS_PATCH_MESSAGE ((x) & LV2_PORT_DATA_PATCH_MESSAGE) | |||
| // Port Properties | |||
| #define LV2_PORT_OPTIONAL 0x0001 | |||
| #define LV2_PORT_ENUMERATION 0x0002 | |||
| @@ -190,11 +207,7 @@ typedef unsigned long long LV2_PluginType; | |||
| #define LV2_IS_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND(x) ((x) == LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND) | |||
| #define LV2_IS_PORT_DESIGNATION_TIME_POSITION(x) ((x) == LV2_PORT_DESIGNATION_TIME_POSITION) | |||
| #define LV2_IS_PORT_DESIGNATION_TIME_SPEED(x) ((x) == LV2_PORT_DESIGNATION_TIME_SPEED) | |||
| #define LV2_IS_PORT_DESIGNATION_TIME(x) ((x) == LV2_PORT_DESIGNATION_TIME_BAR || (x) == LV2_PORT_DESIGNATION_TIME_BAR_BEAT || \ | |||
| (x) == LV2_PORT_DESIGNATION_TIME_BEAT || (x) == LV2_PORT_DESIGNATION_TIME_BEAT_UNIT || \ | |||
| (x) == LV2_PORT_DESIGNATION_TIME_BEATS_PER_BAR || (x) == LV2_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE || \ | |||
| (x) == LV2_PORT_DESIGNATION_TIME_FRAME || (x) == LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND || \ | |||
| (x) == LV2_PORT_DESIGNATION_TIME_POSITION || (x) == LV2_PORT_DESIGNATION_TIME_SPEED) | |||
| #define LV2_IS_PORT_DESIGNATION_TIME(x) ((x) >= LV2_PORT_DESIGNATION_TIME_BAR && (x) <= LV2_PORT_DESIGNATION_TIME_SPEED) | |||
| // Preset State Types (TODO: Null is not a type, this is just a placeholder) | |||
| #define LV2_PRESET_STATE_NULL 0x0 | |||
| @@ -212,15 +225,17 @@ typedef unsigned long long LV2_PluginType; | |||
| #define LV2_UI_GTK2 0x1 | |||
| #define LV2_UI_GTK3 0x2 | |||
| #define LV2_UI_QT4 0x3 | |||
| #define LV2_UI_COCOA 0x4 | |||
| #define LV2_UI_WINDOWS 0x5 | |||
| #define LV2_UI_X11 0x6 | |||
| #define LV2_UI_EXTERNAL 0x7 | |||
| #define LV2_UI_OLD_EXTERNAL 0x8 | |||
| #define LV2_UI_QT5 0x4 | |||
| #define LV2_UI_COCOA 0x5 | |||
| #define LV2_UI_WINDOWS 0x6 | |||
| #define LV2_UI_X11 0x7 | |||
| #define LV2_UI_EXTERNAL 0x8 | |||
| #define LV2_UI_OLD_EXTERNAL 0x9 | |||
| #define LV2_IS_UI_GTK2(x) ((x) == LV2_UI_GTK2) | |||
| #define LV2_IS_UI_GTK3(x) ((x) == LV2_UI_GTK3) | |||
| #define LV2_IS_UI_QT4(x) ((x) == LV2_UI_QT4) | |||
| #define LV2_IS_UI_QT5(x) ((x) == LV2_UI_QT5) | |||
| #define LV2_IS_UI_COCOA(x) ((x) == LV2_UI_COCOA) | |||
| #define LV2_IS_UI_WINDOWS(x) ((x) == LV2_UI_WINDOWS) | |||
| #define LV2_IS_UI_X11(x) ((x) == LV2_UI_X11) | |||
| @@ -228,55 +243,55 @@ typedef unsigned long long LV2_PluginType; | |||
| #define LV2_IS_UI_OLD_EXTERNAL(x) ((x) == LV2_UI_OLD_EXTERNAL) | |||
| // Plugin Types | |||
| #define LV2_CLASS_ALLPASS 0x000000001LL | |||
| #define LV2_CLASS_AMPLIFIER 0x000000002LL | |||
| #define LV2_CLASS_ANALYSER 0x000000004LL | |||
| #define LV2_CLASS_BANDPASS 0x000000008LL | |||
| #define LV2_CLASS_CHORUS 0x000000010LL | |||
| #define LV2_CLASS_COMB 0x000000020LL | |||
| #define LV2_CLASS_COMPRESSOR 0x000000040LL | |||
| #define LV2_CLASS_CONSTANT 0x000000080LL | |||
| #define LV2_CLASS_CONVERTER 0x000000100LL | |||
| #define LV2_CLASS_DELAY 0x000000200LL | |||
| #define LV2_CLASS_DISTORTION 0x000000400LL | |||
| #define LV2_CLASS_DYNAMICS 0x000000800LL | |||
| #define LV2_CLASS_EQ 0x000001000LL | |||
| #define LV2_CLASS_EXPANDER 0x000002000LL | |||
| #define LV2_CLASS_FILTER 0x000004000LL | |||
| #define LV2_CLASS_FLANGER 0x000008000LL | |||
| #define LV2_CLASS_FUNCTION 0x000010000LL | |||
| #define LV2_CLASS_GATE 0x000020000LL | |||
| #define LV2_CLASS_GENERATOR 0x000040000LL | |||
| #define LV2_CLASS_HIGHPASS 0x000080000LL | |||
| #define LV2_CLASS_INSTRUMENT 0x000100000LL | |||
| #define LV2_CLASS_LIMITER 0x000200000LL | |||
| #define LV2_CLASS_LOWPASS 0x000400000LL | |||
| #define LV2_CLASS_MIXER 0x000800000LL | |||
| #define LV2_CLASS_MODULATOR 0x001000000LL | |||
| #define LV2_CLASS_MULTI_EQ 0x002000000LL | |||
| #define LV2_CLASS_OSCILLATOR 0x004000000LL | |||
| #define LV2_CLASS_PARA_EQ 0x008000000LL | |||
| #define LV2_CLASS_PHASER 0x010000000LL | |||
| #define LV2_CLASS_PITCH 0x020000000LL | |||
| #define LV2_CLASS_REVERB 0x040000000LL | |||
| #define LV2_CLASS_SIMULATOR 0x080000000LL | |||
| #define LV2_CLASS_SPATIAL 0x100000000LL | |||
| #define LV2_CLASS_SPECTRAL 0x200000000LL | |||
| #define LV2_CLASS_UTILITY 0x400000000LL | |||
| #define LV2_CLASS_WAVESHAPER 0x800000000LL | |||
| #define LV2_GROUP_DELAY (LV2_CLASS_DELAY|LV2_CLASS_REVERB) | |||
| #define LV2_GROUP_DISTORTION (LV2_CLASS_DISTORTION|LV2_CLASS_WAVESHAPER) | |||
| #define LV2_GROUP_DYNAMICS (LV2_CLASS_DYNAMICS|LV2_CLASS_AMPLIFIER|LV2_CLASS_COMPRESSOR|LV2_CLASS_EXPANDER|LV2_CLASS_GATE|LV2_CLASS_LIMITER) | |||
| #define LV2_GROUP_EQ (LV2_CLASS_EQ|LV2_CLASS_PARA_EQ|LV2_CLASS_MULTI_EQ) | |||
| #define LV2_GROUP_FILTER (LV2_CLASS_FILTER|LV2_CLASS_ALLPASS|LV2_CLASS_BANDPASS|LV2_CLASS_COMB|LV2_GROUP_EQ|LV2_CLASS_HIGHPASS|LV2_CLASS_LOWPASS) | |||
| #define LV2_GROUP_GENERATOR (LV2_CLASS_GENERATOR|LV2_CLASS_CONSTANT|LV2_CLASS_INSTRUMENT|LV2_CLASS_OSCILLATOR) | |||
| #define LV2_GROUP_MODULATOR (LV2_CLASS_MODULATOR|LV2_CLASS_CHORUS|LV2_CLASS_FLANGER|LV2_CLASS_PHASER) | |||
| #define LV2_GROUP_REVERB (LV2_CLASS_REVERB) | |||
| #define LV2_GROUP_SIMULATOR (LV2_CLASS_SIMULATOR|LV2_CLASS_REVERB) | |||
| #define LV2_GROUP_SPATIAL (LV2_CLASS_SPATIAL) | |||
| #define LV2_GROUP_SPECTRAL (LV2_CLASS_SPECTRAL|LV2_CLASS_PITCH) | |||
| #define LV2_GROUP_UTILITY (LV2_CLASS_UTILITY|LV2_CLASS_ANALYSER|LV2_CLASS_CONVERTER|LV2_CLASS_FUNCTION|LV2_CLASS_MIXER) | |||
| #define LV2_PLUGIN_ALLPASS 0x000000001LL | |||
| #define LV2_PLUGIN_AMPLIFIER 0x000000002LL | |||
| #define LV2_PLUGIN_ANALYSER 0x000000004LL | |||
| #define LV2_PLUGIN_BANDPASS 0x000000008LL | |||
| #define LV2_PLUGIN_CHORUS 0x000000010LL | |||
| #define LV2_PLUGIN_COMB 0x000000020LL | |||
| #define LV2_PLUGIN_COMPRESSOR 0x000000040LL | |||
| #define LV2_PLUGIN_CONSTANT 0x000000080LL | |||
| #define LV2_PLUGIN_CONVERTER 0x000000100LL | |||
| #define LV2_PLUGIN_DELAY 0x000000200LL | |||
| #define LV2_PLUGIN_DISTORTION 0x000000400LL | |||
| #define LV2_PLUGIN_DYNAMICS 0x000000800LL | |||
| #define LV2_PLUGIN_EQ 0x000001000LL | |||
| #define LV2_PLUGIN_EXPANDER 0x000002000LL | |||
| #define LV2_PLUGIN_FILTER 0x000004000LL | |||
| #define LV2_PLUGIN_FLANGER 0x000008000LL | |||
| #define LV2_PLUGIN_FUNCTION 0x000010000LL | |||
| #define LV2_PLUGIN_GATE 0x000020000LL | |||
| #define LV2_PLUGIN_GENERATOR 0x000040000LL | |||
| #define LV2_PLUGIN_HIGHPASS 0x000080000LL | |||
| #define LV2_PLUGIN_INSTRUMENT 0x000100000LL | |||
| #define LV2_PLUGIN_LIMITER 0x000200000LL | |||
| #define LV2_PLUGIN_LOWPASS 0x000400000LL | |||
| #define LV2_PLUGIN_MIXER 0x000800000LL | |||
| #define LV2_PLUGIN_MODULATOR 0x001000000LL | |||
| #define LV2_PLUGIN_MULTI_EQ 0x002000000LL | |||
| #define LV2_PLUGIN_OSCILLATOR 0x004000000LL | |||
| #define LV2_PLUGIN_PARA_EQ 0x008000000LL | |||
| #define LV2_PLUGIN_PHASER 0x010000000LL | |||
| #define LV2_PLUGIN_PITCH 0x020000000LL | |||
| #define LV2_PLUGIN_REVERB 0x040000000LL | |||
| #define LV2_PLUGIN_SIMULATOR 0x080000000LL | |||
| #define LV2_PLUGIN_SPATIAL 0x100000000LL | |||
| #define LV2_PLUGIN_SPECTRAL 0x200000000LL | |||
| #define LV2_PLUGIN_UTILITY 0x400000000LL | |||
| #define LV2_PLUGIN_WAVESHAPER 0x800000000LL | |||
| #define LV2_GROUP_DELAY (LV2_PLUGIN_DELAY|LV2_PLUGIN_REVERB) | |||
| #define LV2_GROUP_DISTORTION (LV2_PLUGIN_DISTORTION|LV2_PLUGIN_WAVESHAPER) | |||
| #define LV2_GROUP_DYNAMICS (LV2_PLUGIN_DYNAMICS|LV2_PLUGIN_AMPLIFIER|LV2_PLUGIN_COMPRESSOR|LV2_PLUGIN_EXPANDER|LV2_PLUGIN_GATE|LV2_PLUGIN_LIMITER) | |||
| #define LV2_GROUP_EQ (LV2_PLUGIN_EQ|LV2_PLUGIN_PARA_EQ|LV2_PLUGIN_MULTI_EQ) | |||
| #define LV2_GROUP_FILTER (LV2_PLUGIN_FILTER|LV2_PLUGIN_ALLPASS|LV2_PLUGIN_BANDPASS|LV2_PLUGIN_COMB|LV2_GROUP_EQ|LV2_PLUGIN_HIGHPASS|LV2_PLUGIN_LOWPASS) | |||
| #define LV2_GROUP_GENERATOR (LV2_PLUGIN_GENERATOR|LV2_PLUGIN_CONSTANT|LV2_PLUGIN_INSTRUMENT|LV2_PLUGIN_OSCILLATOR) | |||
| #define LV2_GROUP_MODULATOR (LV2_PLUGIN_MODULATOR|LV2_PLUGIN_CHORUS|LV2_PLUGIN_FLANGER|LV2_PLUGIN_PHASER) | |||
| #define LV2_GROUP_REVERB (LV2_PLUGIN_REVERB) | |||
| #define LV2_GROUP_SIMULATOR (LV2_PLUGIN_SIMULATOR|LV2_PLUGIN_REVERB) | |||
| #define LV2_GROUP_SPATIAL (LV2_PLUGIN_SPATIAL) | |||
| #define LV2_GROUP_SPECTRAL (LV2_PLUGIN_SPECTRAL|LV2_PLUGIN_PITCH) | |||
| #define LV2_GROUP_UTILITY (LV2_PLUGIN_UTILITY|LV2_PLUGIN_ANALYSER|LV2_PLUGIN_CONVERTER|LV2_PLUGIN_FUNCTION|LV2_PLUGIN_MIXER) | |||
| #define LV2_IS_DELAY(x) ((x) & LV2_GROUP_DELAY) | |||
| #define LV2_IS_DISTORTION(x) ((x) & LV2_GROUP_DISTORTION) | |||
| @@ -304,9 +319,9 @@ struct LV2_RDF_PortMidiMap { | |||
| // Port Points | |||
| struct LV2_RDF_PortPoints { | |||
| LV2_Property Hints; | |||
| LV2_Data Default; | |||
| LV2_Data Minimum; | |||
| LV2_Data Maximum; | |||
| float Default; | |||
| float Minimum; | |||
| float Maximum; | |||
| LV2_RDF_PortPoints() | |||
| : Hints(0x0), | |||
| @@ -317,18 +332,18 @@ struct LV2_RDF_PortPoints { | |||
| // Port Unit | |||
| struct LV2_RDF_PortUnit { | |||
| LV2_Property Type; | |||
| LV2_Property Hints; | |||
| const char* Name; | |||
| const char* Render; | |||
| const char* Symbol; | |||
| LV2_Property Unit; | |||
| LV2_RDF_PortUnit() | |||
| : Type(0), | |||
| Hints(0x0), | |||
| : Hints(0x0), | |||
| Name(nullptr), | |||
| Render(nullptr), | |||
| Symbol(nullptr) {} | |||
| Symbol(nullptr), | |||
| Unit(0) {} | |||
| ~LV2_RDF_PortUnit() | |||
| { | |||
| @@ -346,7 +361,7 @@ struct LV2_RDF_PortUnit { | |||
| // Port Scale Point | |||
| struct LV2_RDF_PortScalePoint { | |||
| const char* Label; | |||
| LV2_Data Value; | |||
| float Value; | |||
| LV2_RDF_PortScalePoint() | |||
| : Label(nullptr), | |||
| @@ -361,7 +376,7 @@ struct LV2_RDF_PortScalePoint { | |||
| // Port | |||
| struct LV2_RDF_Port { | |||
| LV2_Property Type; | |||
| LV2_Type Type; | |||
| LV2_Property Properties; | |||
| LV2_Property Designation; | |||
| const char* Name; | |||
| @@ -375,8 +390,7 @@ struct LV2_RDF_Port { | |||
| LV2_RDF_PortScalePoint* ScalePoints; | |||
| LV2_RDF_Port() | |||
| : Type(0x0), | |||
| Properties(0x0), | |||
| : Properties(0x0), | |||
| Designation(0), | |||
| Name(nullptr), | |||
| Symbol(nullptr), | |||
| @@ -399,7 +413,7 @@ struct LV2_RDF_Port { | |||
| // Preset Port | |||
| struct LV2_RDF_PresetPort { | |||
| const char* Symbol; | |||
| LV2_Data Value; | |||
| float Value; | |||
| LV2_RDF_PresetPort() | |||
| : Symbol(nullptr), | |||
| @@ -484,7 +498,7 @@ struct LV2_RDF_Feature { | |||
| // UI | |||
| struct LV2_RDF_UI { | |||
| LV2_Property Type; | |||
| LV2_Type Type; | |||
| LV2_URI URI; | |||
| const char* Binary; | |||
| const char* Bundle; | |||
| @@ -496,8 +510,7 @@ struct LV2_RDF_UI { | |||
| LV2_URI* Extensions; | |||
| LV2_RDF_UI() | |||
| : Type(0), | |||
| URI(nullptr), | |||
| : URI(nullptr), | |||
| Binary(nullptr), | |||
| Bundle(nullptr), | |||
| FeatureCount(0), | |||
| @@ -2,7 +2,7 @@ | |||
| #ifndef _SERD_CONFIG_H_ | |||
| #define _SERD_CONFIG_H_ | |||
| #define SERD_VERSION "0.18.0" | |||
| #define SERD_VERSION "0.18.2" | |||
| #if defined(__APPLE__) || defined(__HAIKU__) | |||
| #define HAVE_FMAX 1 | |||
| @@ -2,7 +2,7 @@ | |||
| #ifndef _SORD_CONFIG_H_ | |||
| #define _SORD_CONFIG_H_ | |||
| #define SORD_VERSION "0.10.0" | |||
| #define SORD_VERSION "0.10.4" | |||
| #define HAVE_SERD 1 | |||
| #define HAVE_PCRE 1 | |||
| @@ -60,4 +60,4 @@ carla_plugin.a: $(OBJS) | |||
| $(CXX) -c $< $(BUILD_CXX_FLAGS) -o $@ | |||
| clean: | |||
| rm -f *.a $(OBJS) | |||
| rm -f *.a *.o | |||
| @@ -61,7 +61,6 @@ CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const unsigned short id) | |||
| m_fixedBufferSize = true; | |||
| m_processHighPrecision = false; | |||
| #ifndef BUILD_BRIDGE | |||
| { | |||
| const CarlaEngineOptions& options(x_engine->getOptions()); | |||
| @@ -70,7 +69,6 @@ CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const unsigned short id) | |||
| if (options.processMode == PROCESS_MODE_CONTINUOUS_RACK) | |||
| m_ctrlInChannel = m_id; | |||
| } | |||
| #endif | |||
| // latency | |||
| m_latency = 0; | |||
| @@ -432,7 +430,6 @@ void CarlaPlugin::getGuiInfo(GuiType* const type, bool* const resizable) | |||
| // ------------------------------------------------------------------- | |||
| // Set data (internal stuff) | |||
| #ifndef BUILD_BRIDGE | |||
| void CarlaPlugin::setId(const unsigned short id) | |||
| { | |||
| m_id = id; | |||
| @@ -440,7 +437,6 @@ void CarlaPlugin::setId(const unsigned short id) | |||
| if (x_engine->getOptions().processMode == PROCESS_MODE_CONTINUOUS_RACK) | |||
| m_ctrlInChannel = id; | |||
| } | |||
| #endif | |||
| void CarlaPlugin::setEnabled(const bool yesNo) | |||
| { | |||
| @@ -954,13 +950,7 @@ void CarlaPlugin::registerToOscClient() | |||
| } | |||
| // Plugin Parameters | |||
| #ifdef BUILD_BRIDGE | |||
| const uint32_t maxParameters = MAX_PARAMETERS; | |||
| #else | |||
| const uint32_t maxParameters = x_engine->getOptions().maxParameters; | |||
| #endif | |||
| if (param.count > 0 && param.count < maxParameters) | |||
| if (param.count > 0 && param.count < x_engine->getOptions().maxParameters) | |||
| { | |||
| char bufName[STR_MAX], bufUnit[STR_MAX]; | |||
| @@ -1106,14 +1096,8 @@ bool CarlaPlugin::waitForOscGuiShow() | |||
| { | |||
| qWarning("CarlaPlugin::waitForOscGuiShow()"); | |||
| #ifndef BUILD_BRIDGE | |||
| const uint oscUiTimeout = x_engine->getOptions().oscUiTimeout; | |||
| #else | |||
| const uint oscUiTimeout = 40; | |||
| #endif | |||
| // wait for UI 'update' call | |||
| for (uint i=0; i < oscUiTimeout; i++) | |||
| for (uint i=0, oscUiTimeout = x_engine->getOptions().oscUiTimeout; i < oscUiTimeout; i++) | |||
| { | |||
| if (osc.data.target) | |||
| { | |||
| @@ -1125,7 +1109,7 @@ bool CarlaPlugin::waitForOscGuiShow() | |||
| carla_msleep(100); | |||
| } | |||
| qWarning("CarlaPlugin::waitForOscGuiShow() - Timeout while waiting for UI to respond (waited %u msecs)", oscUiTimeout); | |||
| qWarning("CarlaPlugin::waitForOscGuiShow() - Timeout while waiting for UI to respond (waited %u msecs)", x_engine->getOptions().oscUiTimeout); | |||
| return false; | |||
| } | |||
| @@ -460,14 +460,12 @@ public: | |||
| // ------------------------------------------------------------------- | |||
| // Set data (internal stuff) | |||
| #ifndef BUILD_BRIDGE | |||
| /*! | |||
| * Set the plugin's id to \a id. | |||
| * | |||
| * \see id() | |||
| */ | |||
| void setId(const unsigned short id); | |||
| #endif | |||
| /*! | |||
| * Enable or disable the plugin according to \a yesNo. | |||
| @@ -834,15 +832,17 @@ public: | |||
| const char* const label; | |||
| }; | |||
| //#ifndef BUILD_BRIDGE | |||
| static CarlaPlugin* newNative(const initializer& init); | |||
| //#endif | |||
| static CarlaPlugin* newLADSPA(const initializer& init, const void* const extra); | |||
| static CarlaPlugin* newDSSI(const initializer& init, const void* const extra); | |||
| static CarlaPlugin* newLV2(const initializer& init); | |||
| static CarlaPlugin* newVST(const initializer& init); | |||
| //#ifndef BUILD_BRIDGE | |||
| static CarlaPlugin* newGIG(const initializer& init); | |||
| static CarlaPlugin* newSF2(const initializer& init); | |||
| static CarlaPlugin* newSFZ(const initializer& init); | |||
| //#ifndef BUILD_BRIDGE | |||
| static CarlaPlugin* newBridge(const initializer& init, const BinaryType btype, const PluginType ptype, const void* const extra); | |||
| //#endif | |||
| @@ -15,7 +15,6 @@ | |||
| * For a full copy of the GNU General Public License see the COPYING file | |||
| */ | |||
| #include "carla_engine.hpp" | |||
| #include "carla_plugin.hpp" | |||
| #include <QtCore/QProcess> | |||
| @@ -69,9 +68,11 @@ void CarlaPluginThread::run() | |||
| qDebug("CarlaPluginThread::run()"); | |||
| if (! m_process) | |||
| { | |||
| m_process = new QProcess(nullptr); | |||
| m_process->setProcessChannelMode(QProcess::ForwardedChannels); | |||
| m_process->setProcessChannelMode(QProcess::ForwardedChannels); | |||
| m_process->setProcessEnvironment(engine->getOptionsAsProcessEnvironment()); | |||
| } | |||
| QString name(plugin->name() ? plugin->name() : "(none)"); | |||
| QStringList arguments; | |||
| @@ -62,13 +62,8 @@ public: | |||
| if (osc.thread) | |||
| { | |||
| #ifndef BUILD_BRIDGE | |||
| const uint oscUiTimeout = x_engine->getOptions().oscUiTimeout; | |||
| #else | |||
| const uint oscUiTimeout = 40; | |||
| #endif | |||
| // Wait a bit first, try safe quit, then force kill | |||
| if (osc.thread->isRunning() && ! osc.thread->wait(oscUiTimeout)) | |||
| if (osc.thread->isRunning() && ! osc.thread->wait(x_engine->getOptions().oscUiTimeout)) | |||
| { | |||
| qWarning("Failed to properly stop DSSI GUI thread"); | |||
| osc.thread->terminate(); | |||
| @@ -339,9 +334,7 @@ public: | |||
| qDebug("DssiPlugin::reload() - start"); | |||
| CARLA_ASSERT(descriptor && ldescriptor); | |||
| #ifndef BUILD_BRIDGE | |||
| const ProcessMode processMode(x_engine->getOptions().processMode); | |||
| #endif | |||
| // Safely disable plugin for reload | |||
| const ScopedDisabler m(this); | |||
| @@ -379,7 +372,6 @@ public: | |||
| params += 1; | |||
| } | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().forceStereo && (aIns == 1 || aOuts == 1) && ! h2) | |||
| { | |||
| h2 = ldescriptor->instantiate(ldescriptor, sampleRate); | |||
| @@ -396,7 +388,6 @@ public: | |||
| forcedStereoOut = true; | |||
| } | |||
| } | |||
| #endif | |||
| if (descriptor->run_synth || descriptor->run_multiple_synths) | |||
| mIns = 1; | |||
| @@ -435,13 +426,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += ldescriptor->PortNames[i]; | |||
| portName.truncate(portNameSize); | |||
| @@ -634,13 +624,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "control-in"; | |||
| portName.truncate(portNameSize); | |||
| @@ -651,13 +640,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "control-out"; | |||
| portName.truncate(portNameSize); | |||
| @@ -668,13 +656,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "midi-in"; | |||
| portName.truncate(portNameSize); | |||
| @@ -691,13 +678,11 @@ public: | |||
| if (midi.portMin && aOut.count > 0) | |||
| m_hints |= PLUGIN_IS_SYNTH; | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().useDssiVstChunks && QString(m_filename).endsWith("dssi-vst.so", Qt::CaseInsensitive)) | |||
| { | |||
| if (descriptor->get_custom_data && descriptor->set_custom_data) | |||
| m_hints |= PLUGIN_USES_CHUNKS; | |||
| } | |||
| #endif | |||
| if (aOuts > 0 && (aIns == aOuts || aIns == 1)) | |||
| m_hints |= PLUGIN_CAN_DRYWET; | |||
| @@ -813,7 +798,6 @@ public: | |||
| midiprog.data[i].name = strdup(pdesc->Name ? pdesc->Name : ""); | |||
| } | |||
| #ifndef BUILD_BRIDGE | |||
| // Update OSC Names | |||
| if (x_engine->isOscControlRegistered()) | |||
| { | |||
| @@ -822,7 +806,6 @@ public: | |||
| for (i=0; i < midiprog.count; i++) | |||
| x_engine->osc_send_control_set_midi_program_data(m_id, i, midiprog.data[i].bank, midiprog.data[i].program, midiprog.data[i].name); | |||
| } | |||
| #endif | |||
| if (init) | |||
| { | |||
| @@ -882,11 +865,7 @@ public: | |||
| // -------------------------------------------------------------------------------------------------------- | |||
| // Input VU | |||
| #ifndef BUILD_BRIDGE | |||
| if (aIn.count > 0 && x_engine->getOptions().processMode != PROCESS_MODE_CONTINUOUS_RACK) | |||
| #else | |||
| if (aIn.count > 0) | |||
| #endif | |||
| { | |||
| if (aIn.count == 1) | |||
| { | |||
| @@ -1373,9 +1352,7 @@ public: | |||
| } | |||
| // Output VU | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().processMode != PROCESS_MODE_CONTINUOUS_RACK) | |||
| #endif | |||
| { | |||
| for (k=0; i < 2 && k < frames; k++) | |||
| { | |||
| @@ -1643,7 +1620,6 @@ CarlaPlugin* CarlaPlugin::newDSSI(const initializer& init, const void* const ext | |||
| plugin->reload(); | |||
| # ifndef BUILD_BRIDGE | |||
| if (init.engine->getOptions().processMode == PROCESS_MODE_CONTINUOUS_RACK) | |||
| { | |||
| if (! (plugin->hints() & PLUGIN_CAN_FORCE_STEREO)) | |||
| @@ -1653,7 +1629,6 @@ CarlaPlugin* CarlaPlugin::newDSSI(const initializer& init, const void* const ext | |||
| return nullptr; | |||
| } | |||
| } | |||
| # endif | |||
| plugin->registerToOscClient(); | |||
| @@ -338,9 +338,7 @@ public: | |||
| qDebug("LadspaPlugin::reload() - start"); | |||
| CARLA_ASSERT(descriptor); | |||
| #ifndef BUILD_BRIDGE | |||
| const ProcessMode processMode(x_engine->getOptions().processMode); | |||
| #endif | |||
| // Safely disable plugin for reload | |||
| const ScopedDisabler m(this); | |||
| @@ -378,7 +376,6 @@ public: | |||
| params += 1; | |||
| } | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().forceStereo && (aIns == 1 || aOuts == 1) && ! h2) | |||
| { | |||
| h2 = descriptor->instantiate(descriptor, sampleRate); | |||
| @@ -395,7 +392,6 @@ public: | |||
| forcedStereoOut = true; | |||
| } | |||
| } | |||
| #endif | |||
| if (aIns > 0) | |||
| { | |||
| @@ -432,13 +428,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += descriptor->PortNames[i]; | |||
| portName.truncate(portNameSize); | |||
| @@ -626,13 +621,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "control-in"; | |||
| portName.truncate(portNameSize); | |||
| @@ -643,13 +637,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "control-out"; | |||
| portName.truncate(portNameSize); | |||
| @@ -748,11 +741,7 @@ public: | |||
| // -------------------------------------------------------------------------------------------------------- | |||
| // Input VU | |||
| #ifndef BUILD_BRIDGE | |||
| if (aIn.count > 0 && x_engine->getOptions().processMode != PROCESS_MODE_CONTINUOUS_RACK) | |||
| #else | |||
| if (aIn.count > 0) | |||
| #endif | |||
| { | |||
| if (aIn.count == 1) | |||
| { | |||
| @@ -1045,9 +1034,7 @@ public: | |||
| } | |||
| // Output VU | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().processMode != PROCESS_MODE_CONTINUOUS_RACK) | |||
| #endif | |||
| { | |||
| for (k=0; i < 2 && k < frames; k++) | |||
| { | |||
| @@ -1229,7 +1216,7 @@ CARLA_BACKEND_START_NAMESPACE | |||
| CarlaPlugin* CarlaPlugin::newLADSPA(const initializer& init, const void* const extra) | |||
| { | |||
| qDebug("CarlaPlugin::newLADSPA(%p, \"%s\", \"%s\", \"%s\", %p)", init.engine, init.filename, init.name, init.label, extra); | |||
| qDebug("CarlaPlugin::newLADSPA({%p, \"%s\", \"%s\", \"%s\"}, %p)", init.engine, init.filename, init.name, init.label, extra); | |||
| #ifdef WANT_LADSPA | |||
| short id = init.engine->getNewPluginId(); | |||
| @@ -1250,7 +1237,6 @@ CarlaPlugin* CarlaPlugin::newLADSPA(const initializer& init, const void* const e | |||
| plugin->reload(); | |||
| # ifndef BUILD_BRIDGE | |||
| if (init.engine->getOptions().processMode == PROCESS_MODE_CONTINUOUS_RACK) | |||
| { | |||
| if (! (plugin->hints() & PLUGIN_CAN_FORCE_STEREO)) | |||
| @@ -1260,7 +1246,6 @@ CarlaPlugin* CarlaPlugin::newLADSPA(const initializer& init, const void* const e | |||
| return nullptr; | |||
| } | |||
| } | |||
| # endif | |||
| plugin->registerToOscClient(); | |||
| @@ -343,13 +343,8 @@ public: | |||
| case GUI_EXTERNAL_OSC: | |||
| if (osc.thread) | |||
| { | |||
| #ifndef BUILD_BRIDGE | |||
| const uint oscUiTimeout = x_engine->getOptions().oscUiTimeout; | |||
| #else | |||
| const uint oscUiTimeout = 40; | |||
| #endif | |||
| // Wait a bit first, try safe quit, then force kill | |||
| if (osc.thread->isRunning() && ! osc.thread->wait(oscUiTimeout)) | |||
| if (osc.thread->isRunning() && ! osc.thread->wait(x_engine->getOptions().oscUiTimeout)) | |||
| { | |||
| qWarning("Failed to properly stop LV2 OSC GUI thread"); | |||
| osc.thread->terminate(); | |||
| @@ -435,9 +430,7 @@ public: | |||
| if (features[lv2_feature_id_worker] && features[lv2_feature_id_worker]->data) | |||
| delete (LV2_Worker_Schedule*)features[lv2_feature_id_worker]->data; | |||
| #ifndef BUILD_BRIDGE | |||
| if (! x_engine->getOptions().processHighPrecision) | |||
| #endif | |||
| { | |||
| features[lv2_feature_id_bufsize_fixed] = nullptr; | |||
| features[lv2_feature_id_bufsize_powerof2] = nullptr; | |||
| @@ -695,83 +688,83 @@ public: | |||
| { | |||
| const LV2_RDF_Port* const port = &rdf_descriptor->Ports[rindex]; | |||
| if (LV2_HAVE_UNIT_SYMBOL(port->Unit.Hints) && port->Unit.Symbol) | |||
| if (LV2_HAVE_PORT_UNIT_SYMBOL(port->Unit.Hints) && port->Unit.Symbol) | |||
| strncpy(strBuf, port->Unit.Symbol, STR_MAX); | |||
| else if (LV2_HAVE_UNIT(port->Unit.Hints)) | |||
| else if (LV2_HAVE_PORT_UNIT_UNIT(port->Unit.Hints)) | |||
| { | |||
| switch (port->Unit.Type) | |||
| switch (port->Unit.Unit) | |||
| { | |||
| case LV2_UNIT_BAR: | |||
| case LV2_PORT_UNIT_BAR: | |||
| strncpy(strBuf, "bars", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_BEAT: | |||
| case LV2_PORT_UNIT_BEAT: | |||
| strncpy(strBuf, "beats", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_BPM: | |||
| case LV2_PORT_UNIT_BPM: | |||
| strncpy(strBuf, "BPM", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_CENT: | |||
| case LV2_PORT_UNIT_CENT: | |||
| strncpy(strBuf, "ct", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_CM: | |||
| case LV2_PORT_UNIT_CM: | |||
| strncpy(strBuf, "cm", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_COEF: | |||
| case LV2_PORT_UNIT_COEF: | |||
| strncpy(strBuf, "(coef)", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_DB: | |||
| case LV2_PORT_UNIT_DB: | |||
| strncpy(strBuf, "dB", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_DEGREE: | |||
| case LV2_PORT_UNIT_DEGREE: | |||
| strncpy(strBuf, "deg", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_FRAME: | |||
| case LV2_PORT_UNIT_FRAME: | |||
| strncpy(strBuf, "frames", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_HZ: | |||
| case LV2_PORT_UNIT_HZ: | |||
| strncpy(strBuf, "Hz", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_INCH: | |||
| case LV2_PORT_UNIT_INCH: | |||
| strncpy(strBuf, "in", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_KHZ: | |||
| case LV2_PORT_UNIT_KHZ: | |||
| strncpy(strBuf, "kHz", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_KM: | |||
| case LV2_PORT_UNIT_KM: | |||
| strncpy(strBuf, "km", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_M: | |||
| case LV2_PORT_UNIT_M: | |||
| strncpy(strBuf, "m", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_MHZ: | |||
| case LV2_PORT_UNIT_MHZ: | |||
| strncpy(strBuf, "MHz", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_MIDINOTE: | |||
| case LV2_PORT_UNIT_MIDINOTE: | |||
| strncpy(strBuf, "note", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_MILE: | |||
| case LV2_PORT_UNIT_MILE: | |||
| strncpy(strBuf, "mi", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_MIN: | |||
| case LV2_PORT_UNIT_MIN: | |||
| strncpy(strBuf, "min", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_MM: | |||
| case LV2_PORT_UNIT_MM: | |||
| strncpy(strBuf, "mm", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_MS: | |||
| case LV2_PORT_UNIT_MS: | |||
| strncpy(strBuf, "ms", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_OCT: | |||
| case LV2_PORT_UNIT_OCT: | |||
| strncpy(strBuf, "oct", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_PC: | |||
| case LV2_PORT_UNIT_PC: | |||
| strncpy(strBuf, "%", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_S: | |||
| case LV2_PORT_UNIT_S: | |||
| strncpy(strBuf, "s", STR_MAX); | |||
| return; | |||
| case LV2_UNIT_SEMITONE: | |||
| case LV2_PORT_UNIT_SEMITONE: | |||
| strncpy(strBuf, "semi", STR_MAX); | |||
| return; | |||
| } | |||
| @@ -1111,9 +1104,7 @@ public: | |||
| qDebug("Lv2Plugin::reload() - start"); | |||
| CARLA_ASSERT(descriptor && rdf_descriptor); | |||
| #ifndef BUILD_BRIDGE | |||
| const ProcessMode processMode(x_engine->getOptions().processMode); | |||
| #endif | |||
| // Safely disable plugin for reload | |||
| const ScopedDisabler m(this); | |||
| @@ -1139,7 +1130,7 @@ public: | |||
| for (uint32_t i=0; i < portCount; i++) | |||
| { | |||
| const LV2_Property portType = rdf_descriptor->Ports[i].Type; | |||
| const LV2_Property portType = rdf_descriptor->Ports[i].Type.Value; | |||
| if (LV2_IS_PORT_AUDIO(portType)) | |||
| { | |||
| @@ -1197,7 +1188,6 @@ public: | |||
| ext.worker = (const LV2_Worker_Interface*)descriptor->extension_data(LV2_WORKER__interface); | |||
| } | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().forceStereo && (aIns == 1 || aOuts == 1) && ! (h2 || ext.state || ext.worker)) | |||
| { | |||
| h2 = descriptor->instantiate(descriptor, sampleRate, rdf_descriptor->Bundle, features); | |||
| @@ -1214,7 +1204,6 @@ public: | |||
| forcedStereoOut = true; | |||
| } | |||
| } | |||
| #endif | |||
| if (aIns > 0) | |||
| { | |||
| @@ -1311,19 +1300,18 @@ public: | |||
| for (uint32_t i=0; i < portCount; i++) | |||
| { | |||
| const LV2_Property portType = rdf_descriptor->Ports[i].Type; | |||
| const LV2_Property portType = rdf_descriptor->Ports[i].Type.Value; | |||
| if (LV2_IS_PORT_AUDIO(portType) || LV2_IS_PORT_ATOM_SEQUENCE(portType) || LV2_IS_PORT_CV(portType) || LV2_IS_PORT_EVENT(portType) || LV2_IS_PORT_MIDI_LL(portType)) | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += rdf_descriptor->Ports[i].Name; | |||
| portName.truncate(portNameSize); | |||
| } | |||
| @@ -1386,12 +1374,12 @@ public: | |||
| evIn.data[j].rindex = i; | |||
| if (portType & LV2_PORT_SUPPORTS_MIDI_EVENT) | |||
| if (portType & LV2_PORT_DATA_MIDI_EVENT) | |||
| { | |||
| evIn.data[j].type |= CARLA_EVENT_TYPE_MIDI; | |||
| evIn.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, true); | |||
| } | |||
| if (portType & LV2_PORT_SUPPORTS_PATCH_MESSAGE) | |||
| if (portType & LV2_PORT_DATA_PATCH_MESSAGE) | |||
| { | |||
| evIn.data[j].type |= CARLA_EVENT_TYPE_MESSAGE; | |||
| } | |||
| @@ -1404,12 +1392,12 @@ public: | |||
| evOut.data[j].rindex = i; | |||
| if (portType & LV2_PORT_SUPPORTS_MIDI_EVENT) | |||
| if (portType & LV2_PORT_DATA_MIDI_EVENT) | |||
| { | |||
| evOut.data[j].type |= CARLA_EVENT_TYPE_MIDI; | |||
| evOut.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, false); | |||
| } | |||
| if (portType & LV2_PORT_SUPPORTS_PATCH_MESSAGE) | |||
| if (portType & LV2_PORT_DATA_PATCH_MESSAGE) | |||
| { | |||
| evOut.data[j].type |= CARLA_EVENT_TYPE_MESSAGE; | |||
| } | |||
| @@ -1427,7 +1415,7 @@ public: | |||
| evIn.data[j].rindex = i; | |||
| if (portType & LV2_PORT_SUPPORTS_MIDI_EVENT) | |||
| if (portType & LV2_PORT_DATA_MIDI_EVENT) | |||
| { | |||
| evIn.data[j].type |= CARLA_EVENT_TYPE_MIDI; | |||
| evIn.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, true); | |||
| @@ -1441,7 +1429,7 @@ public: | |||
| evOut.data[j].rindex = i; | |||
| if (portType & LV2_PORT_SUPPORTS_MIDI_EVENT) | |||
| if (portType & LV2_PORT_DATA_MIDI_EVENT) | |||
| { | |||
| evOut.data[j].type |= CARLA_EVENT_TYPE_MIDI; | |||
| evOut.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, false); | |||
| @@ -1700,13 +1688,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "control-in"; | |||
| portName.truncate(portNameSize); | |||
| @@ -1717,13 +1704,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "control-out"; | |||
| portName.truncate(portNameSize); | |||
| @@ -1864,7 +1850,6 @@ public: | |||
| midiprog.data[i].name = strdup(pdesc->name ? pdesc->name : ""); | |||
| } | |||
| #ifndef BUILD_BRIDGE | |||
| // Update OSC Names | |||
| if (x_engine->isOscControlRegistered()) | |||
| { | |||
| @@ -1873,7 +1858,6 @@ public: | |||
| for (i=0; i < midiprog.count; i++) | |||
| x_engine->osc_send_control_set_midi_program_data(m_id, i, midiprog.data[i].bank, midiprog.data[i].program, midiprog.data[i].name); | |||
| } | |||
| #endif | |||
| if (init) | |||
| { | |||
| @@ -1991,11 +1975,7 @@ public: | |||
| // -------------------------------------------------------------------------------------------------------- | |||
| // Input VU | |||
| #ifndef BUILD_BRIDGE | |||
| if (aIn.count > 0 && x_engine->getOptions().processMode != PROCESS_MODE_CONTINUOUS_RACK) | |||
| #else | |||
| if (aIn.count > 0) | |||
| #endif | |||
| { | |||
| if (aIn.count == 1) | |||
| { | |||
| @@ -2669,9 +2649,7 @@ public: | |||
| } | |||
| // Output VU | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().processMode != PROCESS_MODE_CONTINUOUS_RACK) | |||
| #endif | |||
| { | |||
| for (k=0; i < 2 && k < frames; k++) | |||
| { | |||
| @@ -3376,7 +3354,6 @@ public: | |||
| const char* getUiBridgePath(const LV2_Property type) | |||
| { | |||
| #ifndef BUILD_BRIDGE | |||
| const CarlaEngineOptions options(x_engine->getOptions()); | |||
| switch (type) | |||
| @@ -3396,10 +3373,6 @@ public: | |||
| default: | |||
| return nullptr; | |||
| } | |||
| #else | |||
| return nullptr; | |||
| Q_UNUSED(type); | |||
| #endif | |||
| } | |||
| bool isUiBridgeable(const uint32_t uiId) | |||
| @@ -3988,7 +3961,6 @@ public: | |||
| features[lv2_feature_id_bufsize_bounded]->URI = LV2_BUF_SIZE__boundedBlockLength; | |||
| features[lv2_feature_id_bufsize_bounded]->data = nullptr; | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().processHighPrecision) | |||
| { | |||
| features[lv2_feature_id_bufsize_fixed] = new LV2_Feature; | |||
| @@ -4000,7 +3972,6 @@ public: | |||
| features[lv2_feature_id_bufsize_powerof2]->data = nullptr; | |||
| } | |||
| else | |||
| #endif | |||
| { | |||
| // fake, used only to keep a valid features-array | |||
| features[lv2_feature_id_bufsize_fixed] = features[lv2_feature_id_bufsize_bounded]; | |||
| @@ -4129,7 +4100,7 @@ public: | |||
| // Check supported ports | |||
| for (uint32_t i=0; i < rdf_descriptor->PortCount; i++) | |||
| { | |||
| LV2_Property PortType = rdf_descriptor->Ports[i].Type; | |||
| LV2_Property PortType = rdf_descriptor->Ports[i].Type.Value; | |||
| if (! bool(LV2_IS_PORT_AUDIO(PortType) || LV2_IS_PORT_CONTROL(PortType) || LV2_IS_PORT_ATOM_SEQUENCE(PortType) || LV2_IS_PORT_EVENT(PortType) || LV2_IS_PORT_MIDI_LL(PortType))) | |||
| { | |||
| if (! LV2_IS_PORT_OPTIONAL(rdf_descriptor->Ports[i].Properties)) | |||
| @@ -4216,11 +4187,7 @@ public: | |||
| int eQt4, eCocoa, eHWND, eX11, eGtk2, eGtk3, iCocoa, iHWND, iX11, iQt4, iExt, iSuil, iFinal; | |||
| eQt4 = eCocoa = eHWND = eX11 = eGtk2 = eGtk3 = iQt4 = iCocoa = iHWND = iX11 = iExt = iSuil = iFinal = -1; | |||
| #ifdef BUILD_BRIDGE | |||
| const bool preferUiBridges = false; | |||
| #else | |||
| const bool preferUiBridges = x_engine->getOptions().preferUiBridges; | |||
| #endif | |||
| const bool preferUiBridges = (x_engine->getOptions().preferUiBridges && (m_hints & PLUGIN_IS_BRIDGE) == 0); | |||
| for (uint32_t i=0; i < rdf_descriptor->UICount; i++) | |||
| { | |||
| @@ -4232,7 +4199,7 @@ public: | |||
| continue; | |||
| } | |||
| switch (rdf_descriptor->UIs[i].Type) | |||
| switch (rdf_descriptor->UIs[i].Type.Value) | |||
| { | |||
| case LV2_UI_QT4: | |||
| if (isUiBridgeable(i) && preferUiBridges) | |||
| @@ -4259,7 +4226,7 @@ public: | |||
| break; | |||
| case LV2_UI_GTK2: | |||
| #if defined(WANT_SUIL) || defined(BUILD_BRIDGE) | |||
| #ifdef WANT_SUIL // FIXME | |||
| if (isUiBridgeable(i) && preferUiBridges) | |||
| eGtk2 = i; | |||
| #else | |||
| @@ -4407,7 +4374,7 @@ public: | |||
| // ----------------------------------------------------------- | |||
| // initialize ui according to type | |||
| const LV2_Property uiType = ui.rdf_descriptor->Type; | |||
| const LV2_Property uiType = ui.rdf_descriptor->Type.Value; | |||
| if (isBridged) | |||
| { | |||
| @@ -4507,7 +4474,7 @@ public: | |||
| qDebug("Will use LV2 Gtk2 UI (suil)"); | |||
| gui.type = GUI_EXTERNAL_SUIL; | |||
| gui.resizable = isUiResizable(); | |||
| suil.handle = suil_instance_new(suil.host, this, LV2_UI__Qt4UI, rdf_descriptor->URI, ui.rdf_descriptor->URI, get_lv2_ui_uri(ui.rdf_descriptor->Type), ui.rdf_descriptor->Bundle, ui.rdf_descriptor->Binary, features); | |||
| suil.handle = suil_instance_new(suil.host, this, LV2_UI__Qt4UI, rdf_descriptor->URI, ui.rdf_descriptor->URI, ui.rdf_descriptor->Type.URI, ui.rdf_descriptor->Bundle, ui.rdf_descriptor->Binary, features); | |||
| m_hints |= PLUGIN_USES_SINGLE_THREAD; | |||
| if (suil.handle) | |||
| @@ -4689,7 +4656,6 @@ CarlaPlugin* CarlaPlugin::newLV2(const initializer& init) | |||
| plugin->reload(); | |||
| # ifndef BUILD_BRIDGE | |||
| if (init.engine->getOptions().processMode == PROCESS_MODE_CONTINUOUS_RACK) | |||
| { | |||
| if (! (plugin->hints() & PLUGIN_CAN_FORCE_STEREO)) | |||
| @@ -4699,7 +4665,6 @@ CarlaPlugin* CarlaPlugin::newLV2(const initializer& init) | |||
| return nullptr; | |||
| } | |||
| } | |||
| # endif | |||
| plugin->registerToOscClient(); | |||
| plugin->updateUi(); | |||
| @@ -96,13 +96,8 @@ public: | |||
| { | |||
| if (osc.thread) | |||
| { | |||
| #ifndef BUILD_BRIDGE | |||
| const uint oscUiTimeout = x_engine->getOptions().oscUiTimeout; | |||
| #else | |||
| const uint oscUiTimeout = 40; | |||
| #endif | |||
| // Wait a bit first, try safe quit, then force kill | |||
| if (osc.thread->isRunning() && ! osc.thread->wait(oscUiTimeout)) | |||
| if (osc.thread->isRunning() && ! osc.thread->wait(x_engine->getOptions().oscUiTimeout)) | |||
| { | |||
| qWarning("Failed to properly stop VST OSC GUI thread"); | |||
| osc.thread->terminate(); | |||
| @@ -477,9 +472,7 @@ public: | |||
| qDebug("VstPlugin::reload() - start"); | |||
| CARLA_ASSERT(effect); | |||
| #ifndef BUILD_BRIDGE | |||
| const ProcessMode processMode(x_engine->getOptions().processMode); | |||
| #endif | |||
| // Safely disable plugin for reload | |||
| const ScopedDisabler m(this); | |||
| @@ -537,13 +530,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| char tmp[12] = { 0 }; | |||
| sprintf(tmp, "input_%02i", j+1); | |||
| portName += tmp; | |||
| @@ -557,13 +549,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| char tmp[12] = { 0 }; | |||
| sprintf(tmp, "output_%02i", j+1); | |||
| portName += tmp; | |||
| @@ -691,13 +682,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "control-in"; | |||
| portName.truncate(portNameSize); | |||
| @@ -708,13 +698,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "midi-in"; | |||
| portName.truncate(portNameSize); | |||
| @@ -725,13 +714,12 @@ public: | |||
| { | |||
| portName.clear(); | |||
| #ifndef BUILD_BRIDGE | |||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||
| { | |||
| portName = m_name; | |||
| portName += ":"; | |||
| } | |||
| #endif | |||
| portName += "midi-out"; | |||
| portName.truncate(portNameSize); | |||
| @@ -924,11 +912,7 @@ public: | |||
| // -------------------------------------------------------------------------------------------------------- | |||
| // Input VU | |||
| #ifndef BUILD_BRIDGE | |||
| if (aIn.count > 0 && x_engine->getOptions().processMode != PROCESS_MODE_CONTINUOUS_RACK) | |||
| #else | |||
| if (aIn.count > 0) | |||
| #endif | |||
| { | |||
| if (aIn.count == 1) | |||
| { | |||
| @@ -1378,9 +1362,7 @@ public: | |||
| } | |||
| // Output VU | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().processMode != PROCESS_MODE_CONTINUOUS_RACK) | |||
| #endif | |||
| { | |||
| for (k=0; i < 2 && k < frames; k++) | |||
| { | |||
| @@ -1636,13 +1618,11 @@ public: | |||
| if (! m_enabled) | |||
| return 1; | |||
| #ifndef BUILD_BRIDGE | |||
| if (x_engine->getOptions().processMode == PROCESS_MODE_CONTINUOUS_RACK) | |||
| { | |||
| qCritical("VstPlugin::handleAudioMasterIOChanged() - plugin asked IO change, but it's not supported in rack mode"); | |||
| return 0; | |||
| } | |||
| #endif | |||
| engineProcessLock(); | |||
| m_enabled = false; | |||
| @@ -1777,10 +1757,8 @@ public: | |||
| return -1; | |||
| if (strcmp(feature, "acceptIOChanges") == 0) | |||
| { | |||
| #ifndef BUILD_BRIDGE | |||
| //if (CarlaEngine::processMode == PROCESS_MODE_CONTINUOUS_RACK) | |||
| // return -1; | |||
| #endif | |||
| return 1; | |||
| } | |||
| if (strcmp(feature, "sizeWindow") == 0) | |||
| @@ -1986,11 +1964,8 @@ public: | |||
| case audioMasterGetNumAutomatableParameters: | |||
| // Deprecated in VST SDK 2.4 | |||
| #ifdef BUILD_BRIDGE | |||
| ret = MAX_PARAMETERS; | |||
| #else | |||
| ret = 0; //x_engine->options.maxParameters; | |||
| #endif | |||
| if (effect && ret > effect->numParams) | |||
| ret = effect->numParams; | |||
| // FIXME | |||
| @@ -2050,11 +2025,8 @@ public: | |||
| else | |||
| qWarning("VstPlugin::hostCallback::audioMasterGetBlockSize called without valid object"); | |||
| if (ret == 0) | |||
| //#ifndef BUILD_BRIDGE | |||
| // ret = CarlaEngine::processHighPrecision ? 8 : 512; | |||
| //#else | |||
| ret = 512; | |||
| //#endif | |||
| break; | |||
| case audioMasterGetInputLatency: | |||
| @@ -2347,7 +2319,7 @@ public: | |||
| { | |||
| m_hints |= PLUGIN_HAS_GUI; | |||
| #if defined(Q_OS_LINUX) && ! defined(BUILD_BRIDGE) && 0 // FIXME | |||
| #if defined(Q_OS_LINUX) && 0 // FIXME | |||
| if (x_engine->options.bridge_vstx11 && x_engine->preferUiBridges() && ! (effect->flags & effFlagsProgramChunks)) | |||
| { | |||
| osc.thread = new CarlaPluginThread(x_engine, this, CarlaPluginThread::PLUGIN_THREAD_VST_GUI); | |||
| @@ -2437,7 +2409,6 @@ CarlaPlugin* CarlaPlugin::newVST(const initializer& init) | |||
| plugin->reload(); | |||
| # ifndef BUILD_BRIDGE | |||
| if (init.engine->getOptions().processMode == PROCESS_MODE_CONTINUOUS_RACK) | |||
| { | |||
| if (! (plugin->hints() & PLUGIN_CAN_FORCE_STEREO)) | |||
| @@ -2447,7 +2418,6 @@ CarlaPlugin* CarlaPlugin::newVST(const initializer& init) | |||
| return nullptr; | |||
| } | |||
| } | |||
| # endif | |||
| plugin->registerToOscClient(); | |||
| @@ -369,77 +369,77 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) | |||
| if (typeNodes.size() > 0) | |||
| { | |||
| if (typeNodes.contains(lv2World.class_allpass)) | |||
| rdfDescriptor->Type |= LV2_CLASS_ALLPASS; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_ALLPASS; | |||
| if (typeNodes.contains(lv2World.class_amplifier)) | |||
| rdfDescriptor->Type |= LV2_CLASS_AMPLIFIER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_AMPLIFIER; | |||
| if (typeNodes.contains(lv2World.class_analyzer)) | |||
| rdfDescriptor->Type |= LV2_CLASS_ANALYSER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_ANALYSER; | |||
| if (typeNodes.contains(lv2World.class_bandpass)) | |||
| rdfDescriptor->Type |= LV2_CLASS_BANDPASS; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_BANDPASS; | |||
| if (typeNodes.contains(lv2World.class_chorus)) | |||
| rdfDescriptor->Type |= LV2_CLASS_CHORUS; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_CHORUS; | |||
| if (typeNodes.contains(lv2World.class_comb)) | |||
| rdfDescriptor->Type |= LV2_CLASS_COMB; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_COMB; | |||
| if (typeNodes.contains(lv2World.class_compressor)) | |||
| rdfDescriptor->Type |= LV2_CLASS_COMPRESSOR; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_COMPRESSOR; | |||
| if (typeNodes.contains(lv2World.class_constant)) | |||
| rdfDescriptor->Type |= LV2_CLASS_CONSTANT; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_CONSTANT; | |||
| if (typeNodes.contains(lv2World.class_converter)) | |||
| rdfDescriptor->Type |= LV2_CLASS_CONVERTER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_CONVERTER; | |||
| if (typeNodes.contains(lv2World.class_delay)) | |||
| rdfDescriptor->Type |= LV2_CLASS_DELAY; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_DELAY; | |||
| if (typeNodes.contains(lv2World.class_distortion)) | |||
| rdfDescriptor->Type |= LV2_CLASS_DISTORTION; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_DISTORTION; | |||
| if (typeNodes.contains(lv2World.class_dynamics)) | |||
| rdfDescriptor->Type |= LV2_CLASS_DYNAMICS; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_DYNAMICS; | |||
| if (typeNodes.contains(lv2World.class_eq)) | |||
| rdfDescriptor->Type |= LV2_CLASS_EQ; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_EQ; | |||
| if (typeNodes.contains(lv2World.class_expander)) | |||
| rdfDescriptor->Type |= LV2_CLASS_EXPANDER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_EXPANDER; | |||
| if (typeNodes.contains(lv2World.class_filter)) | |||
| rdfDescriptor->Type |= LV2_CLASS_FILTER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_FILTER; | |||
| if (typeNodes.contains(lv2World.class_flanger)) | |||
| rdfDescriptor->Type |= LV2_CLASS_FLANGER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_FLANGER; | |||
| if (typeNodes.contains(lv2World.class_function)) | |||
| rdfDescriptor->Type |= LV2_CLASS_FUNCTION; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_FUNCTION; | |||
| if (typeNodes.contains(lv2World.class_gate)) | |||
| rdfDescriptor->Type |= LV2_CLASS_GATE; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_GATE; | |||
| if (typeNodes.contains(lv2World.class_generator)) | |||
| rdfDescriptor->Type |= LV2_CLASS_GENERATOR; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_GENERATOR; | |||
| if (typeNodes.contains(lv2World.class_highpass)) | |||
| rdfDescriptor->Type |= LV2_CLASS_HIGHPASS; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_HIGHPASS; | |||
| if (typeNodes.contains(lv2World.class_instrument)) | |||
| rdfDescriptor->Type |= LV2_CLASS_INSTRUMENT; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_INSTRUMENT; | |||
| if (typeNodes.contains(lv2World.class_limiter)) | |||
| rdfDescriptor->Type |= LV2_CLASS_LIMITER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_LIMITER; | |||
| if (typeNodes.contains(lv2World.class_lowpass)) | |||
| rdfDescriptor->Type |= LV2_CLASS_LOWPASS; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_LOWPASS; | |||
| if (typeNodes.contains(lv2World.class_mixer)) | |||
| rdfDescriptor->Type |= LV2_CLASS_MIXER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_MIXER; | |||
| if (typeNodes.contains(lv2World.class_modulator)) | |||
| rdfDescriptor->Type |= LV2_CLASS_MODULATOR; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_MODULATOR; | |||
| if (typeNodes.contains(lv2World.class_multiEQ)) | |||
| rdfDescriptor->Type |= LV2_CLASS_MULTI_EQ; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_MULTI_EQ; | |||
| if (typeNodes.contains(lv2World.class_oscillator)) | |||
| rdfDescriptor->Type |= LV2_CLASS_OSCILLATOR; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_OSCILLATOR; | |||
| if (typeNodes.contains(lv2World.class_paraEQ)) | |||
| rdfDescriptor->Type |= LV2_CLASS_PARA_EQ; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_PARA_EQ; | |||
| if (typeNodes.contains(lv2World.class_phaser)) | |||
| rdfDescriptor->Type |= LV2_CLASS_PHASER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_PHASER; | |||
| if (typeNodes.contains(lv2World.class_pitch)) | |||
| rdfDescriptor->Type |= LV2_CLASS_PITCH; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_PITCH; | |||
| if (typeNodes.contains(lv2World.class_reverb)) | |||
| rdfDescriptor->Type |= LV2_CLASS_REVERB; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_REVERB; | |||
| if (typeNodes.contains(lv2World.class_simulator)) | |||
| rdfDescriptor->Type |= LV2_CLASS_SIMULATOR; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_SIMULATOR; | |||
| if (typeNodes.contains(lv2World.class_spatial)) | |||
| rdfDescriptor->Type |= LV2_CLASS_SPATIAL; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_SPATIAL; | |||
| if (typeNodes.contains(lv2World.class_spectral)) | |||
| rdfDescriptor->Type |= LV2_CLASS_SPECTRAL; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_SPECTRAL; | |||
| if (typeNodes.contains(lv2World.class_utility)) | |||
| rdfDescriptor->Type |= LV2_CLASS_UTILITY; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_UTILITY; | |||
| if (typeNodes.contains(lv2World.class_waveshaper)) | |||
| rdfDescriptor->Type |= LV2_CLASS_WAVESHAPER; | |||
| rdfDescriptor->Type |= LV2_PLUGIN_WAVESHAPER; | |||
| } | |||
| } | |||
| @@ -512,6 +512,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) | |||
| // -------------------------------------- | |||
| // Set Port Mode and Type | |||
| { | |||
| #if 0 | |||
| // Mode | |||
| if (lilvPort.is_a(lv2World.port_input)) | |||
| rdf_port->Type |= LV2_PORT_INPUT; | |||
| @@ -544,9 +545,9 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) | |||
| Lilv::Nodes supportNodes(lilvPort.get_value(lv2World.atom_supports)); | |||
| if (supportNodes.contains(lv2World.midi_event)) | |||
| rdf_port->Type |= LV2_PORT_SUPPORTS_MIDI_EVENT; | |||
| rdf_port->Type |= LV2_PORT_DATA_MIDI_EVENT; | |||
| if (supportNodes.contains(lv2World.patch_message)) | |||
| rdf_port->Type |= LV2_PORT_SUPPORTS_PATCH_MESSAGE; | |||
| rdf_port->Type |= LV2_PORT_DATA_PATCH_MESSAGE; | |||
| } | |||
| else if (lilvPort.is_a(lv2World.port_event)) | |||
| @@ -564,6 +565,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) | |||
| } | |||
| else | |||
| #endif | |||
| qWarning("lv2_rdf_new(\"%s\") - port '%s' is of unkown type", uri, rdf_port->Name); | |||
| } | |||
| @@ -714,58 +716,58 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) | |||
| if (unitTypeNodes.size() > 0) | |||
| { | |||
| rdf_port->Unit.Hints |= LV2_PORT_UNIT; | |||
| rdf_port->Unit.Hints |= LV2_PORT_UNIT_UNIT; | |||
| const char* const unitType = unitTypeNodes.get_first().as_uri(); | |||
| if (strcmp(unitType, LV2_UNITS__bar) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_BAR; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_BAR; | |||
| else if (strcmp(unitType, LV2_UNITS__beat) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_BEAT; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_BEAT; | |||
| else if (strcmp(unitType, LV2_UNITS__bpm) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_BPM; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_BPM; | |||
| else if (strcmp(unitType, LV2_UNITS__cent) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_CENT; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_CENT; | |||
| else if (strcmp(unitType, LV2_UNITS__cm) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_CM; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_CM; | |||
| else if (strcmp(unitType, LV2_UNITS__coef) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_COEF; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_COEF; | |||
| else if (strcmp(unitType, LV2_UNITS__db) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_DB; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_DB; | |||
| else if (strcmp(unitType, LV2_UNITS__degree) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_DEGREE; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_DEGREE; | |||
| else if (strcmp(unitType, LV2_UNITS__frame) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_FRAME; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_FRAME; | |||
| else if (strcmp(unitType, LV2_UNITS__hz) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_HZ; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_HZ; | |||
| else if (strcmp(unitType, LV2_UNITS__inch) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_INCH; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_INCH; | |||
| else if (strcmp(unitType, LV2_UNITS__khz) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_KHZ; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_KHZ; | |||
| else if (strcmp(unitType, LV2_UNITS__km) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_KM; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_KM; | |||
| else if (strcmp(unitType, LV2_UNITS__m) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_M; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_M; | |||
| else if (strcmp(unitType, LV2_UNITS__mhz) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_MHZ; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_MHZ; | |||
| else if (strcmp(unitType, LV2_UNITS__midiNote) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_MIDINOTE; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_MIDINOTE; | |||
| else if (strcmp(unitType, LV2_UNITS__mile) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_MILE; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_MILE; | |||
| else if (strcmp(unitType, LV2_UNITS__min) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_MIN; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_MIN; | |||
| else if (strcmp(unitType, LV2_UNITS__mm) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_MM; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_MM; | |||
| else if (strcmp(unitType, LV2_UNITS__ms) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_MS; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_MS; | |||
| else if (strcmp(unitType, LV2_UNITS__oct) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_OCT; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_OCT; | |||
| else if (strcmp(unitType, LV2_UNITS__pc) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_PC; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_PC; | |||
| else if (strcmp(unitType, LV2_UNITS__s) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_S; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_S; | |||
| else if (strcmp(unitType, LV2_UNITS__semitone12TET) == 0) | |||
| rdf_port->Unit.Type = LV2_UNIT_SEMITONE; | |||
| rdf_port->Unit.Unit = LV2_PORT_UNIT_SEMITONE; | |||
| else | |||
| qWarning("lv2_rdf_new(\"%s\") - got unknown Unit type '%s'", uri, unitType); | |||
| } | |||
| @@ -993,6 +995,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) | |||
| // -------------------------------------- | |||
| // Set UI Type | |||
| { | |||
| #if 0 | |||
| if (lilvUI.is_a(lv2World.ui_gtk2)) | |||
| rdf_ui->Type = LV2_UI_GTK2; | |||
| else if (lilvUI.is_a(lv2World.ui_gtk3)) | |||
| @@ -1010,6 +1013,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) | |||
| else if (lilvUI.is_a(lv2World.ui_externalOld)) | |||
| rdf_ui->Type = LV2_UI_OLD_EXTERNAL; | |||
| else | |||
| #endif | |||
| qWarning("lv2_rdf_new(\"%s\") - got unknown UI type for '%s'", uri, lilvUI.get_uri().as_uri()); | |||
| } | |||