merge with master and fix 4 conflicts by hand
[ardour.git] / libs / ardour / globals.cc
index 8646b819f302d44ae3445994c3b49540b92c3f16..39bcd1b79e8c6249fecd8a7e2b13fa6117bbe8ee 100644 (file)
@@ -125,6 +125,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,6 +241,7 @@ 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 ();
@@ -363,12 +366,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 ();
@@ -382,7 +391,8 @@ ARDOUR::cleanup ()
        vstfx_exit();
 #endif
        PBD::cleanup ();
-       return 0;
+
+       return;
 }
 
 void
@@ -532,8 +542,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 +554,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 +598,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
 }