Fixes for IO port adding/removing
[ardour.git] / libs / ardour / audioengine.cc
index 15ad6e442c07807bc44ac90494cac790af4642e1..ddb835c78f9539cc5480a91f354ecab5a08899e4 100644 (file)
@@ -63,16 +63,16 @@ AudioEngine::AudioEngine (string client_name)
        _buffer_size = 0;
        _freewheeling = false;
        _freewheel_thread_registered = false;
-    
-    m_meter_thread = 0;
-    m_meter_exit = false;
 
-    start_metering_thread();
-    
+       m_meter_thread = 0;
+       m_meter_exit = false;
+
        if (connect_to_jack (client_name)) {
                throw NoBackendAvailable ();
        }
 
+       start_metering_thread();
+
 }
 
 AudioEngine::~AudioEngine ()
@@ -81,9 +81,9 @@ AudioEngine::~AudioEngine ()
                jack_client_close (_jack);
        }
 
-    if(m_meter_thread) {
-        g_atomic_int_inc(&m_meter_exit);
-    }
+       if(m_meter_thread) {
+               g_atomic_int_inc(&m_meter_exit);
+       }
 }
 
 void
@@ -163,18 +163,32 @@ AudioEngine::stop ()
 }
 
 
+       
+bool
+AudioEngine::get_sync_offset (jack_nframes_t& offset) const
+{
+       jack_position_t pos;
+       
+       (void) jack_transport_query (_jack, &pos);
+
+       if (pos.valid & JackVideoFrameOffset) {
+               offset = pos.video_offset;
+               return true;
+       }
+
+       return false;
+}
+
 void
 AudioEngine::_jack_timebase_callback (jack_transport_state_t state, jack_nframes_t nframes,
-
-                                                                         jack_position_t* pos, int new_position, void *arg)
+                                     jack_position_t* pos, int new_position, void *arg)
 {
        static_cast<AudioEngine*> (arg)->jack_timebase_callback (state, nframes, pos, new_position);
 }
 
 void
 AudioEngine::jack_timebase_callback (jack_transport_state_t state, jack_nframes_t nframes,
-
-                                                                        jack_position_t* pos, int new_position)
+                                    jack_position_t* pos, int new_position)
 {
        if (session && session->synced_to_jack()) {
                session->jack_timebase_callback (state, nframes, pos, new_position);
@@ -207,7 +221,7 @@ AudioEngine::_xrun_callback (void *arg)
 int
 AudioEngine::_graph_order_callback (void *arg)
 {
-        static_cast<AudioEngine *>(arg)->GraphReordered (); /* EMIT SIGNAL */
+       static_cast<AudioEngine *>(arg)->GraphReordered (); /* EMIT SIGNAL */
        return 0;
 }
 
@@ -359,9 +373,9 @@ AudioEngine::jack_bufsize_callback (jack_nframes_t nframes)
 void
 AudioEngine::start_metering_thread ()
 {
-    if(m_meter_thread == 0) {
-        m_meter_thread = Glib::Thread::create (sigc::mem_fun(this, &AudioEngine::meter_thread), false);
-    }
+       if(m_meter_thread == 0) {
+               m_meter_thread = Glib::Thread::create (sigc::mem_fun(this, &AudioEngine::meter_thread), false);
+       }
 }
 
 void
@@ -1052,7 +1066,7 @@ AudioEngine::reconnect_to_jack ()
                (*i)->reset ();
 
                if ((*i)->flags() & JackPortIsOutput) {
-                       (*i)->silence (jack_get_buffer_size (_jack), 0);
+                       (*i)->get_buffer().silence (jack_get_buffer_size (_jack), 0);
                }
        }