Fix MIDI latency measurement
authorRobin Gareus <robin@gareus.org>
Sun, 5 May 2019 22:13:47 +0000 (00:13 +0200)
committerRobin Gareus <robin@gareus.org>
Sun, 5 May 2019 22:13:47 +0000 (00:13 +0200)
* Restore active state of devices after measurement
* Don't manually set latencies for measurement (backend handles this)
* remove superfluous call to stop measurement

gtk2_ardour/engine_dialog.cc

index 0db53707985c9eccb874c414dac010e21a851910..e971dc5ef1af821ca0e981f3916453700b62d3d9 100644 (file)
@@ -2516,15 +2516,13 @@ EngineControl::push_state_to_backend (bool start)
        if (1 /* TODO */) {
                for (vector<MidiDeviceSettings>::const_iterator p = _midi_devices.begin(); p != _midi_devices.end(); ++p) {
                        if (_measure_midi) {
+                               /* Disable other MIDI devices while measuring.
+                                * This is a hack to only show ports from the selected device */
                                if (*p == _measure_midi) {
                                        backend->set_midi_device_enabled ((*p)->name, true);
                                } 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);
@@ -2805,6 +2803,17 @@ EngineControl::on_switch_page (GtkNotebookPage*, guint page_num)
        if (page_num == midi_tab) {
                /* MIDI tab */
                refresh_midi_display ();
+
+               /* undo special case from push_state_to_backend() when measuring midi latency */
+               if (_measure_midi && ARDOUR::AudioEngine::instance()->running ()) {
+                       boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+                       if (backend->can_change_systemic_latency_when_running ()) {
+                               for (vector<MidiDeviceSettings>::const_iterator p = _midi_devices.begin(); p != _midi_devices.end(); ++p) {
+                                       backend->set_midi_device_enabled ((*p)->name, (*p)->enabled);
+                               }
+                       }
+               }
+               _measure_midi.reset();
        }
 
        if (page_num == latency_tab) {
@@ -2850,7 +2859,6 @@ EngineControl::on_switch_page (GtkNotebookPage*, guint page_num)
        } else {
                if (lm_running) {
                        end_latency_detection ();
-                       ARDOUR::AudioEngine::instance()->stop_latency_detection();
                }
        }
 }