From ba0ae4818a887f39d5feac7446b09055b93fc08f Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 9 Mar 2014 19:34:53 +0100 Subject: [VST] scan timeout display and per plugin timeout override. --- gtk2_ardour/ardour_ui.cc | 2 +- gtk2_ardour/ardour_ui.h | 2 ++ libs/ardour/ardour/ardour.h | 1 + libs/ardour/ardour/plugin_manager.h | 7 +++++-- libs/ardour/globals.cc | 1 + libs/ardour/plugin_manager.cc | 17 +++++++++++++---- libs/ardour/vst_info_file.cc | 10 +++++++++- 7 files changed, 32 insertions(+), 8 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index d33cdf5804..ecd8872ea3 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -3866,7 +3866,7 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca timeout_button->show(); scan_pbar = manage(new ProgressBar()); - //scan_pbar->set_size_request(300,-1); + scan_pbar->set_orientation(Gtk::PROGRESS_RIGHT_TO_LEFT); scan_pbar->set_text(_("Scan Timeout")); scan_pbar->show(); diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 69ff876dc8..5aa08797fb 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -669,7 +669,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void gui_idle_handler (); void cancel_plugin_scan (); + void cancel_plugin_timeout (); void plugin_scan_dialog (std::string type, std::string plugin, bool); + void plugin_scan_timeout (int); void session_format_mismatch (std::string, std::string); diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h index 003f05ca5d..465de04127 100644 --- a/libs/ardour/ardour/ardour.h +++ b/libs/ardour/ardour/ardour.h @@ -51,6 +51,7 @@ namespace ARDOUR { extern LIBARDOUR_API PBD::Signal1 BootMessage; extern LIBARDOUR_API PBD::Signal3 PluginScanMessage; + extern LIBARDOUR_API PBD::Signal1 PluginScanTimeout; extern LIBARDOUR_API PBD::Signal0 GUIIdle; /** diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h index 17400ea4d8..6239bd7cb0 100644 --- a/libs/ardour/ardour/plugin_manager.h +++ b/libs/ardour/ardour/plugin_manager.h @@ -53,13 +53,15 @@ class LIBARDOUR_API PluginManager : public boost::noncopyable { void refresh (bool cache_only = false); void cancel_plugin_scan(); + void cancel_plugin_timeout(); void clear_vst_cache (); void clear_vst_blacklist (); const std::string get_default_windows_vst_path() const { return windows_vst_path; } const std::string get_default_lxvst_path() const { return lxvst_path; } - bool cancelled () { return cancel_scan; } + bool cancelled () { return _cancel_scan; } + bool no_timeout () { return _cancel_timeout; } enum PluginStatusType { Normal = 0, @@ -112,7 +114,8 @@ class LIBARDOUR_API PluginManager : public boost::noncopyable { std::string windows_vst_path; std::string lxvst_path; - bool cancel_scan; + bool _cancel_scan; + bool _cancel_timeout; void ladspa_refresh (); void windows_vst_refresh (bool cache_only = false); diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index 359f960f30..8bee4ec902 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -126,6 +126,7 @@ mix_buffers_no_gain_t ARDOUR::mix_buffers_no_gain = 0; PBD::Signal1 ARDOUR::BootMessage; PBD::Signal3 ARDOUR::PluginScanMessage; +PBD::Signal1 ARDOUR::PluginScanTimeout; PBD::Signal0 ARDOUR::GUIIdle; namespace ARDOUR { diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index 72df671928..a07651bc6a 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -111,7 +111,8 @@ PluginManager::PluginManager () , _ladspa_plugin_info(0) , _lv2_plugin_info(0) , _au_plugin_info(0) - , cancel_scan(false) + , _cancel_scan(false) + , _cancel_timeout(false) { char* s; string lrdf_path; @@ -192,7 +193,7 @@ void PluginManager::refresh (bool cache_only) { DEBUG_TRACE (DEBUG::PluginManager, "PluginManager::refresh\n"); - cancel_scan = false; + _cancel_scan = false; BootMessage (_("Scanning LADSPA Plugins")); ladspa_refresh (); @@ -222,13 +223,19 @@ PluginManager::refresh (bool cache_only) BootMessage (_("Plugin Scan Complete...")); PluginListChanged (); /* EMIT SIGNAL */ PluginScanMessage(X_("closeme"), "", false); - cancel_scan = false; + _cancel_scan = false; } void PluginManager::cancel_plugin_scan () { - cancel_scan = true; + _cancel_scan = true; +} + +void +PluginManager::cancel_plugin_timeout () +{ + _cancel_timeout = true; } void @@ -674,6 +681,7 @@ PluginManager::windows_vst_discover (string path, bool cache_only) { DEBUG_TRACE (DEBUG::PluginManager, string_compose ("windows_vst_discover '%1'\n", path)); + _cancel_timeout = false; vector * finfos = vstfx_get_info_fst (const_cast (path.c_str()), cache_only ? VST_SCAN_CACHE_ONLY : VST_SCAN_USE_APP); @@ -797,6 +805,7 @@ PluginManager::lxvst_discover (string path, bool cache_only) { DEBUG_TRACE (DEBUG::PluginManager, string_compose ("checking apparent LXVST plugin at %1\n", path)); + _cancel_timeout = false; vector * finfos = vstfx_get_info_lx (const_cast (path.c_str()), cache_only ? VST_SCAN_CACHE_ONLY : VST_SCAN_USE_APP); diff --git a/libs/ardour/vst_info_file.cc b/libs/ardour/vst_info_file.cc index 1db9afbbc4..fe434909f3 100644 --- a/libs/ardour/vst_info_file.cc +++ b/libs/ardour/vst_info_file.cc @@ -916,7 +916,15 @@ vstfx_get_info (const char* dllpath, enum ARDOUR::PluginType type, enum VSTScanM return infos; } else { int timeout = PLUGIN_SCAN_TIMEOUT; - while (scanner.is_running() && --timeout) { + bool no_timeout = (timeout <= 0); + ARDOUR::PluginScanTimeout(timeout); + while (scanner.is_running() && (no_timeout || timeout > 0)) { + if (!no_timeout && !ARDOUR::PluginManager::instance().no_timeout()) { + if (timeout%5 == 0) { + ARDOUR::PluginScanTimeout(timeout); + } + --timeout; + } ARDOUR::GUIIdle(); Glib::usleep (100000); -- cgit v1.2.3