GUI handling for live latency-measurement
authorRobin Gareus <robin@gareus.org>
Fri, 4 Dec 2015 16:34:46 +0000 (17:34 +0100)
committerRobin Gareus <robin@gareus.org>
Fri, 4 Dec 2015 16:34:46 +0000 (17:34 +0100)
gtk2_ardour/engine_dialog.cc
gtk2_ardour/engine_dialog.h

index 3019c169d86ec3feffd4e31c13ca36143beba8bc..8c0694713dfc01b5ae0b7497d2e895292966fb01 100644 (file)
@@ -421,9 +421,9 @@ EngineControl::start_engine ()
 }
 
 bool
-EngineControl::stop_engine ()
+EngineControl::stop_engine (bool for_latency)
 {
-       if (ARDOUR::AudioEngine::instance()->stop()) {
+       if (ARDOUR::AudioEngine::instance()->stop(for_latency)) {
                MessageDialog msg(*this,
                                  ARDOUR::AudioEngine::instance()->get_last_backend_error());
                msg.run();
@@ -2301,7 +2301,8 @@ EngineControl::push_state_to_backend (bool start)
 
        /* determine if we need to stop the backend before changing parameters */
 
-       if (change_driver || change_device || change_channels || change_latency ||
+       if (change_driver || change_device || change_channels ||
+                       (change_latency && !backend->can_change_systemic_latency_when_running ()) ||
                        (change_rate && !backend->can_change_sample_rate_when_running()) ||
                        change_midi ||
                        (change_bufsize && !backend->can_change_buffer_size_when_running())) {
@@ -2379,6 +2380,10 @@ EngineControl::push_state_to_backend (bool start)
                                } else {
                                        backend->set_midi_device_enabled ((*p)->name, false);
                                }
+                               if (backend->can_change_systemic_latency_when_running ()) {
+                                       backend->set_systemic_midi_input_latency ((*p)->name, 0);
+                                       backend->set_systemic_midi_output_latency ((*p)->name, 0);
+                               }
                                continue;
                        }
                        backend->set_midi_device_enabled ((*p)->name, (*p)->enabled);
@@ -2630,8 +2635,7 @@ EngineControl::on_switch_page (GtkNotebookPage*, guint page_num)
                /* latency tab */
 
                if (ARDOUR::AudioEngine::instance()->running()) {
-                       // TODO - mark as 'stopped for latency
-                       stop_engine ();
+                       stop_engine (true);
                }
 
                {
index bfb094deea36635b8139d0194fe765763de5d4e7..aa768bc890c87191e8fae1e122fce624b654b999 100644 (file)
@@ -304,7 +304,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
     void post_push ();
     void update_sensitivity ();
        bool start_engine ();
-       bool stop_engine ();
+       bool stop_engine (bool for_latency = false);
 
     /* latency measurement */
     void latency_button_clicked ();