| @@ -62,8 +62,7 @@ static const NativePluginDescriptor carlaRackDesc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -80,7 +79,7 @@ static const NativePluginDescriptor carlaRackDesc = { | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr | |||
| nullptr, nullptr, nullptr, nullptr | |||
| }; | |||
| static const NativePluginDescriptor carlaPatchbayDesc = { | |||
| @@ -88,8 +87,7 @@ static const NativePluginDescriptor carlaPatchbayDesc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -106,7 +104,7 @@ static const NativePluginDescriptor carlaPatchbayDesc = { | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr | |||
| nullptr, nullptr, nullptr, nullptr | |||
| }; | |||
| static const NativePluginDescriptor carlaPatchbay3sDesc = { | |||
| @@ -114,8 +112,7 @@ static const NativePluginDescriptor carlaPatchbay3sDesc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -132,7 +129,7 @@ static const NativePluginDescriptor carlaPatchbay3sDesc = { | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr | |||
| nullptr, nullptr, nullptr, nullptr | |||
| }; | |||
| static const NativePluginDescriptor carlaPatchbay16Desc = { | |||
| @@ -140,8 +137,7 @@ static const NativePluginDescriptor carlaPatchbay16Desc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -158,7 +154,7 @@ static const NativePluginDescriptor carlaPatchbay16Desc = { | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr | |||
| nullptr, nullptr, nullptr, nullptr | |||
| }; | |||
| static const NativePluginDescriptor carlaPatchbay32Desc = { | |||
| @@ -166,8 +162,7 @@ static const NativePluginDescriptor carlaPatchbay32Desc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -184,7 +179,7 @@ static const NativePluginDescriptor carlaPatchbay32Desc = { | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
| nullptr, nullptr, nullptr, nullptr, nullptr | |||
| nullptr, nullptr, nullptr, nullptr | |||
| }; | |||
| static LinkedList<const NativePluginDescriptor*> gPluginDescriptors; | |||
| @@ -430,7 +425,7 @@ const CarlaCachedPluginInfo* carla_get_cached_plugin_info(CB::PluginType ptype, | |||
| info.hints |= CB::PLUGIN_HAS_CUSTOM_UI; | |||
| if (desc->hints & NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS) | |||
| info.hints |= CB::PLUGIN_NEEDS_FIXED_BUFFERS; | |||
| if (desc->hints & NATIVE_PLUGIN_NEEDS_SINGLE_THREAD) | |||
| if (desc->hints & NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD) | |||
| info.hints |= CB::PLUGIN_NEEDS_UI_MAIN_THREAD; | |||
| info.audioIns = desc->audioIns; | |||
| @@ -1450,6 +1450,25 @@ protected: | |||
| void uiIdle() | |||
| { | |||
| for (uint i=0; i < pData->curPluginCount; ++i) | |||
| { | |||
| CarlaPlugin* const plugin(pData->plugins[i].plugin); | |||
| if (plugin != nullptr && plugin->isEnabled()) | |||
| { | |||
| const uint hints(plugin->getHints()); | |||
| if ((hints & PLUGIN_HAS_CUSTOM_UI) != 0 && (hints & PLUGIN_NEEDS_UI_MAIN_THREAD) != 0) | |||
| { | |||
| try { | |||
| plugin->uiIdle(); | |||
| } CARLA_SAFE_EXCEPTION_CONTINUE("Plugin uiIdle"); | |||
| } | |||
| } | |||
| } | |||
| pData->osc.idle(); | |||
| fUiServer.idlePipe(); | |||
| if (fUiServer.isPipeRunning()) | |||
| @@ -1584,11 +1603,6 @@ public: | |||
| delete handlePtr; | |||
| } | |||
| static void _idle(NativePluginHandle handle) | |||
| { | |||
| handlePtr->idle(); | |||
| } | |||
| static uint32_t _get_parameter_count(NativePluginHandle handle) | |||
| { | |||
| return handlePtr->getParameterCount(); | |||
| @@ -1737,8 +1751,7 @@ static const NativePluginDescriptor carlaRackDesc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -1754,7 +1767,6 @@ static const NativePluginDescriptor carlaRackDesc = { | |||
| /* copyright */ "GNU GPL v2+", | |||
| CarlaEngineNative::_instantiateRack, | |||
| CarlaEngineNative::_cleanup, | |||
| CarlaEngineNative::_idle, | |||
| CarlaEngineNative::_get_parameter_count, | |||
| CarlaEngineNative::_get_parameter_info, | |||
| CarlaEngineNative::_get_parameter_value, | |||
| @@ -1782,8 +1794,7 @@ static const NativePluginDescriptor carlaPatchbayDesc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -1799,7 +1810,6 @@ static const NativePluginDescriptor carlaPatchbayDesc = { | |||
| /* copyright */ "GNU GPL v2+", | |||
| CarlaEngineNative::_instantiatePatchbay, | |||
| CarlaEngineNative::_cleanup, | |||
| CarlaEngineNative::_idle, | |||
| CarlaEngineNative::_get_parameter_count, | |||
| CarlaEngineNative::_get_parameter_info, | |||
| CarlaEngineNative::_get_parameter_value, | |||
| @@ -1827,8 +1837,7 @@ static const NativePluginDescriptor carlaPatchbay3sDesc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -1844,7 +1853,6 @@ static const NativePluginDescriptor carlaPatchbay3sDesc = { | |||
| /* copyright */ "GNU GPL v2+", | |||
| CarlaEngineNative::_instantiatePatchbay3s, | |||
| CarlaEngineNative::_cleanup, | |||
| CarlaEngineNative::_idle, | |||
| CarlaEngineNative::_get_parameter_count, | |||
| CarlaEngineNative::_get_parameter_info, | |||
| CarlaEngineNative::_get_parameter_value, | |||
| @@ -1872,8 +1880,7 @@ static const NativePluginDescriptor carlaPatchbay16Desc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -1889,7 +1896,6 @@ static const NativePluginDescriptor carlaPatchbay16Desc = { | |||
| /* copyright */ "GNU GPL v2+", | |||
| CarlaEngineNative::_instantiatePatchbay16, | |||
| CarlaEngineNative::_cleanup, | |||
| CarlaEngineNative::_idle, | |||
| CarlaEngineNative::_get_parameter_count, | |||
| CarlaEngineNative::_get_parameter_info, | |||
| CarlaEngineNative::_get_parameter_value, | |||
| @@ -1917,8 +1923,7 @@ static const NativePluginDescriptor carlaPatchbay32Desc = { | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH | |||
| |NATIVE_PLUGIN_HAS_UI | |||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||
| |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD | |||
| |NATIVE_PLUGIN_NEEDS_DSP_IDLE | |||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD | |||
| |NATIVE_PLUGIN_USES_STATE | |||
| |NATIVE_PLUGIN_USES_TIME), | |||
| /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), | |||
| @@ -1934,7 +1939,6 @@ static const NativePluginDescriptor carlaPatchbay32Desc = { | |||
| /* copyright */ "GNU GPL v2+", | |||
| CarlaEngineNative::_instantiatePatchbay32, | |||
| CarlaEngineNative::_cleanup, | |||
| CarlaEngineNative::_idle, | |||
| CarlaEngineNative::_get_parameter_count, | |||
| CarlaEngineNative::_get_parameter_info, | |||
| CarlaEngineNative::_get_parameter_value, | |||
| @@ -769,17 +769,6 @@ public: | |||
| } | |||
| } | |||
| void idle() override | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| if (fDescriptor->idle != nullptr && (fDescriptor->hints & ::NATIVE_PLUGIN_NEEDS_DSP_IDLE) != 0) | |||
| fDescriptor->idle(fHandle); | |||
| CarlaPlugin::idle(); | |||
| } | |||
| void uiIdle() override | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| @@ -1157,7 +1146,7 @@ public: | |||
| pData->hints |= PLUGIN_HAS_CUSTOM_UI; | |||
| if (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS) | |||
| pData->hints |= PLUGIN_NEEDS_FIXED_BUFFERS; | |||
| if (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_SINGLE_THREAD) | |||
| if (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD) | |||
| pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD; | |||
| // extra plugin hints | |||
| @@ -53,18 +53,17 @@ typedef enum { | |||
| } NativePluginCategory; | |||
| typedef enum { | |||
| NATIVE_PLUGIN_IS_RTSAFE = 1 << 0, | |||
| NATIVE_PLUGIN_IS_SYNTH = 1 << 1, | |||
| NATIVE_PLUGIN_HAS_UI = 1 << 2, | |||
| NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS = 1 << 3, | |||
| NATIVE_PLUGIN_NEEDS_SINGLE_THREAD = 1 << 4, | |||
| NATIVE_PLUGIN_NEEDS_DSP_IDLE = 1 << 5, | |||
| NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE = 1 << 6, | |||
| NATIVE_PLUGIN_USES_MULTI_PROGS = 1 << 7, /** has 1 patch per midi channel */ | |||
| NATIVE_PLUGIN_USES_PANNING = 1 << 8, /** uses stereo balance if unset (default) */ | |||
| NATIVE_PLUGIN_USES_STATE = 1 << 9, | |||
| NATIVE_PLUGIN_USES_TIME = 1 << 10, | |||
| NATIVE_PLUGIN_USES_PARENT_ID = 1 << 11 /** can set transient hint to parent */ | |||
| NATIVE_PLUGIN_IS_RTSAFE = 1 << 0, | |||
| NATIVE_PLUGIN_IS_SYNTH = 1 << 1, | |||
| NATIVE_PLUGIN_HAS_UI = 1 << 2, | |||
| NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS = 1 << 3, | |||
| NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD = 1 << 4, | |||
| NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE = 1 << 6, | |||
| NATIVE_PLUGIN_USES_MULTI_PROGS = 1 << 7, /** has 1 patch per midi channel */ | |||
| NATIVE_PLUGIN_USES_PANNING = 1 << 8, /** uses stereo balance if unset (default) */ | |||
| NATIVE_PLUGIN_USES_STATE = 1 << 9, | |||
| NATIVE_PLUGIN_USES_TIME = 1 << 10, | |||
| NATIVE_PLUGIN_USES_PARENT_ID = 1 << 11 /** can set transient hint to parent */ | |||
| } NativePluginHints; | |||
| typedef enum { | |||
| @@ -221,7 +220,6 @@ typedef struct _NativePluginDescriptor { | |||
| NativePluginHandle (*instantiate)(const NativeHostDescriptor* host); | |||
| void (*cleanup)(NativePluginHandle handle); | |||
| void (*idle)(NativePluginHandle handle); | |||
| uint32_t (*get_parameter_count)(NativePluginHandle handle); | |||
| const NativeParameter* (*get_parameter_info)(NativePluginHandle handle, uint32_t index); | |||
| @@ -208,10 +208,6 @@ protected: | |||
| pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_UI_UNAVAILABLE, 0, 0, nullptr, 0.0f); | |||
| } | |||
| // ------------------------------------------------------------------- | |||
| virtual void idle() {} | |||
| // ------------------------------------------------------------------- | |||
| // Plugin parameter calls | |||
| @@ -386,11 +382,6 @@ private: | |||
| public: | |||
| #define handlePtr ((NativePluginClass*)handle) | |||
| static void _idle(NativePluginHandle handle) | |||
| { | |||
| handlePtr->idle(); | |||
| } | |||
| static uint32_t _get_parameter_count(NativePluginHandle handle) | |||
| { | |||
| return handlePtr->getParameterCount(); | |||
| @@ -539,7 +530,6 @@ public: \ | |||
| #define PluginDescriptorFILL(ClassName) \ | |||
| ClassName::_instantiate, \ | |||
| ClassName::_cleanup, \ | |||
| ClassName::_idle, \ | |||
| ClassName::_get_parameter_count, \ | |||
| ClassName::_get_parameter_info, \ | |||
| ClassName::_get_parameter_value, \ | |||
| @@ -40,7 +40,7 @@ START_NAMESPACE_DISTRHO | |||
| static const NativePluginDescriptor _3bandeqDesc = { | |||
| /* category */ NATIVE_PLUGIN_CATEGORY_EQ, | |||
| #ifdef HAVE_DGL | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| #else | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE), | |||
| #endif | |||
| @@ -40,7 +40,7 @@ START_NAMESPACE_DISTRHO | |||
| static const NativePluginDescriptor _3bandsplitterDesc = { | |||
| /* category */ NATIVE_PLUGIN_CATEGORY_EQ, | |||
| #ifdef HAVE_DGL | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| #else | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE), | |||
| #endif | |||
| @@ -41,7 +41,7 @@ START_NAMESPACE_DISTRHO | |||
| static const NativePluginDescriptor _mverbDesc = { | |||
| /* category */ NATIVE_PLUGIN_CATEGORY_DELAY, | |||
| #ifdef HAVE_DGL | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| #else | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE), | |||
| #endif | |||
| @@ -40,7 +40,7 @@ START_NAMESPACE_DISTRHO | |||
| static const NativePluginDescriptor nekobiDesc = { | |||
| /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH, | |||
| #ifdef HAVE_DGL | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_IS_SYNTH|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_IS_SYNTH|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| #else | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_IS_SYNTH), | |||
| #endif | |||
| @@ -40,7 +40,7 @@ START_NAMESPACE_DISTRHO | |||
| static const NativePluginDescriptor pingpongpanDesc = { | |||
| /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY, | |||
| #ifdef HAVE_DGL | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE|NATIVE_PLUGIN_HAS_UI|NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD|NATIVE_PLUGIN_USES_PARENT_ID), | |||
| #else | |||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE), | |||
| #endif | |||
| @@ -31,7 +31,6 @@ | |||
| #include "lv2/ui.h" | |||
| #include "lv2/units.h" | |||
| #include "lv2/urid.h" | |||
| #include "lv2/worker.h" | |||
| #include "lv2/lv2_external_ui.h" | |||
| #include "lv2/lv2_programs.h" | |||
| @@ -261,9 +260,6 @@ static void writePluginFile(const NativePluginDescriptor* const pluginDesc) | |||
| if (pluginDesc->hints & NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS) | |||
| text += " <" LV2_BUF_SIZE__fixedBlockLength "> ,\n"; | |||
| if (pluginDesc->hints & NATIVE_PLUGIN_NEEDS_DSP_IDLE) | |||
| text += " <" LV2_WORKER__schedule "> ,\n"; | |||
| text += " <" LV2_OPTIONS__options "> ,\n"; | |||
| text += " <" LV2_URID__map "> ;\n"; | |||
| text += "\n"; | |||
| @@ -276,9 +272,6 @@ static void writePluginFile(const NativePluginDescriptor* const pluginDesc) | |||
| if (pluginDesc->hints & NATIVE_PLUGIN_USES_STATE) | |||
| text += " lv2:extensionData <" LV2_STATE__interface "> ;"; | |||
| if (pluginDesc->hints & NATIVE_PLUGIN_NEEDS_DSP_IDLE) | |||
| text += " lv2:extensionData <" LV2_WORKER__interface "> ;"; | |||
| if (pluginDesc->category != NATIVE_PLUGIN_CATEGORY_SYNTH) | |||
| text += " lv2:extensionData <" LV2_PROGRAMS__Interface "> ;\n"; | |||
| @@ -83,12 +83,10 @@ public: | |||
| fMidiEventCount(0), | |||
| fTimeInfo(), | |||
| fLastTimeSpeed(0.0), | |||
| fIsFirstRun(true), | |||
| fIsProcessing(false), | |||
| fBufferSize(0), | |||
| fSampleRate(sampleRate), | |||
| fUridMap(nullptr), | |||
| fWorker(nullptr), | |||
| fURIs(), | |||
| fUI(), | |||
| fPorts(), | |||
| @@ -126,7 +124,6 @@ public: | |||
| const LV2_Options_Option* options = nullptr; | |||
| const LV2_URID_Map* uridMap = nullptr; | |||
| const LV2_URID_Unmap* uridUnmap = nullptr; | |||
| const LV2_Worker_Schedule* worker = nullptr; | |||
| for (int i=0; features[i] != nullptr; ++i) | |||
| { | |||
| @@ -136,8 +133,6 @@ public: | |||
| uridMap = (const LV2_URID_Map*)features[i]->data; | |||
| else if (std::strcmp(features[i]->URI, LV2_URID__unmap) == 0) | |||
| uridUnmap = (const LV2_URID_Unmap*)features[i]->data; | |||
| else if (std::strcmp(features[i]->URI, LV2_WORKER__schedule) == 0) | |||
| worker = (const LV2_Worker_Schedule*)features[i]->data; | |||
| } | |||
| if (options == nullptr || uridMap == nullptr) | |||
| @@ -145,11 +140,6 @@ public: | |||
| carla_stderr("Host doesn't provide option or urid-map features"); | |||
| return; | |||
| } | |||
| if (worker == nullptr && (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_DSP_IDLE) != 0) | |||
| { | |||
| carla_stderr("Host doesn't provide worker feature"); | |||
| return; | |||
| } | |||
| for (int i=0; options[i].key != 0; ++i) | |||
| { | |||
| @@ -175,7 +165,6 @@ public: | |||
| } | |||
| fUridMap = uridMap; | |||
| fWorker = worker; | |||
| if (fDescriptor->midiIns > 0) | |||
| fUI.portOffset += desc->midiIns; | |||
| @@ -245,8 +234,6 @@ public: | |||
| fDescriptor->activate(fHandle); | |||
| carla_zeroStruct<NativeTimeInfo>(fTimeInfo); | |||
| fIsFirstRun = true; | |||
| } | |||
| void lv2_deactivate() | |||
| @@ -543,17 +530,6 @@ public: | |||
| // TODO - midi out | |||
| updateParameterOutputs(); | |||
| if (! fIsFirstRun) | |||
| return; | |||
| fIsFirstRun = false; | |||
| if (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_DSP_IDLE) | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(fWorker != nullptr,); | |||
| fWorker->schedule_work(fWorker->handle, 5, "idle"); | |||
| } | |||
| } | |||
| // ------------------------------------------------------------------- | |||
| @@ -674,38 +650,6 @@ public: | |||
| return LV2_STATE_SUCCESS; | |||
| } | |||
| // This is called from the LV2 worker thread (non-RT), as requested from the "run()" function. | |||
| LV2_Worker_Status lv2_work(const LV2_Worker_Respond_Function respond, const LV2_Worker_Respond_Handle handle, const uint32_t size, const void* const data) | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(size == 5, LV2_WORKER_ERR_UNKNOWN); | |||
| CARLA_SAFE_ASSERT_RETURN(data != nullptr, LV2_WORKER_ERR_UNKNOWN); | |||
| CARLA_SAFE_ASSERT_RETURN(respond != nullptr, LV2_WORKER_ERR_UNKNOWN); | |||
| const char* const msg((const char*)data); | |||
| CARLA_SAFE_ASSERT_RETURN(std::strcmp(msg, "idle") == 0, LV2_WORKER_ERR_UNKNOWN); | |||
| if (fDescriptor->idle != nullptr) | |||
| fDescriptor->idle(fHandle); | |||
| respond(handle, 6, "idled"); | |||
| return LV2_WORKER_SUCCESS; | |||
| } | |||
| // This is called from the LV2 process thread (RT) | |||
| LV2_Worker_Status lv2_work_response(const uint32_t size, const void* const body) | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(size == 6, LV2_WORKER_ERR_UNKNOWN); | |||
| CARLA_SAFE_ASSERT_RETURN(body != nullptr, LV2_WORKER_ERR_UNKNOWN); | |||
| const char* const msg((const char*)body); | |||
| CARLA_SAFE_ASSERT_RETURN(std::strcmp(msg, "idled") == 0, LV2_WORKER_ERR_UNKNOWN); | |||
| fWorker->schedule_work(fWorker->handle, 5, "idle"); | |||
| return LV2_WORKER_SUCCESS; | |||
| } | |||
| // ------------------------------------------------------------------- | |||
| void lv2ui_instantiate(LV2UI_Write_Function writeFunction, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features) | |||
| @@ -987,15 +931,13 @@ private: | |||
| NativeTimeInfo fTimeInfo; | |||
| double fLastTimeSpeed; | |||
| bool fIsFirstRun; // first run after activate | |||
| bool fIsProcessing; | |||
| // Lv2 host data | |||
| uint32_t fBufferSize; | |||
| double fSampleRate; | |||
| const LV2_URID_Map* fUridMap; | |||
| const LV2_Worker_Schedule* fWorker; | |||
| const LV2_URID_Map* fUridMap; | |||
| struct URIDs { | |||
| LV2_URID atomBlank; | |||
| @@ -1467,18 +1409,6 @@ static LV2_State_Status lv2_restore(LV2_Handle instance, LV2_State_Retrieve_Func | |||
| return instancePtr->lv2_restore(retrieve, handle, flags, features); | |||
| } | |||
| static LV2_Worker_Status lv2_work(LV2_Handle instance, LV2_Worker_Respond_Function respond, LV2_Worker_Respond_Handle handle, uint32_t size, const void* data) | |||
| { | |||
| carla_debug("lv2_work(%p, %p, %p, %i, %p)", instance, respond, handle, size, data); | |||
| return instancePtr->lv2_work(respond, handle, size, data); | |||
| } | |||
| static LV2_Worker_Status lv2_work_response(LV2_Handle instance, uint32_t size, const void* body) | |||
| { | |||
| carla_debug("lv2_work_response(%p, %i, %p)", instance, size, body); | |||
| return instancePtr->lv2_work_response(size, body); | |||
| } | |||
| static const void* lv2_extension_data(const char* uri) | |||
| { | |||
| carla_debug("lv2_extension_data(\"%s\")", uri); | |||
| @@ -1486,7 +1416,6 @@ static const void* lv2_extension_data(const char* uri) | |||
| static const LV2_Options_Interface options = { lv2_get_options, lv2_set_options }; | |||
| static const LV2_Programs_Interface programs = { lv2_get_program, lv2_select_program }; | |||
| static const LV2_State_Interface state = { lv2_save, lv2_restore }; | |||
| static const LV2_Worker_Interface worker = { lv2_work, lv2_work_response, nullptr }; | |||
| if (std::strcmp(uri, LV2_OPTIONS__interface) == 0) | |||
| return &options; | |||
| @@ -1494,8 +1423,6 @@ static const void* lv2_extension_data(const char* uri) | |||
| return &programs; | |||
| if (std::strcmp(uri, LV2_STATE__interface) == 0) | |||
| return &state; | |||
| if (std::strcmp(uri, LV2_WORKER__interface) == 0) | |||
| return &worker; | |||
| return nullptr; | |||
| } | |||
| @@ -44,7 +44,6 @@ namespace juce { | |||
| #define effGetChunk 23 | |||
| #define effSetChunk 24 | |||
| #define effGetPlugCategory 35 | |||
| #define effIdle 53 | |||
| #define kPlugCategEffect 1 | |||
| #define kPlugCategSynth 2 | |||
| #define kVstVersion 2400 | |||
| @@ -185,11 +184,6 @@ public: | |||
| switch (opcode) | |||
| { | |||
| case effIdle: | |||
| if (fDescriptor->idle != nullptr) | |||
| fDescriptor->idle(fHandle); | |||
| break; | |||
| case effSetSampleRate: | |||
| if (carla_compareFloats(fSampleRate, static_cast<double>(opt))) | |||
| return 0; | |||
| @@ -216,8 +210,7 @@ public: | |||
| fMidiEventCount = 0; | |||
| carla_zeroStruct<NativeTimeInfo>(fTimeInfo); | |||
| // tell host we want idle and MIDI events | |||
| fAudioMaster(fEffect, audioMasterNeedIdle, 0, 0, nullptr, 0.0f); | |||
| // tell host we want MIDI events | |||
| fAudioMaster(fEffect, audioMasterWantMidi, 0, 0, nullptr, 0.0f); | |||
| CARLA_SAFE_ASSERT_BREAK(! fIsActive); | |||