Merge branch 'cairocanvas'
[ardour.git] / libs / ardour / globals.cc
index 8646b819f302d44ae3445994c3b49540b92c3f16..48abda8cfcb8367a18bdfa6962823aff2cad581b 100644 (file)
@@ -89,6 +89,7 @@
 #include "ardour/midi_region.h"
 #include "ardour/midiport_manager.h"
 #include "ardour/mix.h"
+#include "ardour/operations.h"
 #include "ardour/panner_manager.h"
 #include "ardour/plugin_manager.h"
 #include "ardour/process_thread.h"
@@ -125,6 +126,8 @@ mix_buffers_with_gain_t ARDOUR::mix_buffers_with_gain = 0;
 mix_buffers_no_gain_t   ARDOUR::mix_buffers_no_gain = 0;
 
 PBD::Signal1<void,std::string> ARDOUR::BootMessage;
+PBD::Signal3<void,std::string,std::string,bool> ARDOUR::PluginScanMessage;
+PBD::Signal1<void,int> ARDOUR::PluginScanTimeout;
 PBD::Signal0<void> ARDOUR::GUIIdle;
 
 namespace ARDOUR {
@@ -239,10 +242,12 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir
 
 #ifdef ENABLE_NLS
        (void) bindtextdomain(PACKAGE, localedir);
+       (void) bind_textdomain_codeset (PACKAGE, "UTF-8");
 #endif
 
        SessionEvent::init_event_pool ();
 
+       Operations::make_operations_quarks ();
        SessionObject::make_property_quarks ();
        Region::make_property_quarks ();
        MidiRegion::make_property_quarks ();
@@ -363,12 +368,18 @@ ARDOUR::init_post_engine ()
 
        /* find plugins */
 
-       ARDOUR::PluginManager::instance().refresh ();
+       ARDOUR::PluginManager::instance().refresh (!Config->get_discover_vst_on_start());
 }
 
-int
-ARDOUR::cleanup ()
+void
+ARDOUR::cleanup () 
 {
+       if (!libardour_initialized) {
+               return;
+       }
+
+       ARDOUR::AudioEngine::destroy ();
+
        delete Library;
 #ifdef HAVE_LRDF
        lrdf_cleanup ();
@@ -381,8 +392,11 @@ ARDOUR::cleanup ()
 #ifdef LXVST_SUPPORT
        vstfx_exit();
 #endif
+       delete &PluginManager::instance();
+       delete Config;
        PBD::cleanup ();
-       return 0;
+
+       return;
 }
 
 void
@@ -392,11 +406,9 @@ ARDOUR::find_bindings_files (map<string,string>& files)
        Searchpath spath = ardour_config_search_path();
 
        if (getenv ("ARDOUR_SAE")) {
-               Glib::PatternSpec pattern("*SAE-*.bindings");
-               find_matching_files_in_search_path (spath, pattern, found);
+               find_files_matching_pattern (found, spath, "*SAE-*.bindings");
        } else {
-               Glib::PatternSpec pattern("*.bindings");
-               find_matching_files_in_search_path (spath, pattern, found);
+               find_files_matching_pattern (found, spath, "*.bindings");
        }
 
        if (found.empty()) {
@@ -532,8 +544,8 @@ ARDOUR::set_translations_enabled (bool yn)
                c = '0';
        }
        
-       ::write (fd, &c, 1);
-       ::close (fd);
+       (void) ::write (fd, &c, 1);
+       (void) ::close (fd);
 
        return true;
 }
@@ -544,7 +556,11 @@ ARDOUR::get_available_sync_options ()
 {
        vector<SyncSource> ret;
 
-       ret.push_back (JACK);
+       boost::shared_ptr<AudioBackend> backend = AudioEngine::instance()->current_backend();
+       if (backend && backend->name() == "JACK") {
+               ret.push_back (Engine);
+       }
+
        ret.push_back (MTC);
        ret.push_back (MIDIClock);
        ret.push_back (LTC);
@@ -584,10 +600,21 @@ clock_gettime (int /*clk_id*/, struct timespec *t)
 microseconds_t
 ARDOUR::get_microseconds ()
 {
+#ifdef PLATFORM_WINDOWS
+       microseconds_t ret = 0;
+       LARGE_INTEGER freq, time;
+
+       if (QueryPerformanceFrequency(&freq))
+               if (QueryPerformanceCounter(&time))
+                       ret = (microseconds_t)((time.QuadPart * 1000000) / freq.QuadPart);
+
+       return ret;
+#else
        struct timespec ts;
        if (clock_gettime (CLOCK_MONOTONIC, &ts) != 0) {
                /* EEEK! */
                return 0;
        }
        return (microseconds_t) ts.tv_sec * 1000000 + (ts.tv_nsec/1000);
+#endif
 }