diff --git a/source/backend/engine/CarlaEngine.cpp b/source/backend/engine/CarlaEngine.cpp index a70e728c6..829296aeb 100644 --- a/source/backend/engine/CarlaEngine.cpp +++ b/source/backend/engine/CarlaEngine.cpp @@ -829,19 +829,7 @@ void CarlaEngine::removeAllPlugins() const unsigned int oldCount = kData->curPluginCount; kData->curPluginCount = 0; - - for (unsigned int i=0; i < oldCount; i++) - { - CarlaPlugin* const plugin = kData->plugins[i].plugin; - - CARLA_ASSERT(plugin != nullptr); - - if (plugin != nullptr) - plugin->setEnabled(false); - } - - // wait for processing - waitForProccessEnd(0); + waitForProccessEnd(0); // FIXME - doesn't work for multi-client for (unsigned int i=0; i < oldCount; i++) { diff --git a/source/backend/plugin/CarlaPluginInternal.hpp b/source/backend/plugin/CarlaPluginInternal.hpp index c8cedbd64..107781e56 100644 --- a/source/backend/plugin/CarlaPluginInternal.hpp +++ b/source/backend/plugin/CarlaPluginInternal.hpp @@ -453,9 +453,7 @@ struct CarlaPluginProtectedData { ~PostRtEvents() { - mutex.lock(); clear(); - mutex.unlock(); } void appendRT(const PluginPostRtEvent& event) diff --git a/source/backend/plugin/DssiPlugin.cpp b/source/backend/plugin/DssiPlugin.cpp index 0f0071b47..fb11a6637 100644 --- a/source/backend/plugin/DssiPlugin.cpp +++ b/source/backend/plugin/DssiPlugin.cpp @@ -695,6 +695,7 @@ public: // dssi-vst can do chunks, but needs fixed buffers if (QString(fFilename).endsWith("dssi-vst.so", Qt::CaseInsensitive)) { + carla_stdout("dssi-vst detected, disabling sample accurate events (ie, fixed buffer)"); fOptions |= PLUGIN_OPTION_FIXED_BUFFER; if (fOptions & PLUGIN_OPTION_USE_CHUNKS) @@ -975,7 +976,7 @@ public: // Event Input (System) bool allNotesOffSent = false; - bool sampleAccurate = (fHints & PLUGIN_OPTION_FIXED_BUFFER) == 0; + bool sampleAccurate = (fOptions & PLUGIN_OPTION_FIXED_BUFFER) == 0; uint32_t time, nEvents = kData->event.portIn->getEventCount(); uint32_t startTime = 0; diff --git a/source/backend/plugin/LadspaPlugin.cpp b/source/backend/plugin/LadspaPlugin.cpp index ee59e0cee..6582d47d7 100644 --- a/source/backend/plugin/LadspaPlugin.cpp +++ b/source/backend/plugin/LadspaPlugin.cpp @@ -821,7 +821,7 @@ public: // ---------------------------------------------------------------------------------------------------- // Event Input (System) - bool sampleAccurate = (fHints & PLUGIN_OPTION_FIXED_BUFFER) == 0; + bool sampleAccurate = (fOptions & PLUGIN_OPTION_FIXED_BUFFER) == 0; uint32_t time, nEvents = kData->event.portIn->getEventCount(); uint32_t timeOffset = 0; diff --git a/source/backend/plugin/LinuxSamplerPlugin.cpp b/source/backend/plugin/LinuxSamplerPlugin.cpp index e7f8b535a..8ce16a871 100644 --- a/source/backend/plugin/LinuxSamplerPlugin.cpp +++ b/source/backend/plugin/LinuxSamplerPlugin.cpp @@ -479,7 +479,7 @@ public: // Event Input (System) bool allNotesOffSent = false; - bool sampleAccurate = (fHints & PLUGIN_OPTION_FIXED_BUFFER) == 0; + bool sampleAccurate = (fOptions & PLUGIN_OPTION_FIXED_BUFFER) == 0; uint32_t time, nEvents = kData->event.portIn->getEventCount(); uint32_t startTime = 0; diff --git a/source/backend/plugin/NativePlugin.cpp b/source/backend/plugin/NativePlugin.cpp index ed233f58a..8adca370f 100644 --- a/source/backend/plugin/NativePlugin.cpp +++ b/source/backend/plugin/NativePlugin.cpp @@ -1078,7 +1078,7 @@ public: // Event Input (System) bool allNotesOffSent = false; - bool sampleAccurate = (fHints & PLUGIN_OPTION_FIXED_BUFFER) == 0; + bool sampleAccurate = (fOptions & PLUGIN_OPTION_FIXED_BUFFER) == 0; uint32_t time, nEvents = kData->event.portIn->getEventCount(); uint32_t timeOffset = 0; @@ -1629,13 +1629,11 @@ protected: public: static size_t getPluginCount() { - maybeFirstInit(); return sPluginDescriptors.count(); } static const PluginDescriptor* getPluginDescriptor(const size_t index) { - maybeFirstInit(); CARLA_ASSERT(index < sPluginDescriptors.count()); if (index < sPluginDescriptors.count()) @@ -1649,34 +1647,6 @@ public: sPluginDescriptors.append(desc); } - static void maybeFirstInit() - { - if (! sFirstInit) - return; - - sFirstInit = false; - -#ifndef BUILD_BRIDGE - carla_register_native_plugin_bypass(); - carla_register_native_plugin_midiSplit(); - carla_register_native_plugin_midiThrough(); - -#if 0 - carla_register_native_plugin_3BandEQ(); - carla_register_native_plugin_3BandSplitter(); - carla_register_native_plugin_PingPongPan(); -#endif - -# ifdef WANT_AUDIOFILE - carla_register_native_plugin_audiofile(); -# endif - -# ifdef WANT_ZYNADDSUBFX - carla_register_native_plugin_zynaddsubfx(); -# endif -#endif - } - // ------------------------------------------------------------------- bool init(const char* const name, const char* const label) @@ -1685,11 +1655,6 @@ public: CARLA_ASSERT(kData->client == nullptr); CARLA_ASSERT(label); - // --------------------------------------------------------------- - // initialize native-plugins descriptors - - maybeFirstInit(); - // --------------------------------------------------------------- // get descriptor that matches label @@ -1747,6 +1712,20 @@ public: return true; } + class ScopedInitializer + { + public: + ScopedInitializer() + { + initDescriptors(); + } + + ~ScopedInitializer() + { + clearDescriptors(); + } + }; + private: PluginHandle fHandle; PluginHandle fHandle2; @@ -1765,11 +1744,39 @@ private: ::TimeInfo fTimeInfo; - static bool sFirstInit; static NonRtList sPluginDescriptors; // ------------------------------------------------------------------- + static void initDescriptors() + { +#ifndef BUILD_BRIDGE + carla_register_native_plugin_bypass(); + carla_register_native_plugin_midiSplit(); + carla_register_native_plugin_midiThrough(); + +#if 0 + carla_register_native_plugin_3BandEQ(); + carla_register_native_plugin_3BandSplitter(); + carla_register_native_plugin_PingPongPan(); +#endif + +# ifdef WANT_AUDIOFILE + carla_register_native_plugin_audiofile(); +# endif +# ifdef WANT_ZYNADDSUBFX + carla_register_native_plugin_zynaddsubfx(); +# endif +#endif + } + + static void clearDescriptors() + { + sPluginDescriptors.clear(); + } + + // ------------------------------------------------------------------- + #define handlePtr ((NativePlugin*)handle) static uint32_t carla_host_get_buffer_size(HostHandle handle) @@ -1810,9 +1817,10 @@ private: #undef handlePtr }; -bool NativePlugin::sFirstInit = true; NonRtList NativePlugin::sPluginDescriptors; +static const NativePlugin::ScopedInitializer _si; + CARLA_BACKEND_END_NAMESPACE void carla_register_native_plugin(const PluginDescriptor* desc)