finished merge of cairocanvas with windows and windows+cc branches
[ardour.git] / libs / ardour / globals.cc
index 8646b819f302d44ae3445994c3b49540b92c3f16..5874ac3b1b25d183cea69ba2766e2497605947b8 100644 (file)
@@ -366,9 +366,15 @@ ARDOUR::init_post_engine ()
        ARDOUR::PluginManager::instance().refresh ();
 }
 
-int
-ARDOUR::cleanup ()
+void
+ARDOUR::cleanup () 
 {
+       if (!libardour_initialized) {
+               return;
+       }
+
+       ARDOUR::AudioEngine::destroy ();
+
        delete Library;
 #ifdef HAVE_LRDF
        lrdf_cleanup ();
@@ -382,7 +388,8 @@ ARDOUR::cleanup ()
        vstfx_exit();
 #endif
        PBD::cleanup ();
-       return 0;
+
+       return;
 }
 
 void
@@ -532,8 +539,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 +551,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 +595,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
 }