X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fplugin_manager.cc;h=49d72f65d6016a36a2d579fb4037206a8f4c0f13;hb=e56c8f0309aa35265785f4a31fac1bd38f868fd1;hp=55c758cb5e1d27996e49606a64682cef79da4d2d;hpb=fc6b965ad0f79ee6d049567b99fc92ccef811fa7;p=ardour.git diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index 55c758cb5e..49d72f65d6 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -67,6 +67,8 @@ #include "ardour/filesystem_paths.h" #include "ardour/ladspa.h" #include "ardour/ladspa_plugin.h" +#include "ardour/luascripting.h" +#include "ardour/luaproc.h" #include "ardour/plugin.h" #include "ardour/plugin_manager.h" #include "ardour/rc_configuration.h" @@ -119,6 +121,7 @@ PluginManager::PluginManager () , _ladspa_plugin_info(0) , _lv2_plugin_info(0) , _au_plugin_info(0) + , _lua_plugin_info(0) , _cancel_scan(false) , _cancel_timeout(false) { @@ -215,6 +218,8 @@ PluginManager::PluginManager () } BootMessage (_("Discovering Plugins")); + + LuaScripting::instance().scripts_changed.connect_same_thread (lua_refresh_connection, boost::bind (&PluginManager::lua_refresh_cb, this)); } @@ -227,6 +232,7 @@ PluginManager::~PluginManager() delete _ladspa_plugin_info; delete _lv2_plugin_info; delete _au_plugin_info; + delete _lua_plugin_info; } } @@ -244,6 +250,8 @@ PluginManager::refresh (bool cache_only) BootMessage (_("Scanning LADSPA Plugins")); ladspa_refresh (); + BootMessage (_("Scanning Lua DSP Processors")); + lua_refresh (); #ifdef LV2_SUPPORT BootMessage (_("Scanning LV2 Plugins")); lv2_refresh (); @@ -437,11 +445,7 @@ void PluginManager::clear_au_cache () { #ifdef AUDIOUNIT_SUPPORT - // AUPluginInfo::au_cache_path () - string fn = Glib::build_filename (ARDOUR::user_config_directory(), "au_cache"); - if (Glib::file_test (fn, Glib::FILE_TEST_EXISTS)) { - ::g_unlink(fn.c_str()); - } + AUPluginInfo::clear_cache (); #endif } @@ -456,6 +460,32 @@ PluginManager::clear_au_blacklist () #endif } +void +PluginManager::lua_refresh () +{ + if (_lua_plugin_info) { + _lua_plugin_info->clear (); + } else { + _lua_plugin_info = new ARDOUR::PluginInfoList (); + } + ARDOUR::LuaScriptList & _scripts (LuaScripting::instance ().scripts (LuaScriptInfo::DSP)); + for (LuaScriptList::const_iterator s = _scripts.begin(); s != _scripts.end(); ++s) { + LuaPluginInfoPtr lpi (new LuaPluginInfo(*s)); + _lua_plugin_info->push_back (lpi); + } +} + +void +PluginManager::lua_refresh_cb () +{ + Glib::Threads::Mutex::Lock lm (_lock, Glib::Threads::TRY_LOCK); + if (!lm.locked()) { + return; + } + lua_refresh (); + PluginListChanged (); /* EMIT SIGNAL */ +} + void PluginManager::ladspa_refresh () { @@ -586,6 +616,11 @@ PluginManager::ladspa_discover (string path) DEBUG_TRACE (DEBUG::PluginManager, string_compose ("LADSPA plugin found at %1\n", path)); for (uint32_t i = 0; ; ++i) { + /* if a ladspa plugin allocates memory here + * it is never free()ed (or plugin-dependent only when unloading). + * For some plugins memory allocated is incremental, we should + * avoid re-scanning plugins and file bug reports. + */ if ((descriptor = dfunc (i)) == 0) { break; } @@ -831,13 +866,13 @@ static std::string dll_info (std::string path) { type = *((uint16_t*) &buf[4]); switch (type) { case 0x014c: - rv = _("i386 (32bit)"); + rv = _("i386 (32-bit)"); break; case 0x0200: rv = _("Itanium"); break; case 0x8664: - rv = _("x64 (64bit)"); + rv = _("x64 (64-bit)"); break; case 0: rv = _("Native Architecture"); @@ -1102,6 +1137,9 @@ PluginManager::save_statuses () case LXVST: ofs << "LXVST"; break; + case Lua: + ofs << "Lua"; + break; } ofs << ' '; @@ -1123,6 +1161,7 @@ PluginManager::save_statuses () ofs << endl; } g_file_set_contents (path.c_str(), ofs.str().c_str(), -1, NULL); + PluginStatusesChanged (); /* EMIT SIGNAL */ } void @@ -1187,6 +1226,8 @@ PluginManager::load_statuses () type = Windows_VST; } else if (stype == "LXVST") { type = LXVST; + } else if (stype == "Lua") { + type = Lua; } else { error << string_compose (_("unknown plugin type \"%1\" - ignored"), stype) << endmsg; @@ -1264,3 +1305,10 @@ PluginManager::au_plugin_info () #endif return _empty_plugin_info; } + +ARDOUR::PluginInfoList& +PluginManager::lua_plugin_info () +{ + assert(_lua_plugin_info); + return *_lua_plugin_info; +}