| @@ -29,7 +29,7 @@ STRIP ?= strip | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| BASE_FLAGS = -Wall -Wextra -fPIC -pipe | |||||
| BASE_FLAGS = -Wall -Wextra -fPIC -DPIC -pipe | |||||
| BASE_OPTS = -O2 -ffast-math -mtune=generic -msse -mfpmath=sse | BASE_OPTS = -O2 -ffast-math -mtune=generic -msse -mfpmath=sse | ||||
| ifeq ($(RASPPI),true) | ifeq ($(RASPPI),true) | ||||
| @@ -260,31 +260,32 @@ enum OptionsType { | |||||
| */ | */ | ||||
| OPTION_PREFER_UI_BRIDGES = 5, | OPTION_PREFER_UI_BRIDGES = 5, | ||||
| /*! | |||||
| * Make plugin UIs always-on-top.\n | |||||
| * Default is yes. | |||||
| */ | |||||
| OPTION_UIS_ALWAYS_ON_TOP = 6, | |||||
| #ifdef WANT_DSSI | #ifdef WANT_DSSI | ||||
| /*! | /*! | ||||
| * Use (unofficial) dssi-vst chunks feature.\n | * Use (unofficial) dssi-vst chunks feature.\n | ||||
| * Default is no. | * Default is no. | ||||
| * \see PLUGIN_OPTION_USE_CHUNKS | * \see PLUGIN_OPTION_USE_CHUNKS | ||||
| */ | */ | ||||
| OPTION_USE_DSSI_VST_CHUNKS = 6, | |||||
| OPTION_USE_DSSI_VST_CHUNKS = 7, | |||||
| #endif | #endif | ||||
| /*! | /*! | ||||
| * Maximum number of parameters allowed.\n | * Maximum number of parameters allowed.\n | ||||
| * Default is MAX_DEFAULT_PARAMETERS. | * Default is MAX_DEFAULT_PARAMETERS. | ||||
| */ | */ | ||||
| OPTION_MAX_PARAMETERS = 7, | |||||
| OPTION_MAX_PARAMETERS = 8, | |||||
| /*! | /*! | ||||
| * Timeout value in ms for how much to wait for UI-Bridges to respond.\n | * Timeout value in ms for how much to wait for UI-Bridges to respond.\n | ||||
| * Default is 4000 (4 secs). | * Default is 4000 (4 secs). | ||||
| */ | */ | ||||
| OPTION_UI_BRIDGES_TIMEOUT = 8, | |||||
| /*! | |||||
| * JACK auto-connect to hardware ports. | |||||
| */ | |||||
| OPTION_JACK_AUTOCONNECT = 9, | |||||
| OPTION_UI_BRIDGES_TIMEOUT = 9, | |||||
| #ifdef WANT_RTAUDIO | #ifdef WANT_RTAUDIO | ||||
| /*! | /*! | ||||
| @@ -734,23 +735,22 @@ struct ParameterRanges { | |||||
| float getFixedValue(const float& value) const noexcept | float getFixedValue(const float& value) const noexcept | ||||
| { | { | ||||
| if (value < min) | |||||
| if (value <= min) | |||||
| return min; | return min; | ||||
| else if (value > max) | |||||
| if (value >= max) | |||||
| return max; | return max; | ||||
| return value; | return value; | ||||
| } | } | ||||
| float getNormalizedValue(const float& value) const noexcept | float getNormalizedValue(const float& value) const noexcept | ||||
| { | { | ||||
| float newValue = (value - min) / (max - min); | |||||
| if (newValue < 0.0f) | |||||
| newValue = 0.0f; | |||||
| else if (newValue > 1.0f) | |||||
| newValue = 1.0f; | |||||
| const float normValue((value - min) / (max - min)); | |||||
| return newValue; | |||||
| if (normValue <= 0.0f) | |||||
| return 0.0f; | |||||
| if (normValue >= 1.0f) | |||||
| return 1.0f; | |||||
| return normValue; | |||||
| } | } | ||||
| float getUnnormalizedValue(const float& value) const noexcept | float getUnnormalizedValue(const float& value) const noexcept | ||||
| @@ -200,12 +200,10 @@ struct EngineEvent { | |||||
| EngineMidiEvent midi; | EngineMidiEvent midi; | ||||
| }; | }; | ||||
| #ifndef DOXYGEN | |||||
| EngineEvent() noexcept | EngineEvent() noexcept | ||||
| { | { | ||||
| clear(); | clear(); | ||||
| } | } | ||||
| #endif | |||||
| void clear() noexcept | void clear() noexcept | ||||
| { | { | ||||
| @@ -231,12 +229,10 @@ struct EngineOptions { | |||||
| #endif | #endif | ||||
| unsigned int maxParameters; | unsigned int maxParameters; | ||||
| unsigned int oscUiTimeout; | |||||
| bool jackAutoConnect; | |||||
| unsigned int uiBridgesTimeout; | |||||
| #ifdef WANT_RTAUDIO | #ifdef WANT_RTAUDIO | ||||
| unsigned int rtaudioNumberPeriods; | |||||
| unsigned int rtaudioNumPeriods; | |||||
| unsigned int rtaudioBufferSize; | unsigned int rtaudioBufferSize; | ||||
| unsigned int rtaudioSampleRate; | unsigned int rtaudioSampleRate; | ||||
| CarlaString rtaudioDevice; | CarlaString rtaudioDevice; | ||||
| @@ -266,32 +262,29 @@ struct EngineOptions { | |||||
| CarlaString bridge_vstX11; | CarlaString bridge_vstX11; | ||||
| #endif | #endif | ||||
| #ifndef DOXYGEN | |||||
| EngineOptions() noexcept | |||||
| # if defined(CARLA_OS_LINUX) | |||||
| EngineOptions() | |||||
| #if defined(CARLA_OS_LINUX) | |||||
| : processMode(PROCESS_MODE_MULTIPLE_CLIENTS), | : processMode(PROCESS_MODE_MULTIPLE_CLIENTS), | ||||
| transportMode(TRANSPORT_MODE_JACK), | transportMode(TRANSPORT_MODE_JACK), | ||||
| # else | |||||
| #else | |||||
| : processMode(PROCESS_MODE_CONTINUOUS_RACK), | : processMode(PROCESS_MODE_CONTINUOUS_RACK), | ||||
| transportMode(TRANSPORT_MODE_INTERNAL), | transportMode(TRANSPORT_MODE_INTERNAL), | ||||
| # endif | |||||
| #endif | |||||
| forceStereo(false), | forceStereo(false), | ||||
| preferPluginBridges(false), | preferPluginBridges(false), | ||||
| preferUiBridges(true), | preferUiBridges(true), | ||||
| uisAlwaysOnTop(true), | uisAlwaysOnTop(true), | ||||
| # ifdef WANT_DSSI | |||||
| #ifdef WANT_DSSI | |||||
| useDssiVstChunks(false), | useDssiVstChunks(false), | ||||
| # endif | |||||
| #endif | |||||
| maxParameters(MAX_DEFAULT_PARAMETERS), | maxParameters(MAX_DEFAULT_PARAMETERS), | ||||
| oscUiTimeout(4000), | |||||
| jackAutoConnect(false), | |||||
| # ifdef WANT_RTAUDIO | |||||
| rtaudioNumberPeriods(0), | |||||
| uiBridgesTimeout(4000), | |||||
| #ifdef WANT_RTAUDIO | |||||
| rtaudioNumPeriods(2), | |||||
| rtaudioBufferSize(512), | rtaudioBufferSize(512), | ||||
| rtaudioSampleRate(44100), | rtaudioSampleRate(44100), | ||||
| # endif | |||||
| resourceDir() {} | |||||
| #endif | #endif | ||||
| resourceDir() {} | |||||
| }; | }; | ||||
| /*! | /*! | ||||
| @@ -309,7 +302,6 @@ struct EngineTimeInfoBBT { | |||||
| double ticksPerBeat; | double ticksPerBeat; | ||||
| double beatsPerMinute; | double beatsPerMinute; | ||||
| #ifndef DOXYGEN | |||||
| EngineTimeInfoBBT() noexcept | EngineTimeInfoBBT() noexcept | ||||
| : bar(0), | : bar(0), | ||||
| beat(0), | beat(0), | ||||
| @@ -319,7 +311,6 @@ struct EngineTimeInfoBBT { | |||||
| beatType(0.0f), | beatType(0.0f), | ||||
| ticksPerBeat(0.0), | ticksPerBeat(0.0), | ||||
| beatsPerMinute(0.0) {} | beatsPerMinute(0.0) {} | ||||
| #endif | |||||
| }; | }; | ||||
| /*! | /*! | ||||
| @@ -334,12 +325,10 @@ struct EngineTimeInfo { | |||||
| uint32_t valid; | uint32_t valid; | ||||
| EngineTimeInfoBBT bbt; | EngineTimeInfoBBT bbt; | ||||
| #ifndef DOXYGEN | |||||
| EngineTimeInfo() noexcept | EngineTimeInfo() noexcept | ||||
| { | { | ||||
| clear(); | clear(); | ||||
| } | } | ||||
| #endif | |||||
| void clear() noexcept | void clear() noexcept | ||||
| { | { | ||||
| @@ -349,7 +338,6 @@ struct EngineTimeInfo { | |||||
| valid = 0x0; | valid = 0x0; | ||||
| } | } | ||||
| #ifndef DOXYGEN | |||||
| // quick operator, doesn't check all values | // quick operator, doesn't check all values | ||||
| bool operator==(const EngineTimeInfo& timeInfo) const noexcept | bool operator==(const EngineTimeInfo& timeInfo) const noexcept | ||||
| { | { | ||||
| @@ -366,7 +354,6 @@ struct EngineTimeInfo { | |||||
| { | { | ||||
| return !operator==(timeInfo); | return !operator==(timeInfo); | ||||
| } | } | ||||
| #endif | |||||
| }; | }; | ||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| @@ -1192,6 +1179,7 @@ private: | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Bridge/Controller OSC stuff | // Bridge/Controller OSC stuff | ||||
| public: | |||||
| #ifdef BUILD_BRIDGE | #ifdef BUILD_BRIDGE | ||||
| void oscSend_bridge_audio_count(const int32_t ins, const int32_t outs, const int32_t total); | void oscSend_bridge_audio_count(const int32_t ins, const int32_t outs, const int32_t total); | ||||
| void oscSend_bridge_midi_count(const int32_t ins, const int32_t outs, const int32_t total); | void oscSend_bridge_midi_count(const int32_t ins, const int32_t outs, const int32_t total); | ||||
| @@ -1213,7 +1201,6 @@ private: | |||||
| void oscSend_bridge_set_chunk_data(const char* const chunkFile); | void oscSend_bridge_set_chunk_data(const char* const chunkFile); | ||||
| void oscSend_bridge_set_peaks(); | void oscSend_bridge_set_peaks(); | ||||
| #else | #else | ||||
| public: | |||||
| void oscSend_control_add_plugin_start(const int32_t pluginId, const char* const pluginName); | void oscSend_control_add_plugin_start(const int32_t pluginId, const char* const pluginName); | ||||
| void oscSend_control_add_plugin_end(const int32_t pluginId); | void oscSend_control_add_plugin_end(const int32_t pluginId); | ||||
| void oscSend_control_remove_plugin(const int32_t pluginId); | void oscSend_control_remove_plugin(const int32_t pluginId); | ||||
| @@ -30,7 +30,6 @@ extern "C" { | |||||
| * @defgroup CarlaNativeAPI Carla Native API | * @defgroup CarlaNativeAPI Carla Native API | ||||
| * | * | ||||
| * The Carla Native API | * The Carla Native API | ||||
| * | |||||
| * @{ | * @{ | ||||
| */ | */ | ||||
| @@ -56,11 +55,10 @@ typedef enum { | |||||
| PLUGIN_IS_RTSAFE = 1 << 0, | PLUGIN_IS_RTSAFE = 1 << 0, | ||||
| PLUGIN_IS_SYNTH = 1 << 1, | PLUGIN_IS_SYNTH = 1 << 1, | ||||
| PLUGIN_HAS_GUI = 1 << 2, | PLUGIN_HAS_GUI = 1 << 2, | ||||
| PLUGIN_USES_GUI_AS_FILE = 1 << 3, | |||||
| PLUGIN_USES_PANNING = 1 << 4, // uses stereo balance if unset (default) | |||||
| PLUGIN_USES_SINGLE_THREAD = 1 << 5, | |||||
| PLUGIN_USES_STATE = 1 << 6, | |||||
| PLUGIN_USES_STATIC_BUFFERS = 1 << 7 | |||||
| PLUGIN_USES_PANNING = 1 << 3, // uses stereo balance if unset (default) | |||||
| PLUGIN_USES_SINGLE_THREAD = 1 << 4, | |||||
| PLUGIN_USES_STATE = 1 << 5, | |||||
| PLUGIN_USES_STATIC_BUFFERS = 1 << 6 | |||||
| } PluginHints; | } PluginHints; | ||||
| typedef enum { | typedef enum { | ||||
| @@ -52,134 +52,102 @@ protected: | |||||
| return pHost; | return pHost; | ||||
| } | } | ||||
| const char* getResourceDir() const noexcept | |||||
| const char* getResourceDir() const | |||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, nullptr); | |||||
| if (pHost != nullptr) | |||||
| return pHost->resourceDir; | |||||
| return nullptr; | |||||
| return pHost->resourceDir; | |||||
| } | } | ||||
| const char* getUiName() const noexcept | |||||
| const char* getUiName() const | |||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| if (pHost != nullptr) | |||||
| return pHost->uiName; | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, nullptr); | |||||
| return nullptr; | |||||
| return pHost->uiName; | |||||
| } | } | ||||
| uint32_t getBufferSize() const | uint32_t getBufferSize() const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| if (pHost != nullptr) | |||||
| return pHost->get_buffer_size(pHost->handle); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, 0); | |||||
| return 0; | |||||
| return pHost->get_buffer_size(pHost->handle); | |||||
| } | } | ||||
| double getSampleRate() const | double getSampleRate() const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| if (pHost != nullptr) | |||||
| return pHost->get_sample_rate(pHost->handle); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, 0.0); | |||||
| return 0.0; | |||||
| return pHost->get_sample_rate(pHost->handle); | |||||
| } | } | ||||
| bool isOffline() const | bool isOffline() const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| if (pHost != nullptr) | |||||
| return pHost->is_offline(pHost->handle); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, false); | |||||
| return false; | |||||
| return pHost->is_offline(pHost->handle); | |||||
| } | } | ||||
| const TimeInfo* getTimeInfo() const | const TimeInfo* getTimeInfo() const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, nullptr); | |||||
| if (pHost != nullptr) | |||||
| return pHost->get_time_info(pHost->handle); | |||||
| return nullptr; | |||||
| return pHost->get_time_info(pHost->handle); | |||||
| } | } | ||||
| void writeMidiEvent(const MidiEvent* const event) const | void writeMidiEvent(const MidiEvent* const event) const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr,); | |||||
| if (pHost != nullptr) | |||||
| pHost->write_midi_event(pHost->handle, event); | |||||
| pHost->write_midi_event(pHost->handle, event); | |||||
| } | } | ||||
| void uiParameterChanged(const uint32_t index, const float value) const | void uiParameterChanged(const uint32_t index, const float value) const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr,); | |||||
| if (pHost != nullptr) | |||||
| pHost->ui_parameter_changed(pHost->handle, index, value); | |||||
| pHost->ui_parameter_changed(pHost->handle, index, value); | |||||
| } | } | ||||
| void uiMidiProgramChanged(const uint8_t channel, const uint32_t bank, const uint32_t program) const | void uiMidiProgramChanged(const uint8_t channel, const uint32_t bank, const uint32_t program) const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr,); | |||||
| if (pHost != nullptr) | |||||
| pHost->ui_midi_program_changed(pHost->handle, channel, bank, program); | |||||
| pHost->ui_midi_program_changed(pHost->handle, channel, bank, program); | |||||
| } | } | ||||
| void uiCustomDataChanged(const char* const key, const char* const value) const | void uiCustomDataChanged(const char* const key, const char* const value) const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr,); | |||||
| if (pHost != nullptr) | |||||
| pHost->ui_custom_data_changed(pHost->handle, key, value); | |||||
| pHost->ui_custom_data_changed(pHost->handle, key, value); | |||||
| } | } | ||||
| void uiClosed() const | void uiClosed() const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr,); | |||||
| if (pHost != nullptr) | |||||
| pHost->ui_closed(pHost->handle); | |||||
| pHost->ui_closed(pHost->handle); | |||||
| } | } | ||||
| const char* uiOpenFile(const bool isDir, const char* const title, const char* const filter) const | const char* uiOpenFile(const bool isDir, const char* const title, const char* const filter) const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, nullptr); | |||||
| if (pHost != nullptr) | |||||
| return pHost->ui_open_file(pHost->handle, isDir, title, filter); | |||||
| return nullptr; | |||||
| return pHost->ui_open_file(pHost->handle, isDir, title, filter); | |||||
| } | } | ||||
| const char* uiSaveFile(const bool isDir, const char* const title, const char* const filter) const | const char* uiSaveFile(const bool isDir, const char* const title, const char* const filter) const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| if (pHost != nullptr) | |||||
| return pHost->ui_save_file(pHost->handle, isDir, title, filter); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, nullptr); | |||||
| return nullptr; | |||||
| return pHost->ui_save_file(pHost->handle, isDir, title, filter); | |||||
| } | } | ||||
| intptr_t hostDispatcher(const HostDispatcherOpcode opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt) const | intptr_t hostDispatcher(const HostDispatcherOpcode opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt) const | ||||
| { | { | ||||
| CARLA_ASSERT(pHost != nullptr); | |||||
| if (pHost != nullptr) | |||||
| return pHost->dispatcher(pHost->handle, opcode, index, value, ptr, opt); | |||||
| CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, 0); | |||||
| return 0; | |||||
| return pHost->dispatcher(pHost->handle, opcode, index, value, ptr, opt); | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -192,29 +160,22 @@ protected: | |||||
| virtual const Parameter* getParameterInfo(const uint32_t index) | virtual const Parameter* getParameterInfo(const uint32_t index) | ||||
| { | { | ||||
| CARLA_ASSERT(index < getParameterCount()); | |||||
| CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(), nullptr); | |||||
| return nullptr; | return nullptr; | ||||
| // unused | |||||
| (void)index; | |||||
| } | } | ||||
| virtual float getParameterValue(const uint32_t index) | virtual float getParameterValue(const uint32_t index) | ||||
| { | { | ||||
| CARLA_ASSERT(index < getParameterCount()); | |||||
| CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(), 0.0f); | |||||
| return 0.0f; | return 0.0f; | ||||
| // unused | |||||
| (void)index; | |||||
| } | } | ||||
| virtual const char* getParameterText(const uint32_t index, const float value) | virtual const char* getParameterText(const uint32_t index, const float value) | ||||
| { | { | ||||
| CARLA_ASSERT(index < getParameterCount()); | |||||
| CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(), nullptr); | |||||
| return nullptr; | return nullptr; | ||||
| // unused | // unused | ||||
| (void)index; | |||||
| (void)value; | (void)value; | ||||
| } | } | ||||
| @@ -228,11 +189,8 @@ protected: | |||||
| virtual const MidiProgram* getMidiProgramInfo(const uint32_t index) | virtual const MidiProgram* getMidiProgramInfo(const uint32_t index) | ||||
| { | { | ||||
| CARLA_ASSERT(index < getMidiProgramCount()); | |||||
| CARLA_SAFE_ASSERT_RETURN(index < getMidiProgramCount(), nullptr); | |||||
| return nullptr; | return nullptr; | ||||
| // unused | |||||
| (void)index; | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -240,34 +198,27 @@ protected: | |||||
| virtual void setParameterValue(const uint32_t index, const float value) | virtual void setParameterValue(const uint32_t index, const float value) | ||||
| { | { | ||||
| CARLA_ASSERT(index < getParameterCount()); | |||||
| CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(),); | |||||
| return; | return; | ||||
| // unused | // unused | ||||
| (void)index; | |||||
| (void)value; | (void)value; | ||||
| } | } | ||||
| virtual void setMidiProgram(const uint8_t channel, const uint32_t bank, const uint32_t program) | virtual void setMidiProgram(const uint8_t channel, const uint32_t bank, const uint32_t program) | ||||
| { | { | ||||
| CARLA_ASSERT(channel < MAX_MIDI_CHANNELS); | |||||
| CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); | |||||
| return; | return; | ||||
| // unused | // unused | ||||
| (void)channel; | |||||
| (void)bank; | (void)bank; | ||||
| (void)program; | (void)program; | ||||
| } | } | ||||
| virtual void setCustomData(const char* const key, const char* const value) | virtual void setCustomData(const char* const key, const char* const value) | ||||
| { | { | ||||
| CARLA_ASSERT(key != nullptr); | |||||
| CARLA_ASSERT(value != nullptr); | |||||
| return; | |||||
| // unused | |||||
| (void)key; | |||||
| (void)value; | |||||
| CARLA_SAFE_ASSERT_RETURN(key != nullptr,); | |||||
| CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -300,34 +251,27 @@ protected: | |||||
| virtual void uiSetParameterValue(const uint32_t index, const float value) | virtual void uiSetParameterValue(const uint32_t index, const float value) | ||||
| { | { | ||||
| CARLA_ASSERT(index < getParameterCount()); | |||||
| CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(),); | |||||
| return; | return; | ||||
| // unused | // unused | ||||
| (void)index; | |||||
| (void)value; | (void)value; | ||||
| } | } | ||||
| virtual void uiSetMidiProgram(const uint8_t channel, const uint32_t bank, const uint32_t program) | virtual void uiSetMidiProgram(const uint8_t channel, const uint32_t bank, const uint32_t program) | ||||
| { | { | ||||
| CARLA_ASSERT(channel < MAX_MIDI_CHANNELS); | |||||
| CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); | |||||
| return; | return; | ||||
| // unused | // unused | ||||
| (void)channel; | |||||
| (void)bank; | (void)bank; | ||||
| (void)program; | (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_ASSERT(key != nullptr); | |||||
| CARLA_ASSERT(value != nullptr); | |||||
| return; | |||||
| // unused | |||||
| (void)key; | |||||
| (void)value; | |||||
| CARLA_SAFE_ASSERT_RETURN(key != nullptr,); | |||||
| CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -340,11 +284,7 @@ protected: | |||||
| virtual void setState(const char* const data) | virtual void setState(const char* const data) | ||||
| { | { | ||||
| CARLA_ASSERT(data != nullptr); | |||||
| return; | |||||
| // unused | |||||
| (void)data; | |||||
| CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -405,42 +345,42 @@ public: | |||||
| static void _set_parameter_value(PluginHandle handle, uint32_t index, float value) | static void _set_parameter_value(PluginHandle handle, uint32_t index, float value) | ||||
| { | { | ||||
| return handlePtr->setParameterValue(index, value); | |||||
| handlePtr->setParameterValue(index, value); | |||||
| } | } | ||||
| static void _set_midi_program(PluginHandle handle, uint8_t channel, uint32_t bank, uint32_t program) | static void _set_midi_program(PluginHandle handle, uint8_t channel, uint32_t bank, uint32_t program) | ||||
| { | { | ||||
| return handlePtr->setMidiProgram(channel, bank, program); | |||||
| handlePtr->setMidiProgram(channel, bank, program); | |||||
| } | } | ||||
| static void _set_custom_data(PluginHandle handle, const char* key, const char* value) | static void _set_custom_data(PluginHandle handle, const char* key, const char* value) | ||||
| { | { | ||||
| return handlePtr->setCustomData(key, value); | |||||
| handlePtr->setCustomData(key, value); | |||||
| } | } | ||||
| static void _ui_show(PluginHandle handle, bool show) | static void _ui_show(PluginHandle handle, bool show) | ||||
| { | { | ||||
| return handlePtr->uiShow(show); | |||||
| handlePtr->uiShow(show); | |||||
| } | } | ||||
| static void _ui_idle(PluginHandle handle) | static void _ui_idle(PluginHandle handle) | ||||
| { | { | ||||
| return handlePtr->uiIdle(); | |||||
| handlePtr->uiIdle(); | |||||
| } | } | ||||
| static void _ui_set_parameter_value(PluginHandle handle, uint32_t index, float value) | static void _ui_set_parameter_value(PluginHandle handle, uint32_t index, float value) | ||||
| { | { | ||||
| return handlePtr->uiSetParameterValue(index, value); | |||||
| handlePtr->uiSetParameterValue(index, value); | |||||
| } | } | ||||
| static void _ui_set_midi_program(PluginHandle handle, uint8_t channel, uint32_t bank, uint32_t program) | static void _ui_set_midi_program(PluginHandle handle, uint8_t channel, uint32_t bank, uint32_t program) | ||||
| { | { | ||||
| return handlePtr->uiSetMidiProgram(channel, bank, program); | |||||
| handlePtr->uiSetMidiProgram(channel, bank, program); | |||||
| } | } | ||||
| static void _ui_set_custom_data(PluginHandle handle, const char* key, const char* value) | static void _ui_set_custom_data(PluginHandle handle, const char* key, const char* value) | ||||
| { | { | ||||
| return handlePtr->uiSetCustomData(key, value); | |||||
| handlePtr->uiSetCustomData(key, value); | |||||
| } | } | ||||
| static void _activate(PluginHandle handle) | static void _activate(PluginHandle handle) | ||||
| @@ -455,7 +395,7 @@ public: | |||||
| static void _process(PluginHandle handle, float** inBuffer, float** outBuffer, const uint32_t frames, uint32_t midiEventCount, const MidiEvent* midiEvents) | static void _process(PluginHandle handle, float** inBuffer, float** outBuffer, const uint32_t frames, uint32_t midiEventCount, const MidiEvent* midiEvents) | ||||
| { | { | ||||
| return handlePtr->process(inBuffer, outBuffer, frames, midiEventCount, midiEvents); | |||||
| handlePtr->process(inBuffer, outBuffer, frames, midiEventCount, midiEvents); | |||||
| } | } | ||||
| static char* _get_state(PluginHandle handle) | static char* _get_state(PluginHandle handle) | ||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __CARLA_ENGINE_INTERNAL_HPP__ | |||||
| #define __CARLA_ENGINE_INTERNAL_HPP__ | |||||
| #ifndef CARLA_ENGINE_INTERNAL_HPP_INCLUDED | |||||
| #define CARLA_ENGINE_INTERNAL_HPP_INCLUDED | |||||
| #include "CarlaEngine.hpp" | #include "CarlaEngine.hpp" | ||||
| #include "CarlaEngineOsc.hpp" | #include "CarlaEngineOsc.hpp" | ||||
| @@ -351,4 +351,4 @@ struct CarlaEngineProtectedData { | |||||
| CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE | ||||
| #endif // __CARLA_ENGINE_INTERNAL_HPP__ | |||||
| #endif // CARLA_ENGINE_INTERNAL_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __CARLA_ENGINE_OSC_HPP__ | |||||
| #define __CARLA_ENGINE_OSC_HPP__ | |||||
| #ifndef CARLA_ENGINE_OSC_HPP_INCLUDED | |||||
| #define CARLA_ENGINE_OSC_HPP_INCLUDED | |||||
| #include "CarlaBackend.hpp" | #include "CarlaBackend.hpp" | ||||
| #include "CarlaOscUtils.hpp" | #include "CarlaOscUtils.hpp" | ||||
| @@ -170,4 +170,4 @@ private: | |||||
| CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE | ||||
| #endif // __CARLA_ENGINE_OSC_HPP__ | |||||
| #endif // CARLA_ENGINE_OSC_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __CARLA_ENGINE_THREAD_HPP__ | |||||
| #define __CARLA_ENGINE_THREAD_HPP__ | |||||
| #ifndef CARLA_ENGINE_THREAD_HPP_INCLUDED | |||||
| #define CARLA_ENGINE_THREAD_HPP_INCLUDED | |||||
| #include "CarlaBackend.hpp" | #include "CarlaBackend.hpp" | ||||
| #include "CarlaMutex.hpp" | #include "CarlaMutex.hpp" | ||||
| @@ -56,4 +56,4 @@ private: | |||||
| CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE | ||||
| #endif // __CARLA_ENGINE_THREAD_HPP__ | |||||
| #endif // CARLA_ENGINE_THREAD_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_INFO_H__ | |||||
| #define __DISTRHO_PLUGIN_INFO_H__ | |||||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_NAME "Carla" | #define DISTRHO_PLUGIN_NAME "Carla" | ||||
| @@ -35,4 +35,4 @@ | |||||
| #define DISTRHO_UI_EXTERNAL | #define DISTRHO_UI_EXTERNAL | ||||
| #endif // __DISTRHO_PLUGIN_INFO_H__ | |||||
| #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_3BANDEQ_HPP__ | |||||
| #define __DISTRHO_PLUGIN_3BANDEQ_HPP__ | |||||
| #ifndef DISTRHO_PLUGIN_3BANDEQ_HPP_INCLUDED | |||||
| #define DISTRHO_PLUGIN_3BANDEQ_HPP_INCLUDED | |||||
| #include "DistrhoPlugin.hpp" | #include "DistrhoPlugin.hpp" | ||||
| @@ -105,4 +105,4 @@ private: | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_PLUGIN_3BANDEQ_HPP__ | |||||
| #endif // DISTRHO_PLUGIN_3BANDEQ_HPP_INCLUDED | |||||
| @@ -14,8 +14,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_INFO_H__ | |||||
| #define __DISTRHO_PLUGIN_INFO_H__ | |||||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_NAME "3 Band EQ" | #define DISTRHO_PLUGIN_NAME "3 Band EQ" | ||||
| @@ -34,4 +34,4 @@ | |||||
| #define DISTRHO_UI_OPENGL | #define DISTRHO_UI_OPENGL | ||||
| #endif // __DISTRHO_PLUGIN_INFO_H__ | |||||
| #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| @@ -14,8 +14,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_UI_3BANDEQ_HPP__ | |||||
| #define __DISTRHO_UI_3BANDEQ_HPP__ | |||||
| #ifndef DISTRHO_UI_3BANDEQ_HPP_INCLUDED | |||||
| #define DISTRHO_UI_3BANDEQ_HPP_INCLUDED | |||||
| #include "DistrhoUIOpenGL.hpp" | #include "DistrhoUIOpenGL.hpp" | ||||
| @@ -90,4 +90,4 @@ private: | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_UI_3BANDEQ_HPP__ | |||||
| #endif // DISTRHO_UI_3BANDEQ_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_3BANDSPLITTER_HPP__ | |||||
| #define __DISTRHO_PLUGIN_3BANDSPLITTER_HPP__ | |||||
| #ifndef DISTRHO_PLUGIN_3BANDSPLITTER_HPP_INCLUDED | |||||
| #define DISTRHO_PLUGIN_3BANDSPLITTER_HPP_INCLUDED | |||||
| #include "DistrhoPlugin.hpp" | #include "DistrhoPlugin.hpp" | ||||
| @@ -105,4 +105,4 @@ private: | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_PLUGIN_3BANDSPLITTER_HPP__ | |||||
| #endif // DISTRHO_PLUGIN_3BANDSPLITTER_HPP_INCLUDED | |||||
| @@ -14,8 +14,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_INFO_H__ | |||||
| #define __DISTRHO_PLUGIN_INFO_H__ | |||||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_NAME "3 Band Splitter" | #define DISTRHO_PLUGIN_NAME "3 Band Splitter" | ||||
| @@ -34,4 +34,4 @@ | |||||
| #define DISTRHO_UI_OPENGL | #define DISTRHO_UI_OPENGL | ||||
| #endif // __DISTRHO_PLUGIN_INFO_H__ | |||||
| #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| @@ -14,8 +14,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_UI_3BANDSPLITTER_HPP__ | |||||
| #define __DISTRHO_UI_3BANDSPLITTER_HPP__ | |||||
| #ifndef DISTRHO_UI_3BANDSPLITTER_HPP_INCLUDED | |||||
| #define DISTRHO_UI_3BANDSPLITTER_HPP_INCLUDED | |||||
| #include "DistrhoUIOpenGL.hpp" | #include "DistrhoUIOpenGL.hpp" | ||||
| @@ -90,4 +90,4 @@ private: | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_UI_3BANDSPLITTER_HPP__ | |||||
| #endif // DISTRHO_UI_3BANDSPLITTER_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __AUDIO_BASE_HPP__ | |||||
| #define __AUDIO_BASE_HPP__ | |||||
| #ifndef AUDIO_BASE_HPP_INCLUDED | |||||
| #define AUDIO_BASE_HPP_INCLUDED | |||||
| #include "CarlaMutex.hpp" | #include "CarlaMutex.hpp" | ||||
| @@ -386,4 +386,4 @@ private: | |||||
| CarlaMutex fMutex; | CarlaMutex fMutex; | ||||
| }; | }; | ||||
| #endif // __AUDIO_BASE_HPP__ | |||||
| #endif // AUDIO_BASE_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __MIDI_BASE_HPP__ | |||||
| #define __MIDI_BASE_HPP__ | |||||
| #ifndef MIDI_BASE_HPP_INCLUDED | |||||
| #define MIDI_BASE_HPP_INCLUDED | |||||
| #include "CarlaMIDI.h" | #include "CarlaMIDI.h" | ||||
| #include "CarlaMutex.hpp" | #include "CarlaMutex.hpp" | ||||
| @@ -236,4 +236,4 @@ private: | |||||
| } | } | ||||
| }; | }; | ||||
| #endif // __MIDI_BASE_HPP__ | |||||
| #endif // MIDI_BASE_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_INFO_H__ | |||||
| #define __DISTRHO_PLUGIN_INFO_H__ | |||||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_NAME "Nekobi" | #define DISTRHO_PLUGIN_NAME "Nekobi" | ||||
| @@ -35,4 +35,4 @@ | |||||
| #define DISTRHO_UI_OPENGL | #define DISTRHO_UI_OPENGL | ||||
| #endif // __DISTRHO_PLUGIN_INFO_H__ | |||||
| #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| @@ -16,8 +16,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_3BANDEQ_HPP__ | |||||
| #define __DISTRHO_PLUGIN_3BANDEQ_HPP__ | |||||
| #ifndef DISTRHO_PLUGIN_3BANDEQ_HPP_INCLUDED | |||||
| #define DISTRHO_PLUGIN_3BANDEQ_HPP_INCLUDED | |||||
| #include "DistrhoPlugin.hpp" | #include "DistrhoPlugin.hpp" | ||||
| @@ -112,4 +112,4 @@ private: | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_PLUGIN_3BANDEQ_HPP__ | |||||
| #endif // DISTRHO_PLUGIN_3BANDEQ_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_UI_3BANDEQ_HPP__ | |||||
| #define __DISTRHO_UI_3BANDEQ_HPP__ | |||||
| #ifndef DISTRHO_UI_3BANDEQ_HPP_INCLUDED | |||||
| #define DISTRHO_UI_3BANDEQ_HPP_INCLUDED | |||||
| #include "DistrhoUIOpenGL.hpp" | #include "DistrhoUIOpenGL.hpp" | ||||
| @@ -101,4 +101,4 @@ private: | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_UI_3BANDEQ_HPP__ | |||||
| #endif // DISTRHO_UI_3BANDEQ_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_INFO_H__ | |||||
| #define __DISTRHO_PLUGIN_INFO_H__ | |||||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_NAME "Notes" | #define DISTRHO_PLUGIN_NAME "Notes" | ||||
| @@ -35,4 +35,4 @@ | |||||
| #define DISTRHO_UI_QT | #define DISTRHO_UI_QT | ||||
| #endif // __DISTRHO_PLUGIN_INFO_H__ | |||||
| #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_NOTES_HPP__ | |||||
| #define __DISTRHO_PLUGIN_NOTES_HPP__ | |||||
| #ifndef DISTRHO_PLUGIN_NOTES_HPP_INCLUDED | |||||
| #define DISTRHO_PLUGIN_NOTES_HPP_INCLUDED | |||||
| #include "DistrhoPlugin.hpp" | #include "DistrhoPlugin.hpp" | ||||
| @@ -83,4 +83,4 @@ private: | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_PLUGIN_NOTES_HPP__ | |||||
| #endif // DISTRHO_PLUGIN_NOTES_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_UI_NOTES_HPP__ | |||||
| #define __DISTRHO_UI_NOTES_HPP__ | |||||
| #ifndef DISTRHO_UI_NOTES_HPP_INCLUDED | |||||
| #define DISTRHO_UI_NOTES_HPP_INCLUDED | |||||
| #include "DistrhoUIQt.hpp" | #include "DistrhoUIQt.hpp" | ||||
| #include "paramspinbox.hpp" | #include "paramspinbox.hpp" | ||||
| @@ -104,8 +104,6 @@ private: | |||||
| void saveCurrentTextState(); | void saveCurrentTextState(); | ||||
| }; | }; | ||||
| // ------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_UI_NOTES_HPP__ | |||||
| #endif // DISTRHO_UI_NOTES_HPP_INCLUDED | |||||
| @@ -14,8 +14,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_INFO_H__ | |||||
| #define __DISTRHO_PLUGIN_INFO_H__ | |||||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_NAME "Ping Pong Pan" | #define DISTRHO_PLUGIN_NAME "Ping Pong Pan" | ||||
| @@ -34,4 +34,4 @@ | |||||
| #define DISTRHO_UI_OPENGL | #define DISTRHO_UI_OPENGL | ||||
| #endif // __DISTRHO_PLUGIN_INFO_H__ | |||||
| #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_PINGPONGPAN_HPP__ | |||||
| #define __DISTRHO_PLUGIN_PINGPONGPAN_HPP__ | |||||
| #ifndef DISTRHO_PLUGIN_PINGPONGPAN_HPP_INCLUDED | |||||
| #define DISTRHO_PLUGIN_PINGPONGPAN_HPP_INCLUDED | |||||
| #include "DistrhoPlugin.hpp" | #include "DistrhoPlugin.hpp" | ||||
| @@ -96,4 +96,4 @@ private: | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_PLUGIN_PINGPONGPAN_HPP__ | |||||
| #endif // DISTRHO_PLUGIN_PINGPONGPAN_HPP_INCLUDED | |||||
| @@ -14,8 +14,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_UI_PINGPONGPAN_HPP__ | |||||
| #define __DISTRHO_UI_PINGPONGPAN_HPP__ | |||||
| #ifndef DISTRHO_UI_PINGPONGPAN_HPP_INCLUDED | |||||
| #define DISTRHO_UI_PINGPONGPAN_HPP_INCLUDED | |||||
| #include "DistrhoUIOpenGL.hpp" | #include "DistrhoUIOpenGL.hpp" | ||||
| @@ -78,8 +78,6 @@ private: | |||||
| ImageButton* fButtonAbout; | ImageButton* fButtonAbout; | ||||
| }; | }; | ||||
| // ------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_UI_PINGPONGPAN_HPP__ | |||||
| #endif // DISTRHO_UI_PINGPONGPAN_HPP_INCLUDED | |||||
| @@ -14,8 +14,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_INFO_H__ | |||||
| #define __DISTRHO_PLUGIN_INFO_H__ | |||||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_NAME "Stereo Enhancer" | #define DISTRHO_PLUGIN_NAME "Stereo Enhancer" | ||||
| @@ -34,4 +34,4 @@ | |||||
| #define DISTRHO_UI_OPENGL | #define DISTRHO_UI_OPENGL | ||||
| #endif // __DISTRHO_PLUGIN_INFO_H__ | |||||
| #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_PLUGIN_3BANDEQ_HPP__ | |||||
| #define __DISTRHO_PLUGIN_3BANDEQ_HPP__ | |||||
| #ifndef DISTRHO_PLUGIN_STEREO_ENHANCER_HPP_INCLUDED | |||||
| #define DISTRHO_PLUGIN_STEREO_ENHANCER_HPP_INCLUDED | |||||
| #include "DistrhoPlugin.hpp" | #include "DistrhoPlugin.hpp" | ||||
| @@ -103,4 +103,4 @@ private: | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_PLUGIN_3BANDEQ_HPP__ | |||||
| #endif // DISTRHO_PLUGIN_STEREO_ENHANCER_HPP_INCLUDED | |||||
| @@ -14,8 +14,8 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #ifndef __DISTRHO_UI_3BANDEQ_HPP__ | |||||
| #define __DISTRHO_UI_3BANDEQ_HPP__ | |||||
| #ifndef DISTRHO_UI_STEREO_ENHANCER_HPP_INCLUDED | |||||
| #define DISTRHO_UI_STEREO_ENHANCER_HPP_INCLUDED | |||||
| #include "DistrhoUIOpenGL.hpp" | #include "DistrhoUIOpenGL.hpp" | ||||
| @@ -78,8 +78,6 @@ private: | |||||
| ImageButton* fButtonAbout; | ImageButton* fButtonAbout; | ||||
| }; | }; | ||||
| // ------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| #endif // __DISTRHO_UI_3BANDEQ_HPP__ | |||||
| #endif // DISTRHO_UI_STEREO_ENHANCER_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __CARLA_PLUGIN_GUI_HPP__ | |||||
| #define __CARLA_PLUGIN_GUI_HPP__ | |||||
| #ifndef CARLA_PLUGIN_GUI_HPP_INCLUDED | |||||
| #define CARLA_PLUGIN_GUI_HPP_INCLUDED | |||||
| #include "CarlaPluginInternal.hpp" | #include "CarlaPluginInternal.hpp" | ||||
| @@ -79,4 +79,4 @@ private slots: | |||||
| CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE | ||||
| #endif // __CARLA_PLUGIN_GUI_HPP__ | |||||
| #endif // CARLA_PLUGIN_GUI_HPP_INCLUDED | |||||
| @@ -12,11 +12,11 @@ | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
| * GNU General Public License for more details. | * GNU General Public License for more details. | ||||
| * | * | ||||
| * For a full copy of the GNU General Public License see the GPL.txt file | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | */ | ||||
| #ifndef __CARLA_PLUGIN_INTERNAL_HPP__ | |||||
| #define __CARLA_PLUGIN_INTERNAL_HPP__ | |||||
| #ifndef CARLA_PLUGIN_INTERNAL_HPP_INCLUDED | |||||
| #define CARLA_PLUGIN_INTERNAL_HPP_INCLUDED | |||||
| #include "CarlaPlugin.hpp" | #include "CarlaPlugin.hpp" | ||||
| #include "CarlaPluginThread.hpp" | #include "CarlaPluginThread.hpp" | ||||
| @@ -806,38 +806,8 @@ struct CarlaPluginProtectedData { | |||||
| void saveSetting(const unsigned int option, const bool yesNo); | void saveSetting(const unsigned int option, const bool yesNo); | ||||
| unsigned int loadSettings(const unsigned int options, const unsigned int availOptions); | unsigned int loadSettings(const unsigned int options, const unsigned int availOptions); | ||||
| // ------------------------------------------------------------------- | |||||
| // Static helper functions | |||||
| static CarlaEngine* getEngine(CarlaPlugin* const plugin) | |||||
| { | |||||
| return plugin->kData->engine; | |||||
| } | |||||
| static CarlaEngineClient* getEngineClient(CarlaPlugin* const plugin) | |||||
| { | |||||
| return plugin->kData->client; | |||||
| } | |||||
| static CarlaEngineAudioPort* getAudioInPort(CarlaPlugin* const plugin, const uint32_t index) | |||||
| { | |||||
| return plugin->kData->audioIn.ports[index].port; | |||||
| } | |||||
| static CarlaEngineAudioPort* getAudioOutPort(CarlaPlugin* const plugin, const uint32_t index) | |||||
| { | |||||
| return plugin->kData->audioOut.ports[index].port; | |||||
| } | |||||
| static bool canRunInRack(CarlaPlugin* const plugin) | |||||
| { | |||||
| return (plugin->kData->extraHints & PLUGIN_HINT_CAN_RUN_RACK); | |||||
| } | |||||
| }; | }; | ||||
| // ----------------------------------------------------------------------- | |||||
| CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE | ||||
| #endif // __CARLA_PLUGIN_INTERNAL_HPP__ | |||||
| #endif // CARLA_PLUGIN_INTERNAL_HPP_INCLUDED | |||||
| @@ -12,7 +12,7 @@ | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
| * GNU General Public License for more details. | * GNU General Public License for more details. | ||||
| * | * | ||||
| * For a full copy of the GNU General Public License see the GPL.txt file | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | */ | ||||
| #include "CarlaPluginThread.hpp" | #include "CarlaPluginThread.hpp" | ||||
| @@ -45,12 +45,12 @@ const char* PluginThreadMode2str(const CarlaPluginThread::Mode mode) | |||||
| } | } | ||||
| CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin, const Mode mode) | CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin, const Mode mode) | ||||
| : kEngine(engine), | |||||
| kPlugin(plugin), | |||||
| : fEngine(engine), | |||||
| fPlugin(plugin), | |||||
| fMode(mode), | fMode(mode), | ||||
| fProcess(nullptr) | fProcess(nullptr) | ||||
| { | { | ||||
| carla_debug("CarlaPluginThread::CarlaPluginThread(plugin:\"%s\", engine:\"%s\", %s)", plugin->name(), engine->getName(), PluginThreadMode2str(mode)); | |||||
| carla_debug("CarlaPluginThread::CarlaPluginThread(plugin:\"%s\", engine:\"%s\", %s)", plugin->getName(), engine->getName(), PluginThreadMode2str(mode)); | |||||
| } | } | ||||
| CarlaPluginThread::~CarlaPluginThread() | CarlaPluginThread::~CarlaPluginThread() | ||||
| @@ -99,7 +99,7 @@ void CarlaPluginThread::run() | |||||
| case PLUGIN_THREAD_LV2_GUI: | case PLUGIN_THREAD_LV2_GUI: | ||||
| case PLUGIN_THREAD_VST_GUI: | case PLUGIN_THREAD_VST_GUI: | ||||
| fProcess->terminate(); | fProcess->terminate(); | ||||
| kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), -1, 0, 0.0f, nullptr); | |||||
| fEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, fPlugin->getId(), -1, 0, 0.0f, nullptr); | |||||
| return; | return; | ||||
| case PLUGIN_THREAD_BRIDGE: | case PLUGIN_THREAD_BRIDGE: | ||||
| @@ -107,7 +107,7 @@ void CarlaPluginThread::run() | |||||
| } | } | ||||
| } | } | ||||
| QString name(kPlugin->name()); | |||||
| QString name(fPlugin->getName()); | |||||
| QStringList arguments; | QStringList arguments; | ||||
| if (name.isEmpty()) | if (name.isEmpty()) | ||||
| @@ -119,29 +119,29 @@ void CarlaPluginThread::run() | |||||
| break; | break; | ||||
| case PLUGIN_THREAD_DSSI_GUI: | case PLUGIN_THREAD_DSSI_GUI: | ||||
| /* osc-url */ arguments << QString("%1/%2").arg(kEngine->getOscServerPathUDP()).arg(kPlugin->id()); | |||||
| /* filename */ arguments << kPlugin->filename(); | |||||
| /* osc-url */ arguments << QString("%1/%2").arg(fEngine->getOscServerPathUDP()).arg(fPlugin->getId()); | |||||
| /* filename */ arguments << fPlugin->getFilename(); | |||||
| /* label */ arguments << (const char*)fLabel; | /* label */ arguments << (const char*)fLabel; | ||||
| /* ui-title */ arguments << QString("%1 (GUI)").arg(kPlugin->name()); | |||||
| /* ui-title */ arguments << QString("%1 (GUI)").arg(fPlugin->getName()); | |||||
| break; | break; | ||||
| case PLUGIN_THREAD_LV2_GUI: | case PLUGIN_THREAD_LV2_GUI: | ||||
| /* osc-url */ arguments << QString("%1/%2").arg(kEngine->getOscServerPathTCP()).arg(kPlugin->id()); | |||||
| /* osc-url */ arguments << QString("%1/%2").arg(fEngine->getOscServerPathTCP()).arg(fPlugin->getId()); | |||||
| /* URI */ arguments << (const char*)fLabel; | /* URI */ arguments << (const char*)fLabel; | ||||
| /* ui-URI */ arguments << (const char*)fExtra1; | /* ui-URI */ arguments << (const char*)fExtra1; | ||||
| /* ui-title */ arguments << QString("%1 (GUI)").arg(kPlugin->name()); | |||||
| /* ui-title */ arguments << QString("%1 (GUI)").arg(fPlugin->getName()); | |||||
| break; | break; | ||||
| case PLUGIN_THREAD_VST_GUI: | case PLUGIN_THREAD_VST_GUI: | ||||
| /* osc-url */ arguments << QString("%1/%2").arg(kEngine->getOscServerPathTCP()).arg(kPlugin->id()); | |||||
| /* filename */ arguments << kPlugin->filename(); | |||||
| /* ui-title */ arguments << QString("%1 (GUI)").arg(kPlugin->name()); | |||||
| /* osc-url */ arguments << QString("%1/%2").arg(fEngine->getOscServerPathTCP()).arg(fPlugin->getId()); | |||||
| /* filename */ arguments << fPlugin->getFilename(); | |||||
| /* ui-title */ arguments << QString("%1 (GUI)").arg(fPlugin->getName()); | |||||
| break; | break; | ||||
| case PLUGIN_THREAD_BRIDGE: | case PLUGIN_THREAD_BRIDGE: | ||||
| /* osc-url */ arguments << QString("%1/%2").arg(kEngine->getOscServerPathTCP()).arg(kPlugin->id()); | |||||
| /* osc-url */ arguments << QString("%1/%2").arg(fEngine->getOscServerPathTCP()).arg(fPlugin->getId()); | |||||
| /* stype */ arguments << (const char*)fExtra1; | /* stype */ arguments << (const char*)fExtra1; | ||||
| /* filename */ arguments << kPlugin->filename(); | |||||
| /* filename */ arguments << fPlugin->getFilename(); | |||||
| /* name */ arguments << name; | /* name */ arguments << name; | ||||
| /* label */ arguments << (const char*)fLabel; | /* label */ arguments << (const char*)fLabel; | ||||
| /* SHM ids */ arguments << (const char*)fExtra2; | /* SHM ids */ arguments << (const char*)fExtra2; | ||||
| @@ -159,20 +159,20 @@ void CarlaPluginThread::run() | |||||
| case PLUGIN_THREAD_DSSI_GUI: | case PLUGIN_THREAD_DSSI_GUI: | ||||
| case PLUGIN_THREAD_LV2_GUI: | case PLUGIN_THREAD_LV2_GUI: | ||||
| case PLUGIN_THREAD_VST_GUI: | case PLUGIN_THREAD_VST_GUI: | ||||
| if (kPlugin->waitForOscGuiShow()) | |||||
| if (fPlugin->waitForOscGuiShow()) | |||||
| { | { | ||||
| fProcess->waitForFinished(-1); | fProcess->waitForFinished(-1); | ||||
| if (fProcess->exitCode() == 0) | if (fProcess->exitCode() == 0) | ||||
| { | { | ||||
| // Hide | // Hide | ||||
| kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), 0, 0, 0.0f, nullptr); | |||||
| fEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, fPlugin->getId(), 0, 0, 0.0f, nullptr); | |||||
| carla_stdout("CarlaPluginThread::run() - GUI closed"); | carla_stdout("CarlaPluginThread::run() - GUI closed"); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| // Kill | // Kill | ||||
| kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), -1, 0, 0.0f, nullptr); | |||||
| fEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, fPlugin->getId(), -1, 0, 0.0f, nullptr); | |||||
| carla_stderr("CarlaPluginThread::run() - GUI crashed while running"); | carla_stderr("CarlaPluginThread::run() - GUI crashed while running"); | ||||
| } | } | ||||
| } | } | ||||
| @@ -183,12 +183,12 @@ void CarlaPluginThread::run() | |||||
| if (fProcess->exitCode() != 0 || fProcess->exitStatus() == QProcess::CrashExit) | if (fProcess->exitCode() != 0 || fProcess->exitStatus() == QProcess::CrashExit) | ||||
| { | { | ||||
| kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), -1, 0, 0.0f, nullptr); | |||||
| fEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, fPlugin->getId(), -1, 0, 0.0f, nullptr); | |||||
| carla_stderr("CarlaPluginThread::run() - GUI crashed while opening"); | carla_stderr("CarlaPluginThread::run() - GUI crashed while opening"); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), 0, 0, 0.0f, nullptr); | |||||
| fEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, fPlugin->getId(), 0, 0, 0.0f, nullptr); | |||||
| carla_debug("CarlaPluginThread::run() - GUI timeout"); | carla_debug("CarlaPluginThread::run() - GUI timeout"); | ||||
| } | } | ||||
| } | } | ||||
| @@ -201,10 +201,10 @@ void CarlaPluginThread::run() | |||||
| { | { | ||||
| carla_stderr("CarlaPluginThread::run() - bridge crashed"); | carla_stderr("CarlaPluginThread::run() - bridge crashed"); | ||||
| CarlaString errorString("Plugin '" + CarlaString(kPlugin->name()) + "' has crashed!\n" | |||||
| CarlaString errorString("Plugin '" + CarlaString(fPlugin->getName()) + "' has crashed!\n" | |||||
| "Saving now will lose its current settings.\n" | "Saving now will lose its current settings.\n" | ||||
| "Please remove this plugin, and not rely on it from this point."); | "Please remove this plugin, and not rely on it from this point."); | ||||
| kEngine->callback(CarlaBackend::CALLBACK_ERROR, kPlugin->id(), 0, 0, 0.0f, (const char*)errorString); | |||||
| fEngine->callback(CarlaBackend::CALLBACK_ERROR, fPlugin->getId(), 0, 0, 0.0f, (const char*)errorString); | |||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -12,7 +12,7 @@ | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
| * GNU General Public License for more details. | * GNU General Public License for more details. | ||||
| * | * | ||||
| * For a full copy of the GNU General Public License see the GPL.txt file | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | */ | ||||
| #include "CarlaStandalone.hpp" | #include "CarlaStandalone.hpp" | ||||
| @@ -37,12 +37,14 @@ | |||||
| # include <QtGui/QApplication> | # include <QtGui/QApplication> | ||||
| #endif | #endif | ||||
| using CarlaBackend::CarlaEngine; | |||||
| using CarlaBackend::CarlaPlugin; | |||||
| using CarlaBackend::CallbackFunc; | |||||
| using CarlaBackend::EngineOptions; | |||||
| using CarlaBackend::EngineTimeInfo; | |||||
| using CarlaBackend::LogThread; | |||||
| namespace CB = CarlaBackend; | |||||
| using CB::CarlaEngine; | |||||
| using CB::CarlaPlugin; | |||||
| using CB::CallbackFunc; | |||||
| using CB::EngineOptions; | |||||
| using CB::EngineTimeInfo; | |||||
| using CB::LogThread; | |||||
| // ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- | ||||
| // Single, standalone engine | // Single, standalone engine | ||||
| @@ -103,7 +105,7 @@ struct CarlaBackendStandalone { | |||||
| if (app != nullptr) | if (app != nullptr) | ||||
| return; | return; | ||||
| // try again, app might be registered now | |||||
| // try again, app might be registed now | |||||
| app = qApp; | app = qApp; | ||||
| if (app != nullptr) | if (app != nullptr) | ||||
| @@ -130,7 +132,7 @@ struct CarlaBackendStandalone { | |||||
| app = nullptr; | app = nullptr; | ||||
| } | } | ||||
| CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(CarlaBackendStandalone) | |||||
| CARLA_DECLARE_NON_COPY_STRUCT(CarlaBackendStandalone) | |||||
| } standalone; | } standalone; | ||||
| @@ -296,9 +298,9 @@ unsigned int carla_get_internal_plugin_count() | |||||
| #ifdef WANT_NATIVE | #ifdef WANT_NATIVE | ||||
| return static_cast<unsigned int>(CarlaPlugin::getNativePluginCount()); | return static_cast<unsigned int>(CarlaPlugin::getNativePluginCount()); | ||||
| #endif | |||||
| #else | |||||
| return 0; | return 0; | ||||
| #endif | |||||
| } | } | ||||
| const CarlaNativePluginInfo* carla_get_internal_plugin_info(unsigned int internalPluginId) | const CarlaNativePluginInfo* carla_get_internal_plugin_info(unsigned int internalPluginId) | ||||
| @@ -320,15 +322,13 @@ const CarlaNativePluginInfo* carla_get_internal_plugin_info(unsigned int interna | |||||
| info.hints = 0x0; | info.hints = 0x0; | ||||
| if (nativePlugin->hints & PLUGIN_IS_RTSAFE) | if (nativePlugin->hints & PLUGIN_IS_RTSAFE) | ||||
| info.hints |= CarlaBackend::PLUGIN_IS_RTSAFE; | |||||
| info.hints |= CB::PLUGIN_IS_RTSAFE; | |||||
| if (nativePlugin->hints & PLUGIN_IS_SYNTH) | if (nativePlugin->hints & PLUGIN_IS_SYNTH) | ||||
| info.hints |= CarlaBackend::PLUGIN_IS_SYNTH; | |||||
| info.hints |= CB::PLUGIN_IS_SYNTH; | |||||
| if (nativePlugin->hints & PLUGIN_HAS_GUI) | if (nativePlugin->hints & PLUGIN_HAS_GUI) | ||||
| info.hints |= CarlaBackend::PLUGIN_HAS_GUI; | |||||
| if (nativePlugin->hints & PLUGIN_USES_GUI_AS_FILE) | |||||
| info.hints |= CarlaBackend::PLUGIN_HAS_GUI_AS_FILE; | |||||
| info.hints |= CB::PLUGIN_HAS_GUI; | |||||
| if (nativePlugin->hints & PLUGIN_USES_SINGLE_THREAD) | if (nativePlugin->hints & PLUGIN_USES_SINGLE_THREAD) | ||||
| info.hints |= CarlaBackend::PLUGIN_HAS_SINGLE_THREAD; | |||||
| info.hints |= CB::PLUGIN_HAS_SINGLE_THREAD; | |||||
| info.audioIns = nativePlugin->audioIns; | info.audioIns = nativePlugin->audioIns; | ||||
| info.audioOuts = nativePlugin->audioOuts; | info.audioOuts = nativePlugin->audioOuts; | ||||
| @@ -355,17 +355,17 @@ const CarlaNativePluginInfo* carla_get_internal_plugin_info(unsigned int interna | |||||
| bool carla_engine_init(const char* driverName, const char* clientName) | bool carla_engine_init(const char* driverName, const char* clientName) | ||||
| { | { | ||||
| carla_debug("carla_engine_init(\"%s\", \"%s\")", driverName, clientName); | |||||
| CARLA_ASSERT(standalone.engine == nullptr); | CARLA_ASSERT(standalone.engine == nullptr); | ||||
| CARLA_ASSERT(driverName != nullptr); | CARLA_ASSERT(driverName != nullptr); | ||||
| CARLA_ASSERT(clientName != nullptr); | CARLA_ASSERT(clientName != nullptr); | ||||
| carla_debug("carla_engine_init(\"%s\", \"%s\")", driverName, clientName); | |||||
| #ifndef NDEBUG | #ifndef NDEBUG | ||||
| static bool showWarning = true; | static bool showWarning = true; | ||||
| if (showWarning && standalone.callback != nullptr) | if (showWarning && standalone.callback != nullptr) | ||||
| { | { | ||||
| standalone.callback(standalone.callbackPtr, CarlaBackend::CALLBACK_DEBUG, 0, 0, 0, 0.0f, "Debug builds don't use this, check the console instead"); | |||||
| standalone.callback(standalone.callbackPtr, CB::CALLBACK_DEBUG, 0, 0, 0, 0.0f, "Debug builds don't use this, check the console instead"); | |||||
| showWarning = false; | showWarning = false; | ||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -399,49 +399,47 @@ bool carla_engine_init(const char* driverName, const char* clientName) | |||||
| standalone.engine->setCallback(standalone.callback, nullptr); | standalone.engine->setCallback(standalone.callback, nullptr); | ||||
| #ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
| standalone.engine->setOption(CarlaBackend::OPTION_PROCESS_MODE, static_cast<int>(standalone.options.processMode), nullptr); | |||||
| # if 0 // disabled for now | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_TRANSPORT_MODE, static_cast<int>(standalone.options.transportMode), nullptr); | |||||
| # endif | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_FORCE_STEREO, standalone.options.forceStereo ? 1 : 0, nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PREFER_PLUGIN_BRIDGES, standalone.options.preferPluginBridges ? 1 : 0, nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PREFER_UI_BRIDGES, standalone.options.preferUiBridges ? 1 : 0, nullptr); | |||||
| # ifdef WANT_DSSI | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_USE_DSSI_VST_CHUNKS, standalone.options.useDssiVstChunks ? 1 : 0, nullptr); | |||||
| # endif | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_MAX_PARAMETERS, static_cast<int>(standalone.options.maxParameters), nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_OSC_UI_TIMEOUT, static_cast<int>(standalone.options.oscUiTimeout), nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_JACK_AUTOCONNECT, standalone.options.jackAutoConnect ? 1 : 0, nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_JACK_TIMEMASTER, standalone.options.jackTimeMaster ? 1 : 0, nullptr); | |||||
| # ifdef WANT_RTAUDIO | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_RTAUDIO_BUFFER_SIZE, static_cast<int>(standalone.options.rtaudioBufferSize), nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_RTAUDIO_SAMPLE_RATE, static_cast<int>(standalone.options.rtaudioSampleRate), nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_RTAUDIO_DEVICE, 0, (const char*)standalone.options.rtaudioDevice); | |||||
| # endif | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_RESOURCES, 0, (const char*)standalone.options.resourceDir); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_NATIVE, 0, (const char*)standalone.options.bridge_native); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_POSIX32, 0, (const char*)standalone.options.bridge_posix32); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_POSIX64, 0, (const char*)standalone.options.bridge_posix64); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_WIN32, 0, (const char*)standalone.options.bridge_win32); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_WIN64, 0, (const char*)standalone.options.bridge_win64); | |||||
| # ifdef WANT_LV2 | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK2, 0, (const char*)standalone.options.bridge_lv2Gtk2); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK3, 0, (const char*)standalone.options.bridge_lv2Gtk3); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT4, 0, (const char*)standalone.options.bridge_lv2Qt4); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT5, 0, (const char*)standalone.options.bridge_lv2Qt5); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_COCOA, 0, (const char*)standalone.options.bridge_lv2Cocoa); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_WINDOWS, 0, (const char*)standalone.options.bridge_lv2Win); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_X11, 0, (const char*)standalone.options.bridge_lv2X11); | |||||
| # endif | |||||
| # ifdef WANT_VST | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_VST_COCOA, 0, (const char*)standalone.options.bridge_vstCocoa); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_VST_HWND, 0, (const char*)standalone.options.bridge_vstHWND); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_VST_X11, 0, (const char*)standalone.options.bridge_vstX11); | |||||
| # endif | |||||
| standalone.engine->setOption(CB::OPTION_PROCESS_MODE, static_cast<int>(standalone.options.processMode), nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_TRANSPORT_MODE, static_cast<int>(standalone.options.transportMode), nullptr); | |||||
| #endif | |||||
| standalone.engine->setOption(CB::OPTION_FORCE_STEREO, standalone.options.forceStereo ? 1 : 0, nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_PREFER_PLUGIN_BRIDGES, standalone.options.preferPluginBridges ? 1 : 0, nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_PREFER_UI_BRIDGES, standalone.options.preferUiBridges ? 1 : 0, nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_UIS_ALWAYS_ON_TOP, standalone.options.uisAlwaysOnTop ? 1 : 0, nullptr); | |||||
| #ifdef WANT_DSSI | |||||
| standalone.engine->setOption(CB::OPTION_USE_DSSI_VST_CHUNKS, standalone.options.useDssiVstChunks ? 1 : 0, nullptr); | |||||
| #endif | |||||
| standalone.engine->setOption(CB::OPTION_MAX_PARAMETERS, static_cast<int>(standalone.options.maxParameters), nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_UI_BRIDGES_TIMEOUT, static_cast<int>(standalone.options.uiBridgesTimeout), nullptr); | |||||
| #ifdef WANT_RTAUDIO | |||||
| standalone.engine->setOption(CB::OPTION_RTAUDIO_NUMBER_PERIODS, static_cast<int>(standalone.options.rtaudioNumPeriods), nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_RTAUDIO_BUFFER_SIZE, static_cast<int>(standalone.options.rtaudioBufferSize), nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_RTAUDIO_SAMPLE_RATE, static_cast<int>(standalone.options.rtaudioSampleRate), nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_RTAUDIO_DEVICE, 0, (const char*)standalone.options.rtaudioDevice); | |||||
| #endif | |||||
| standalone.engine->setOption(CB::OPTION_PATH_RESOURCES, 0, (const char*)standalone.options.resourceDir); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_NATIVE, 0, (const char*)standalone.options.bridge_native); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_POSIX32, 0, (const char*)standalone.options.bridge_posix32); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_POSIX64, 0, (const char*)standalone.options.bridge_posix64); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_WIN32, 0, (const char*)standalone.options.bridge_win32); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_WIN64, 0, (const char*)standalone.options.bridge_win64); | |||||
| #ifdef WANT_LV2 | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_LV2_GTK2, 0, (const char*)standalone.options.bridge_lv2Gtk2); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_LV2_GTK3, 0, (const char*)standalone.options.bridge_lv2Gtk3); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_LV2_QT4, 0, (const char*)standalone.options.bridge_lv2Qt4); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_LV2_QT5, 0, (const char*)standalone.options.bridge_lv2Qt5); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_LV2_COCOA, 0, (const char*)standalone.options.bridge_lv2Cocoa); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_LV2_WINDOWS, 0, (const char*)standalone.options.bridge_lv2Win); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_LV2_X11, 0, (const char*)standalone.options.bridge_lv2X11); | |||||
| #endif | |||||
| #ifdef WANT_VST | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_VST_COCOA, 0, (const char*)standalone.options.bridge_vstCocoa); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_VST_HWND, 0, (const char*)standalone.options.bridge_vstHWND); | |||||
| standalone.engine->setOption(CB::OPTION_PATH_BRIDGE_VST_X11, 0, (const char*)standalone.options.bridge_vstX11); | |||||
| #endif | |||||
| if (standalone.procName.isNotEmpty()) | if (standalone.procName.isNotEmpty()) | ||||
| standalone.engine->setOption(CarlaBackend::OPTION_PROCESS_NAME, 0, (const char*)standalone.procName); | |||||
| #endif | |||||
| standalone.engine->setOption(CB::OPTION_PROCESS_NAME, 0, (const char*)standalone.procName); | |||||
| if (standalone.engine->init(clientName)) | if (standalone.engine->init(clientName)) | ||||
| { | { | ||||
| @@ -460,8 +458,8 @@ bool carla_engine_init(const char* driverName, const char* clientName) | |||||
| bool carla_engine_close() | bool carla_engine_close() | ||||
| { | { | ||||
| carla_debug("carla_engine_close()"); | |||||
| CARLA_ASSERT(standalone.engine != nullptr); | CARLA_ASSERT(standalone.engine != nullptr); | ||||
| carla_debug("carla_engine_close()"); | |||||
| if (standalone.engine == nullptr) | if (standalone.engine == nullptr) | ||||
| { | { | ||||
| @@ -504,8 +502,8 @@ bool carla_is_engine_running() | |||||
| void carla_set_engine_about_to_close() | void carla_set_engine_about_to_close() | ||||
| { | { | ||||
| carla_debug("carla_set_engine_about_to_close()"); | |||||
| CARLA_ASSERT(standalone.engine != nullptr); | CARLA_ASSERT(standalone.engine != nullptr); | ||||
| carla_debug("carla_set_engine_about_to_close()"); | |||||
| if (standalone.engine != nullptr) | if (standalone.engine != nullptr) | ||||
| standalone.engine->setAboutToClose(); | standalone.engine->setAboutToClose(); | ||||
| @@ -526,142 +524,140 @@ void carla_set_engine_callback(CarlaCallbackFunc func, void* ptr) | |||||
| void carla_set_engine_option(CarlaOptionsType option, int value, const char* valueStr) | void carla_set_engine_option(CarlaOptionsType option, int value, const char* valueStr) | ||||
| { | { | ||||
| carla_debug("carla_set_engine_option(%s, %i, \"%s\")", CarlaBackend::OptionsType2Str(option), value, valueStr); | |||||
| carla_debug("carla_set_engine_option(%s, %i, \"%s\")", CB::OptionsType2Str(option), value, valueStr); | |||||
| switch (option) | switch (option) | ||||
| { | { | ||||
| case CarlaBackend::OPTION_PROCESS_NAME: | |||||
| case CB::OPTION_PROCESS_NAME: | |||||
| standalone.procName = valueStr; | standalone.procName = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PROCESS_MODE: | |||||
| if (value < CarlaBackend::PROCESS_MODE_SINGLE_CLIENT || value > CarlaBackend::PROCESS_MODE_PATCHBAY) | |||||
| case CB::OPTION_PROCESS_MODE: | |||||
| if (value < CB::PROCESS_MODE_SINGLE_CLIENT || value > CB::PROCESS_MODE_PATCHBAY) | |||||
| return carla_stderr2("carla_set_engine_option(OPTION_PROCESS_MODE, %i, \"%s\") - invalid value", value, valueStr); | return carla_stderr2("carla_set_engine_option(OPTION_PROCESS_MODE, %i, \"%s\") - invalid value", value, valueStr); | ||||
| standalone.options.processMode = static_cast<CarlaBackend::ProcessMode>(value); | |||||
| standalone.options.processMode = static_cast<CB::ProcessMode>(value); | |||||
| break; | break; | ||||
| case CarlaBackend::OPTION_TRANSPORT_MODE: | |||||
| #if 0 // disabled for now | |||||
| if (value < CarlaBackend::TRANSPORT_MODE_INTERNAL || value > CarlaBackend::TRANSPORT_MODE_JACK) | |||||
| case CB::OPTION_TRANSPORT_MODE: | |||||
| if (value < CB::TRANSPORT_MODE_INTERNAL || value > CB::TRANSPORT_MODE_JACK) | |||||
| return carla_stderr2("carla_set_engine_option(OPTION_TRANSPORT_MODE, %i, \"%s\") - invalid value", value, valueStr); | return carla_stderr2("carla_set_engine_option(OPTION_TRANSPORT_MODE, %i, \"%s\") - invalid value", value, valueStr); | ||||
| standalone.options.transportMode = static_cast<CarlaBackend::TransportMode>(value); | |||||
| #endif | |||||
| standalone.options.transportMode = static_cast<CB::TransportMode>(value); | |||||
| break; | break; | ||||
| case CarlaBackend::OPTION_FORCE_STEREO: | |||||
| case CB::OPTION_FORCE_STEREO: | |||||
| standalone.options.forceStereo = (value != 0); | standalone.options.forceStereo = (value != 0); | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PREFER_PLUGIN_BRIDGES: | |||||
| case CB::OPTION_PREFER_PLUGIN_BRIDGES: | |||||
| standalone.options.preferPluginBridges = (value != 0); | standalone.options.preferPluginBridges = (value != 0); | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PREFER_UI_BRIDGES: | |||||
| case CB::OPTION_PREFER_UI_BRIDGES: | |||||
| standalone.options.preferUiBridges = (value != 0); | standalone.options.preferUiBridges = (value != 0); | ||||
| break; | break; | ||||
| #ifdef WANT_DSSI | #ifdef WANT_DSSI | ||||
| case CarlaBackend::OPTION_USE_DSSI_VST_CHUNKS: | |||||
| case CB::OPTION_USE_DSSI_VST_CHUNKS: | |||||
| standalone.options.useDssiVstChunks = (value != 0); | standalone.options.useDssiVstChunks = (value != 0); | ||||
| break; | break; | ||||
| #endif | #endif | ||||
| case CarlaBackend::OPTION_MAX_PARAMETERS: | |||||
| case CB::OPTION_MAX_PARAMETERS: | |||||
| if (value <= 0) | if (value <= 0) | ||||
| return carla_stderr2("carla_set_engine_option(OPTION_MAX_PARAMETERS, %i, \"%s\") - invalid value", value, valueStr); | return carla_stderr2("carla_set_engine_option(OPTION_MAX_PARAMETERS, %i, \"%s\") - invalid value", value, valueStr); | ||||
| standalone.options.maxParameters = static_cast<unsigned int>(value); | standalone.options.maxParameters = static_cast<unsigned int>(value); | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_OSC_UI_TIMEOUT: | |||||
| case CB::OPTION_OSC_UI_TIMEOUT: | |||||
| if (value <= 0) | if (value <= 0) | ||||
| return carla_stderr2("carla_set_engine_option(OPTION_OSC_UI_TIMEOUT, %i, \"%s\") - invalid value", value, valueStr); | return carla_stderr2("carla_set_engine_option(OPTION_OSC_UI_TIMEOUT, %i, \"%s\") - invalid value", value, valueStr); | ||||
| standalone.options.oscUiTimeout = static_cast<unsigned int>(value); | standalone.options.oscUiTimeout = static_cast<unsigned int>(value); | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_JACK_AUTOCONNECT: | |||||
| case CB::OPTION_JACK_AUTOCONNECT: | |||||
| standalone.options.jackAutoConnect = (value != 0); | standalone.options.jackAutoConnect = (value != 0); | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_JACK_TIMEMASTER: | |||||
| case CB::OPTION_JACK_TIMEMASTER: | |||||
| standalone.options.jackTimeMaster = (value != 0); | standalone.options.jackTimeMaster = (value != 0); | ||||
| break; | break; | ||||
| #ifdef WANT_RTAUDIO | #ifdef WANT_RTAUDIO | ||||
| case CarlaBackend::OPTION_RTAUDIO_BUFFER_SIZE: | |||||
| case CB::OPTION_RTAUDIO_BUFFER_SIZE: | |||||
| if (value <= 0) | if (value <= 0) | ||||
| return carla_stderr2("carla_set_engine_option(OPTION_RTAUDIO_BUFFER_SIZE, %i, \"%s\") - invalid value", value, valueStr); | return carla_stderr2("carla_set_engine_option(OPTION_RTAUDIO_BUFFER_SIZE, %i, \"%s\") - invalid value", value, valueStr); | ||||
| standalone.options.rtaudioBufferSize = static_cast<unsigned int>(value); | standalone.options.rtaudioBufferSize = static_cast<unsigned int>(value); | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_RTAUDIO_SAMPLE_RATE: | |||||
| case CB::OPTION_RTAUDIO_SAMPLE_RATE: | |||||
| if (value <= 0) | if (value <= 0) | ||||
| return carla_stderr2("carla_set_engine_option(OPTION_RTAUDIO_SAMPLE_RATE, %i, \"%s\") - invalid value", value, valueStr); | return carla_stderr2("carla_set_engine_option(OPTION_RTAUDIO_SAMPLE_RATE, %i, \"%s\") - invalid value", value, valueStr); | ||||
| standalone.options.rtaudioSampleRate = static_cast<unsigned int>(value); | standalone.options.rtaudioSampleRate = static_cast<unsigned int>(value); | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_RTAUDIO_DEVICE: | |||||
| case CB::OPTION_RTAUDIO_DEVICE: | |||||
| standalone.options.rtaudioDevice = valueStr; | standalone.options.rtaudioDevice = valueStr; | ||||
| break; | break; | ||||
| #endif | #endif | ||||
| case CarlaBackend::OPTION_PATH_RESOURCES: | |||||
| case CB::OPTION_PATH_RESOURCES: | |||||
| standalone.options.resourceDir = valueStr; | standalone.options.resourceDir = valueStr; | ||||
| break; | break; | ||||
| #ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_NATIVE: | |||||
| case CB::OPTION_PATH_BRIDGE_NATIVE: | |||||
| standalone.options.bridge_native = valueStr; | standalone.options.bridge_native = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_POSIX32: | |||||
| case CB::OPTION_PATH_BRIDGE_POSIX32: | |||||
| standalone.options.bridge_posix32 = valueStr; | standalone.options.bridge_posix32 = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_POSIX64: | |||||
| case CB::OPTION_PATH_BRIDGE_POSIX64: | |||||
| standalone.options.bridge_posix64 = valueStr; | standalone.options.bridge_posix64 = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_WIN32: | |||||
| case CB::OPTION_PATH_BRIDGE_WIN32: | |||||
| standalone.options.bridge_win32 = valueStr; | standalone.options.bridge_win32 = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_WIN64: | |||||
| case CB::OPTION_PATH_BRIDGE_WIN64: | |||||
| standalone.options.bridge_win64 = valueStr; | standalone.options.bridge_win64 = valueStr; | ||||
| break; | break; | ||||
| #endif | #endif | ||||
| #ifdef WANT_LV2 | #ifdef WANT_LV2 | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK2: | |||||
| case CB::OPTION_PATH_BRIDGE_LV2_GTK2: | |||||
| standalone.options.bridge_lv2Gtk2 = valueStr; | standalone.options.bridge_lv2Gtk2 = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK3: | |||||
| case CB::OPTION_PATH_BRIDGE_LV2_GTK3: | |||||
| standalone.options.bridge_lv2Gtk3 = valueStr; | standalone.options.bridge_lv2Gtk3 = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT4: | |||||
| case CB::OPTION_PATH_BRIDGE_LV2_QT4: | |||||
| standalone.options.bridge_lv2Qt4 = valueStr; | standalone.options.bridge_lv2Qt4 = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT5: | |||||
| case CB::OPTION_PATH_BRIDGE_LV2_QT5: | |||||
| standalone.options.bridge_lv2Qt5 = valueStr; | standalone.options.bridge_lv2Qt5 = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_COCOA: | |||||
| case CB::OPTION_PATH_BRIDGE_LV2_COCOA: | |||||
| standalone.options.bridge_lv2Cocoa = valueStr; | standalone.options.bridge_lv2Cocoa = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_WINDOWS: | |||||
| case CB::OPTION_PATH_BRIDGE_LV2_WINDOWS: | |||||
| standalone.options.bridge_lv2Win = valueStr; | standalone.options.bridge_lv2Win = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_X11: | |||||
| case CB::OPTION_PATH_BRIDGE_LV2_X11: | |||||
| standalone.options.bridge_lv2X11 = valueStr; | standalone.options.bridge_lv2X11 = valueStr; | ||||
| break; | break; | ||||
| #endif | #endif | ||||
| #ifdef WANT_VST | #ifdef WANT_VST | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_VST_COCOA: | |||||
| case CB::OPTION_PATH_BRIDGE_VST_COCOA: | |||||
| standalone.options.bridge_vstCocoa = valueStr; | standalone.options.bridge_vstCocoa = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_VST_HWND: | |||||
| case CB::OPTION_PATH_BRIDGE_VST_HWND: | |||||
| standalone.options.bridge_vstHWND = valueStr; | standalone.options.bridge_vstHWND = valueStr; | ||||
| break; | break; | ||||
| case CarlaBackend::OPTION_PATH_BRIDGE_VST_X11: | |||||
| case CB::OPTION_PATH_BRIDGE_VST_X11: | |||||
| standalone.options.bridge_vstX11 = valueStr; | standalone.options.bridge_vstX11 = valueStr; | ||||
| break; | break; | ||||
| #endif | #endif | ||||
| @@ -834,7 +830,7 @@ const CarlaTransportInfo* carla_get_transport_info() | |||||
| bool carla_add_plugin(CarlaBinaryType btype, CarlaPluginType ptype, const char* filename, const char* const name, const char* label, const void* extraStuff) | bool carla_add_plugin(CarlaBinaryType btype, CarlaPluginType ptype, const char* filename, const char* const name, const char* label, const void* extraStuff) | ||||
| { | { | ||||
| carla_debug("carla_add_plugin(%s, %s, \"%s\", \"%s\", \"%s\", %p)", CarlaBackend::BinaryType2Str(btype), CarlaBackend::PluginType2Str(ptype), filename, name, label, extraStuff); | |||||
| carla_debug("carla_add_plugin(%s, %s, \"%s\", \"%s\", \"%s\", %p)", CB::BinaryType2Str(btype), CB::PluginType2Str(ptype), filename, name, label, extraStuff); | |||||
| CARLA_ASSERT(standalone.engine != nullptr); | CARLA_ASSERT(standalone.engine != nullptr); | ||||
| if (standalone.engine != nullptr && standalone.engine->isRunning()) | if (standalone.engine != nullptr && standalone.engine->isRunning()) | ||||
| @@ -961,8 +957,8 @@ const CarlaPluginInfo* carla_get_plugin_info(unsigned int pluginId) | |||||
| static CarlaPluginInfo info; | static CarlaPluginInfo info; | ||||
| // reset | // reset | ||||
| info.type = CarlaBackend::PLUGIN_NONE; | |||||
| info.category = CarlaBackend::PLUGIN_CATEGORY_NONE; | |||||
| info.type = CB::PLUGIN_NONE; | |||||
| info.category = CB::PLUGIN_CATEGORY_NONE; | |||||
| info.hints = 0x0; | info.hints = 0x0; | ||||
| info.hints = 0x0; | info.hints = 0x0; | ||||
| info.binary = nullptr; | info.binary = nullptr; | ||||
| @@ -1324,7 +1320,7 @@ const char* carla_get_chunk_data(unsigned int pluginId) | |||||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | ||||
| { | { | ||||
| if (plugin->options() & CarlaBackend::PLUGIN_OPTION_USE_CHUNKS) | |||||
| if (plugin->options() & CB::PLUGIN_OPTION_USE_CHUNKS) | |||||
| { | { | ||||
| void* data = nullptr; | void* data = nullptr; | ||||
| const int32_t dataSize = plugin->chunkData(&data); | const int32_t dataSize = plugin->chunkData(&data); | ||||
| @@ -1880,7 +1876,7 @@ void carla_set_chunk_data(unsigned int pluginId, const char* chunkData) | |||||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | ||||
| { | { | ||||
| if (plugin->options() & CarlaBackend::PLUGIN_OPTION_USE_CHUNKS) | |||||
| if (plugin->options() & CB::PLUGIN_OPTION_USE_CHUNKS) | |||||
| return plugin->setChunkData(chunkData); | return plugin->setChunkData(chunkData); | ||||
| carla_stderr2("carla_set_chunk_data(%i, \"%s\") - plugin does not support chunks", pluginId, chunkData); | carla_stderr2("carla_set_chunk_data(%i, \"%s\") - plugin does not support chunks", pluginId, chunkData); | ||||
| @@ -2099,7 +2095,7 @@ protected: | |||||
| carla_msleep(100); | carla_msleep(100); | ||||
| if (std::strcmp(method, "/nsm/server/announce") == 0 && standalone.callback != nullptr) | if (std::strcmp(method, "/nsm/server/announce") == 0 && standalone.callback != nullptr) | ||||
| standalone.callback(standalone.callbackPtr, CarlaBackend::CALLBACK_NSM_ANNOUNCE, 0, 0, 0, 0.0f, smName); | |||||
| standalone.callback(standalone.callbackPtr, CB::CALLBACK_NSM_ANNOUNCE, 0, 0, 0, 0.0f, smName); | |||||
| return 0; | return 0; | ||||
| @@ -2132,7 +2128,7 @@ protected: | |||||
| fIsOpened = false; | fIsOpened = false; | ||||
| standalone.callback(nullptr, CarlaBackend::CALLBACK_NSM_OPEN, 0, 0, 0, 0.0f, data); | |||||
| standalone.callback(nullptr, CB::CALLBACK_NSM_OPEN, 0, 0, 0, 0.0f, data); | |||||
| // wait max 10 secs to open | // wait max 10 secs to open | ||||
| for (int i=0; i < 100 && ! fIsOpened; ++i) | for (int i=0; i < 100 && ! fIsOpened; ++i) | ||||
| @@ -2167,7 +2163,7 @@ protected: | |||||
| fIsSaved = false; | fIsSaved = false; | ||||
| standalone.callback(nullptr, CarlaBackend::CALLBACK_NSM_SAVE, 0, 0, 0, 0.0f, nullptr); | |||||
| standalone.callback(nullptr, CB::CALLBACK_NSM_SAVE, 0, 0, 0, 0.0f, nullptr); | |||||
| // wait max 10 secs to save | // wait max 10 secs to save | ||||
| for (int i=0; i < 100 && ! fIsSaved; ++i) | for (int i=0; i < 100 && ! fIsSaved; ++i) | ||||
| @@ -2272,18 +2268,18 @@ bool carla_engine_init_bridge(const char* audioBaseName, const char* controlBase | |||||
| if (standalone.callback != nullptr) | if (standalone.callback != nullptr) | ||||
| standalone.engine->setCallback(standalone.callback, nullptr); | standalone.engine->setCallback(standalone.callback, nullptr); | ||||
| standalone.engine->setOption(CarlaBackend::OPTION_PROCESS_MODE, CarlaBackend::PROCESS_MODE_BRIDGE, nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_TRANSPORT_MODE, CarlaBackend::TRANSPORT_MODE_BRIDGE, nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PREFER_PLUGIN_BRIDGES, false, nullptr); | |||||
| standalone.engine->setOption(CarlaBackend::OPTION_PREFER_UI_BRIDGES, false, nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_PROCESS_MODE, CB::PROCESS_MODE_BRIDGE, nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_TRANSPORT_MODE, CB::TRANSPORT_MODE_BRIDGE, nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_PREFER_PLUGIN_BRIDGES, false, nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_PREFER_UI_BRIDGES, false, nullptr); | |||||
| // TODO - read from environment | // TODO - read from environment | ||||
| #if 0 | #if 0 | ||||
| standalone.engine->setOption(CarlaBackend::OPTION_FORCE_STEREO, standalone.options.forceStereo ? 1 : 0, nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_FORCE_STEREO, standalone.options.forceStereo ? 1 : 0, nullptr); | |||||
| # ifdef WANT_DSSI | # ifdef WANT_DSSI | ||||
| standalone.engine->setOption(CarlaBackend::OPTION_USE_DSSI_VST_CHUNKS, standalone.options.useDssiVstChunks ? 1 : 0, nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_USE_DSSI_VST_CHUNKS, standalone.options.useDssiVstChunks ? 1 : 0, nullptr); | |||||
| # endif | # endif | ||||
| standalone.engine->setOption(CarlaBackend::OPTION_MAX_PARAMETERS, static_cast<int>(standalone.options.maxParameters), nullptr); | |||||
| standalone.engine->setOption(CB::OPTION_MAX_PARAMETERS, static_cast<int>(standalone.options.maxParameters), nullptr); | |||||
| #endif | #endif | ||||
| if (standalone.engine->init(clientName)) | if (standalone.engine->init(clientName)) | ||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __CARLA_BRIDGE_HPP__ | |||||
| #define __CARLA_BRIDGE_HPP__ | |||||
| #ifndef CARLA_BRIDGE_HPP_INCLUDED | |||||
| #define CARLA_BRIDGE_HPP_INCLUDED | |||||
| #include "CarlaDefines.hpp" | #include "CarlaDefines.hpp" | ||||
| @@ -32,4 +32,4 @@ class CarlaBridgeToolkit; | |||||
| CARLA_BRIDGE_END_NAMESPACE | CARLA_BRIDGE_END_NAMESPACE | ||||
| #endif // __CARLA_BRIDGE_HPP__ | |||||
| #endif // CARLA_BRIDGE_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __CARLA_BRIDGE_CLIENT_HPP__ | |||||
| #define __CARLA_BRIDGE_CLIENT_HPP__ | |||||
| #ifndef CARLA_BRIDGE_CLIENT_HPP_INCLUDED | |||||
| #define CARLA_BRIDGE_CLIENT_HPP_INCLUDED | |||||
| #include "CarlaBridgeOsc.hpp" | #include "CarlaBridgeOsc.hpp" | ||||
| @@ -174,4 +174,4 @@ private: | |||||
| CARLA_BRIDGE_END_NAMESPACE | CARLA_BRIDGE_END_NAMESPACE | ||||
| #endif // __CARLA_BRIDGE_CLIENT_HPP__ | |||||
| #endif // CARLA_BRIDGE_CLIENT_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __CARLA_BRIDGE_OSC_HPP__ | |||||
| #define __CARLA_BRIDGE_OSC_HPP__ | |||||
| #ifndef CARLA_BRIDGE_OSC_HPP_INCLUDED | |||||
| #define CARLA_BRIDGE_OSC_HPP_INCLUDED | |||||
| #include "CarlaBridge.hpp" | #include "CarlaBridge.hpp" | ||||
| #include "CarlaOscUtils.hpp" | #include "CarlaOscUtils.hpp" | ||||
| @@ -138,4 +138,4 @@ private: | |||||
| CARLA_BRIDGE_END_NAMESPACE | CARLA_BRIDGE_END_NAMESPACE | ||||
| #endif // __CARLA_BRIDGE_OSC_HPP__ | |||||
| #endif // CARLA_BRIDGE_OSC_HPP_INCLUDED | |||||
| @@ -15,8 +15,8 @@ | |||||
| * For a full copy of the GNU General Public License see the GPL.txt file | * For a full copy of the GNU General Public License see the GPL.txt file | ||||
| */ | */ | ||||
| #ifndef __CARLA_BRIDGE_TOOLKIT_HPP__ | |||||
| #define __CARLA_BRIDGE_TOOLKIT_HPP__ | |||||
| #ifndef CARLA_BRIDGE_TOOLKIT_HPP_INCLUDED | |||||
| #define CARLA_BRIDGE_TOOLKIT_HPP_INCLUDED | |||||
| #include "CarlaBridge.hpp" | #include "CarlaBridge.hpp" | ||||
| #include "CarlaJuceUtils.hpp" | #include "CarlaJuceUtils.hpp" | ||||
| @@ -203,10 +203,10 @@ OPTION_TRANSPORT_MODE = 2 | |||||
| OPTION_FORCE_STEREO = 3 | OPTION_FORCE_STEREO = 3 | ||||
| OPTION_PREFER_PLUGIN_BRIDGES = 4 | OPTION_PREFER_PLUGIN_BRIDGES = 4 | ||||
| OPTION_PREFER_UI_BRIDGES = 5 | OPTION_PREFER_UI_BRIDGES = 5 | ||||
| OPTION_USE_DSSI_VST_CHUNKS = 6 | |||||
| OPTION_MAX_PARAMETERS = 7 | |||||
| OPTION_UI_BRIDGES_TIMEOUT = 8 | |||||
| OPTION_JACK_AUTOCONNECT = 9 | |||||
| OPTION_UIS_ALWAYS_ON_TOP = 6 | |||||
| OPTION_USE_DSSI_VST_CHUNKS = 7 | |||||
| OPTION_MAX_PARAMETERS = 8 | |||||
| OPTION_UI_BRIDGES_TIMEOUT = 9 | |||||
| OPTION_RTAUDIO_NUMBER_PERIODS = 10 | OPTION_RTAUDIO_NUMBER_PERIODS = 10 | ||||
| OPTION_RTAUDIO_BUFFER_SIZE = 11 | OPTION_RTAUDIO_BUFFER_SIZE = 11 | ||||
| OPTION_RTAUDIO_SAMPLE_RATE = 12 | OPTION_RTAUDIO_SAMPLE_RATE = 12 | ||||
| @@ -109,6 +109,16 @@ | |||||
| # define BINARY_NATIVE BINARY_OTHER | # define BINARY_NATIVE BINARY_OTHER | ||||
| #endif | #endif | ||||
| // Define CARLA_DECLARE_NON_COPY_STRUCT | |||||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||||
| # define CARLA_DECLARE_NON_COPY_STRUCT(StructName) \ | |||||
| StructName(StructName&) = delete; \ | |||||
| StructName(const StructName&) = delete; \ | |||||
| StructName& operator=(const StructName&) = delete; | |||||
| #else | |||||
| # define CARLA_DECLARE_NON_COPY_STRUCT(StructName) | |||||
| #endif | |||||
| // Define CARLA_SAFE_ASSERT* | // Define CARLA_SAFE_ASSERT* | ||||
| #define CARLA_SAFE_ASSERT(cond) if (cond) pass(); else carla_assert (#cond, __FILE__, __LINE__); | #define CARLA_SAFE_ASSERT(cond) if (cond) pass(); else carla_assert (#cond, __FILE__, __LINE__); | ||||
| #define CARLA_SAFE_ASSERT_INT(cond, value) if (cond) pass(); else carla_assert_int (#cond, __FILE__, __LINE__, value); | #define CARLA_SAFE_ASSERT_INT(cond, value) if (cond) pass(); else carla_assert_int (#cond, __FILE__, __LINE__, value); | ||||
| @@ -28,7 +28,7 @@ | |||||
| #define MIDI_STATUS_POLYPHONIC_AFTERTOUCH 0xA0 // note (0-127), pressure (0-127) | #define MIDI_STATUS_POLYPHONIC_AFTERTOUCH 0xA0 // note (0-127), pressure (0-127) | ||||
| #define MIDI_STATUS_CONTROL_CHANGE 0xB0 // see 'Control Change Messages List' | #define MIDI_STATUS_CONTROL_CHANGE 0xB0 // see 'Control Change Messages List' | ||||
| #define MIDI_STATUS_PROGRAM_CHANGE 0xC0 // program (0-127), none | #define MIDI_STATUS_PROGRAM_CHANGE 0xC0 // program (0-127), none | ||||
| #define MIDI_STATUS_AFTERTOUCH 0xD0 // pressure (0-127), none | |||||
| #define MIDI_STATUS_CHANNEL_PRESSURE 0xD0 // pressure (0-127), none | |||||
| #define MIDI_STATUS_PITCH_WHEEL_CONTROL 0xE0 // LSB (0-127), MSB (0-127) | #define MIDI_STATUS_PITCH_WHEEL_CONTROL 0xE0 // LSB (0-127), MSB (0-127) | ||||
| #define MIDI_IS_STATUS_NOTE_OFF(status) (((status) & 0xF0) == MIDI_STATUS_NOTE_OFF) | #define MIDI_IS_STATUS_NOTE_OFF(status) (((status) & 0xF0) == MIDI_STATUS_NOTE_OFF) | ||||
| @@ -1 +0,0 @@ | |||||
| ../libs/distrho/dgl/ | |||||
| @@ -18,7 +18,7 @@ | |||||
| #ifndef LADSPA_RDF_HPP_INCLUDED | #ifndef LADSPA_RDF_HPP_INCLUDED | ||||
| #define LADSPA_RDF_HPP_INCLUDED | #define LADSPA_RDF_HPP_INCLUDED | ||||
| #include "CarlaJuceUtils.hpp" | |||||
| #include "CarlaDefines.hpp" | |||||
| // Base Types | // Base Types | ||||
| typedef float LADSPA_Data; | typedef float LADSPA_Data; | ||||
| @@ -1 +1 @@ | |||||
| ../libs/lilv/lilv-0.16.0/lilv | |||||
| ../modules/lilv/lilv-0.16.0/lilv | |||||
| @@ -18,7 +18,7 @@ | |||||
| #ifndef LV2_RDF_HPP_INCLUDED | #ifndef LV2_RDF_HPP_INCLUDED | ||||
| #define LV2_RDF_HPP_INCLUDED | #define LV2_RDF_HPP_INCLUDED | ||||
| #include "CarlaJuceUtils.hpp" | |||||
| #include "CarlaDefines.hpp" | |||||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | #ifdef CARLA_PROPER_CPP11_SUPPORT | ||||
| # include <cstdint> | # include <cstdint> | ||||
| @@ -1 +0,0 @@ | |||||
| ../libs/rtmempool | |||||
| @@ -1 +0,0 @@ | |||||
| ../libs/lilv/serd-0.18.2/serd | |||||
| @@ -1 +0,0 @@ | |||||
| ../libs/lilv/sord-0.12.0/sord | |||||
| @@ -1 +0,0 @@ | |||||
| ../libs/lilv/sratom-0.4.2/sratom | |||||
| @@ -1,72 +0,0 @@ | |||||
| #!/usr/bin/make -f | |||||
| # Makefile for carla libs # | |||||
| # ----------------------- # | |||||
| # Created by falkTX | |||||
| # | |||||
| all: | |||||
| # -------------------------------------------------------------- | |||||
| dgl: | |||||
| $(MAKE) -C distrho/dgl | |||||
| dgl_%: | |||||
| $(MAKE) -C distrho/dgl $* | |||||
| # -------------------------------------------------------------- | |||||
| lilv: | |||||
| $(MAKE) -C lilv | |||||
| lilv_%: | |||||
| $(MAKE) -C lilv $* | |||||
| # -------------------------------------------------------------- | |||||
| rtmempool: | |||||
| $(MAKE) -C rtmempool | |||||
| rtmempool_%: | |||||
| $(MAKE) -C rtmempool $* | |||||
| # -------------------------------------------------------------- | |||||
| theme: | |||||
| $(MAKE) -C ../theme | |||||
| theme_%: | |||||
| $(MAKE) -C ../theme $* | |||||
| # -------------------------------------------------------------- | |||||
| widgets: | |||||
| $(MAKE) -C ../widgets | |||||
| # -------------------------------------------------------------- | |||||
| jackbridge-win32: | |||||
| $(MAKE) -C jackbridge win32 | |||||
| jackbridge-win64: | |||||
| $(MAKE) -C jackbridge win64 | |||||
| jackbridge-wine32: | |||||
| $(MAKE) -C jackbridge wine32 | |||||
| jackbridge-wine64: | |||||
| $(MAKE) -C jackbridge wine64 | |||||
| # -------------------------------------------------------------- | |||||
| clean: | |||||
| rm -f *.a *.def *.dll *.dylib *.so | |||||
| $(MAKE) clean -C distrho/dgl | |||||
| $(MAKE) clean -C lilv | |||||
| $(MAKE) clean -C rtmempool | |||||
| $(MAKE) clean -C ../theme | |||||
| $(MAKE) clean -C ../widgets | |||||
| # -------------------------------------------------------------- | |||||
| .PHONY: lilv rtmempool | |||||
| @@ -8,8 +8,8 @@ include ../../../Makefile.mk | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| BUILD_C_FLAGS += -fvisibility=hidden -fPIC | |||||
| BUILD_CXX_FLAGS += -fvisibility=hidden -fPIC -I. | |||||
| BUILD_C_FLAGS += -I. | |||||
| BUILD_CXX_FLAGS += -I. | |||||
| OBJS = \ | OBJS = \ | ||||
| src/App.cpp.o \ | src/App.cpp.o \ | ||||
| @@ -0,0 +1,365 @@ | |||||
| /* | |||||
| * DISTRHO Plugin Toolkit (DPT) | |||||
| * Copyright (C) 2012-2013 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Lesser General Public License for more details. | |||||
| * | |||||
| * For a full copy of the license see the LGPL.txt file | |||||
| */ | |||||
| #ifdef DISTRHO_PLUGIN_TARGET_JACK | |||||
| #include "DistrhoDefines.h" | |||||
| #if ! DISTRHO_PLUGIN_HAS_UI | |||||
| # error Standalone JACK mode requires UI | |||||
| #endif | |||||
| #include "DistrhoPluginInternal.h" | |||||
| #include "DistrhoUIInternal.h" | |||||
| #include <jack/jack.h> | |||||
| #include <jack/midiport.h> | |||||
| #include <jack/transport.h> | |||||
| #include <QtCore/QSettings> | |||||
| #include <QtGui/QApplication> | |||||
| #include <QtGui/QMainWindow> | |||||
| #include <QtGui/QMessageBox> | |||||
| // ------------------------------------------------- | |||||
| START_NAMESPACE_DISTRHO | |||||
| class PluginJack : public QMainWindow | |||||
| { | |||||
| public: | |||||
| PluginJack(jack_client_t* client_) | |||||
| : QMainWindow(nullptr), | |||||
| widget(this), | |||||
| settings("DISTRHO", DISTRHO_PLUGIN_NAME), | |||||
| ui(this, widget.winId(), setParameterCallback, setStateCallback, nullptr, uiNoteCallback, uiResizeCallback), | |||||
| client(client_) | |||||
| { | |||||
| setCentralWidget(&widget); | |||||
| setFixedSize(ui.getWidth(), ui.getHeight()); | |||||
| setWindowTitle(DISTRHO_PLUGIN_NAME); | |||||
| if (DISTRHO_PLUGIN_NUM_INPUTS > 0) | |||||
| { | |||||
| portsIn = new jack_port_t* [DISTRHO_PLUGIN_NUM_INPUTS]; | |||||
| for (int i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; i++) | |||||
| portsIn[i] = jack_port_register(client, d_string("Audio Input ") + d_string(i+1), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); | |||||
| } | |||||
| else | |||||
| portsIn = nullptr; | |||||
| if (DISTRHO_PLUGIN_NUM_OUTPUTS > 0) | |||||
| { | |||||
| portsOut = new jack_port_t* [DISTRHO_PLUGIN_NUM_OUTPUTS]; | |||||
| for (int i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; i++) | |||||
| portsOut[i] = jack_port_register(client, d_string("Audio Output ") + d_string(i+1), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); | |||||
| } | |||||
| else | |||||
| portsOut = nullptr; | |||||
| #if DISTRHO_PLUGIN_IS_SYNTH | |||||
| portMidi = jack_port_register(client, "Midi Input", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); | |||||
| #endif | |||||
| jack_set_process_callback(client, jackProcessCallback, this); | |||||
| uiTimer = startTimer(30); | |||||
| // load settings | |||||
| restoreGeometry(settings.value("Global/Geometry", QByteArray()).toByteArray()); | |||||
| for (uint32_t i=0; i < plugin.parameterCount(); i++) | |||||
| { | |||||
| bool ok; | |||||
| float value = settings.value(QString("Parameters/%1").arg(i)).toFloat(&ok); | |||||
| if (ok) | |||||
| { | |||||
| plugin.setParameterValue(i, value); | |||||
| ui.parameterChanged(i, value); | |||||
| } | |||||
| } | |||||
| #if DISTRHO_PLUGIN_WANT_STATE | |||||
| for (uint32_t i=0; i < plugin.stateCount(); i++) | |||||
| { | |||||
| const char* key = plugin.stateKey(i); | |||||
| QString stringValue(settings.value(key).toString()); | |||||
| if (! stringValue.isEmpty()) | |||||
| ui.stateChanged(key, stringValue.toUtf8().constData()); | |||||
| } | |||||
| #endif | |||||
| } | |||||
| ~PluginJack() | |||||
| { | |||||
| // save settings | |||||
| settings.setValue("Global/Geometry", saveGeometry()); | |||||
| if (uiTimer) | |||||
| killTimer(uiTimer); | |||||
| if (portsIn) | |||||
| delete[] portsIn; | |||||
| if (portsOut) | |||||
| delete[] portsOut; | |||||
| } | |||||
| // --------------------------------------------- | |||||
| protected: | |||||
| void setParameterValue(uint32_t index, float value) | |||||
| { | |||||
| plugin.setParameterValue(index, value); | |||||
| settings.setValue(QString("Parameters/%1").arg(index), value); | |||||
| } | |||||
| #if DISTRHO_PLUGIN_WANT_STATE | |||||
| void setState(const char* key, const char* value) | |||||
| { | |||||
| plugin.setState(key, value); | |||||
| settings.setValue(key, value); | |||||
| } | |||||
| #endif | |||||
| #if DISTRHO_PLUGIN_IS_SYNTH | |||||
| void uiNote(bool onOff, uint8_t channel, uint8_t note, uint8_t velocity) | |||||
| { | |||||
| // TODO | |||||
| } | |||||
| #endif | |||||
| void uiResize(unsigned int width, unsigned int height) | |||||
| { | |||||
| widget.setFixedSize(width, height); | |||||
| setFixedSize(width, height); | |||||
| } | |||||
| int jackProcess(jack_nframes_t nframes) | |||||
| { | |||||
| if (nframes <= 1) | |||||
| return 1; | |||||
| // Check for updated bufferSize | |||||
| if (nframes != d_lastBufferSize) | |||||
| { | |||||
| d_lastBufferSize = nframes; | |||||
| plugin.setBufferSize(nframes, true); | |||||
| } | |||||
| const float* ins[DISTRHO_PLUGIN_NUM_INPUTS]; | |||||
| float* outs[DISTRHO_PLUGIN_NUM_OUTPUTS]; | |||||
| for (int i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; i++) | |||||
| ins[i] = (float*)jack_port_get_buffer(portsIn[i], nframes); | |||||
| for (int i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; i++) | |||||
| outs[i] = (float*)jack_port_get_buffer(portsOut[i], nframes); | |||||
| #if DISTRHO_PLUGIN_IS_SYNTH | |||||
| uint32_t midiEventCount = 0; | |||||
| void* mIn = jack_port_get_buffer(portMidi, nframes); | |||||
| // TODO | |||||
| plugin.run(ins, outs, nframes, midiEventCount, midiEvents); | |||||
| #else | |||||
| plugin.run(ins, outs, nframes, 0, nullptr); | |||||
| #endif | |||||
| return 0; | |||||
| } | |||||
| // --------------------------------------------- | |||||
| void closeEvent(QCloseEvent* event) | |||||
| { | |||||
| QMainWindow::closeEvent(event); | |||||
| qApp->quit(); | |||||
| } | |||||
| void timerEvent(QTimerEvent* event) | |||||
| { | |||||
| if (event->timerId() == uiTimer) | |||||
| ui.idle(); | |||||
| QMainWindow::timerEvent(event); | |||||
| } | |||||
| // --------------------------------------------- | |||||
| private: | |||||
| // Qt4 stuff | |||||
| int uiTimer; | |||||
| QWidget widget; | |||||
| QSettings settings; | |||||
| PluginInternal plugin; | |||||
| UIInternal ui; | |||||
| jack_client_t* const client; | |||||
| jack_port_t** portsIn; | |||||
| jack_port_t** portsOut; | |||||
| #if DISTRHO_PLUGIN_IS_SYNTH | |||||
| jack_port_t* portMidi; | |||||
| MidiEvent midiEvents[MAX_MIDI_EVENTS]; | |||||
| #endif | |||||
| // --------------------------------------------- | |||||
| // Callbacks | |||||
| static void setParameterCallback(void* ptr, uint32_t index, float value) | |||||
| { | |||||
| PluginJack* _this_ = (PluginJack*)ptr; | |||||
| assert(_this_); | |||||
| _this_->setParameterValue(index, value); | |||||
| } | |||||
| static void setStateCallback(void* ptr, const char* key, const char* value) | |||||
| { | |||||
| #if DISTRHO_PLUGIN_WANT_STATE | |||||
| PluginJack* _this_ = (PluginJack*)ptr; | |||||
| assert(_this_); | |||||
| _this_->setState(key, value); | |||||
| #else | |||||
| Q_UNUSED(ptr); | |||||
| Q_UNUSED(key); | |||||
| Q_UNUSED(value); | |||||
| #endif | |||||
| } | |||||
| static void uiNoteCallback(void* ptr, bool onOff, uint8_t channel, uint8_t note, uint8_t velocity) | |||||
| { | |||||
| #if DISTRHO_PLUGIN_IS_SYNTH | |||||
| PluginJack* _this_ = (PluginJack*)ptr; | |||||
| assert(_this_); | |||||
| _this_->uiNote(onOff, channel, note, velocity); | |||||
| #else | |||||
| Q_UNUSED(ptr); | |||||
| Q_UNUSED(onOff); | |||||
| Q_UNUSED(channel); | |||||
| Q_UNUSED(note); | |||||
| Q_UNUSED(velocity); | |||||
| #endif | |||||
| } | |||||
| static void uiResizeCallback(void* ptr, unsigned int width, unsigned int height) | |||||
| { | |||||
| PluginJack* _this_ = (PluginJack*)ptr; | |||||
| assert(_this_); | |||||
| _this_->uiResize(width, height); | |||||
| } | |||||
| static int jackProcessCallback(jack_nframes_t nframes, void* arg) | |||||
| { | |||||
| PluginJack* _this_ = (PluginJack*)arg; | |||||
| assert(_this_); | |||||
| return _this_->jackProcess(nframes); | |||||
| } | |||||
| }; | |||||
| // ------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | |||||
| // ------------------------------------------------- | |||||
| std::string jack_status_get_error_string(const jack_status_t& status) | |||||
| { | |||||
| std::string errorString; | |||||
| if (status & JackFailure) | |||||
| errorString += "Overall operation failed;\n"; | |||||
| if (status & JackInvalidOption) | |||||
| errorString += "The operation contained an invalid or unsupported option;\n"; | |||||
| if (status & JackNameNotUnique) | |||||
| errorString += "The desired client name was not unique;\n"; | |||||
| if (status & JackServerStarted) | |||||
| errorString += "The JACK server was started as a result of this operation;\n"; | |||||
| if (status & JackServerFailed) | |||||
| errorString += "Unable to connect to the JACK server;\n"; | |||||
| if (status & JackServerError) | |||||
| errorString += "Communication error with the JACK server;\n"; | |||||
| if (status & JackNoSuchClient) | |||||
| errorString += "Requested client does not exist;\n"; | |||||
| if (status & JackLoadFailure) | |||||
| errorString += "Unable to load internal client;\n"; | |||||
| if (status & JackInitFailure) | |||||
| errorString += "Unable to initialize client;\n"; | |||||
| if (status & JackShmFailure) | |||||
| errorString += "Unable to access shared memory;\n"; | |||||
| if (status & JackVersionError) | |||||
| errorString += "Client's protocol version does not match;\n"; | |||||
| if (status & JackBackendError) | |||||
| errorString += "Backend Error;\n"; | |||||
| if (status & JackClientZombie) | |||||
| errorString += "Client is being shutdown against its will;\n"; | |||||
| if (errorString.size() > 0) | |||||
| errorString.replace(errorString.size()-2, 2, "."); | |||||
| return errorString; | |||||
| } | |||||
| int main(int argc, char* argv[]) | |||||
| { | |||||
| USE_NAMESPACE_DISTRHO | |||||
| QApplication app(argc, argv, true); | |||||
| jack_status_t status; | |||||
| jack_client_t* client = jack_client_open(DISTRHO_PLUGIN_NAME, JackNullOption, &status); | |||||
| if (! client) | |||||
| { | |||||
| std::string errorString(jack_status_get_error_string(status)); | |||||
| QMessageBox::critical(nullptr, app.translate(DISTRHO_PLUGIN_NAME, "Error"), | |||||
| app.translate(DISTRHO_PLUGIN_NAME, | |||||
| "Could not connect to JACK, possible reasons:\n" | |||||
| "%1").arg(QString::fromStdString(errorString))); | |||||
| return 1; | |||||
| } | |||||
| d_lastBufferSize = jack_get_buffer_size(client); | |||||
| d_lastSampleRate = jack_get_sample_rate(client); | |||||
| setLastUiSampleRate(d_lastSampleRate); | |||||
| PluginJack plugin(client); | |||||
| plugin.show(); | |||||
| jack_activate(client); | |||||
| int ret = app.exec(); | |||||
| jack_deactivate(client); | |||||
| jack_client_close(client); | |||||
| return ret; | |||||
| } | |||||
| // ------------------------------------------------- | |||||
| #endif // DISTRHO_PLUGIN_TARGET_JACK | |||||