diff options
author | Robin Gareus <robin@gareus.org> | 2019-05-06 00:13:47 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-05-06 00:13:47 +0200 |
commit | ae181f5f667b7cbca9410a7b36a6efad90e7ed7f (patch) | |
tree | 63f2b0130cd83cc5629f5b01f4cac0fb8a395ddf /gtk2_ardour/engine_dialog.cc | |
parent | 837678bdccf1c18a13e91ee752734bd483f9355c (diff) |
Fix MIDI latency measurement
* Restore active state of devices after measurement
* Don't manually set latencies for measurement (backend handles this)
* remove superfluous call to stop measurement
Diffstat (limited to 'gtk2_ardour/engine_dialog.cc')
-rw-r--r-- | gtk2_ardour/engine_dialog.cc | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 0db5370798..e971dc5ef1 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -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(); } } } |