From 3a7304ca011a1fffb57ef9fdf3429f9e48091e26 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 12 May 2021 00:09:37 +0200 Subject: [PATCH] Fix session loading when aborting latency measurement #8691 Stop the engine if it was started for latency measurement but measurement was aborted. Previously the engine was kept running and the "Start' button was not available. If this happened during initial session loading, a user would have to manually restart the engine to proceed. --- gtk2_ardour/engine_dialog.cc | 10 ++++++++++ gtk2_ardour/engine_dialog.h | 1 + 2 files changed, 11 insertions(+) diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 60082e582e..4bac8e4a7e 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -2966,6 +2966,8 @@ EngineControl::on_switch_page (GtkNotebookPage*, guint page_num) if (page_num == latency_tab) { /* latency tab */ + was_running_before_lm = ARDOUR::AudioEngine::instance()->running(); + if (ARDOUR::AudioEngine::instance()->running()) { stop_engine (true); } @@ -3199,6 +3201,14 @@ EngineControl::latency_back_button_clicked () ARDOUR::AudioEngine::instance()->stop_latency_detection (); notebook.set_current_page(0); + + boost::shared_ptr backend = ARDOUR::AudioEngine::instance()->current_backend(); + if (backend && backend->can_change_systemic_latency_when_running ()) { + /* IFF engine was not running before latency detection, stop it */ + if (!was_running_before_lm && ARDOUR::AudioEngine::instance()->running()) { + stop_engine (); + } + } } void diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h index e4b4f2c8e2..39fc23ed0d 100644 --- a/gtk2_ardour/engine_dialog.h +++ b/gtk2_ardour/engine_dialog.h @@ -131,6 +131,7 @@ private: Gtk::VBox lm_vbox; bool have_lm_results; bool lm_running; + bool was_running_before_lm; /* MIDI Tab */