diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index 356a5284d0..daf418cb24 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -139,7 +139,7 @@ public: void remove_session (); // not a replacement for SessionHandle::session_going_away() Session* session() const { return _session; } - void reconnect_session_routes (); + void reconnect_session_routes (bool reconnect_inputs = true, bool reconnect_outputs = true); class NoBackendAvailable : public std::exception { public: diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index aa5754cd68..df4c366096 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -894,7 +894,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop friend class AudioEngine; void set_block_size (pframes_t nframes); void set_frame_rate (framecnt_t nframes); - void reconnect_existing_routes (bool withLock, bool reconnect_master = false); + void reconnect_existing_routes (bool withLock, bool reconnect_master = true, bool reconnect_inputs = true, bool reconnect_outputs = true); protected: friend class Route; diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 9ef73c39da..3f547eacd9 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -572,10 +572,10 @@ AudioEngine::remove_session () void -AudioEngine::reconnect_session_routes() +AudioEngine::reconnect_session_routes (bool reconnect_inputs, bool reconnect_outputs) { if (_session) { - _session->reconnect_existing_routes(true, true); + _session->reconnect_existing_routes(true, true, reconnect_inputs, reconnect_outputs); } } diff --git a/libs/ardour/engine_state_controller.cc b/libs/ardour/engine_state_controller.cc index 244600fae7..5af3a123c7 100644 --- a/libs/ardour/engine_state_controller.cc +++ b/libs/ardour/engine_state_controller.cc @@ -882,7 +882,7 @@ EngineStateController::set_physical_audio_input_state(const std::string& port_na if (found_state_iter != input_states.end() && found_state_iter->active != state ) { found_state_iter->active = state; - AudioEngine::instance()->reconnect_session_routes(); + AudioEngine::instance()->reconnect_session_routes(true, false); InputConfigChanged(); } @@ -960,7 +960,7 @@ EngineStateController::set_physical_audio_output_state(const std::string& port_n } } - AudioEngine::instance()->reconnect_session_routes(); + AudioEngine::instance()->reconnect_session_routes(false, true); OutputConfigChanged(); } } @@ -1086,7 +1086,7 @@ EngineStateController::set_state_to_all_inputs(bool state) } if (something_changed) { - AudioEngine::instance()->reconnect_session_routes(); + AudioEngine::instance()->reconnect_session_routes(true, false); InputConfigChanged(); } } @@ -1111,7 +1111,7 @@ EngineStateController::set_state_to_all_outputs(bool state) } if (something_changed) { - AudioEngine::instance()->reconnect_session_routes(); + AudioEngine::instance()->reconnect_session_routes(false, true); OutputConfigChanged(); } } @@ -1445,7 +1445,7 @@ EngineStateController::_refresh_stereo_out_channel_states() void EngineStateController::_on_engine_running () { - AudioEngine::instance()->reconnect_session_routes(); + AudioEngine::instance()->reconnect_session_routes(true, true); _current_state->active = true; EngineRunning(); // emit a signal @@ -1471,7 +1471,7 @@ EngineStateController::_on_parameter_changed (const std::string& parameter_name) { if (parameter_name == "output-auto-connect") { - AudioEngine::instance()->reconnect_session_routes(); + AudioEngine::instance()->reconnect_session_routes(false, true); OutputConfigChanged(); // emit a signal OutputConnectionModeChanged(); // emit signal } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 0c9ce38ef7..11c934fa32 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -396,7 +396,7 @@ Session::Session (AudioEngine &eng, } } } else { - reconnect_existing_routes(true, true); + reconnect_existing_routes(true); } _is_new = false; @@ -2141,7 +2141,7 @@ Session::auto_connect_route (boost::shared_ptr route, ChanCount& existing void -Session::reconnect_existing_routes (bool withLock, bool reconnect_master) +Session::reconnect_existing_routes (bool withLock, bool reconnect_master, bool reconnect_inputs, bool reconnect_outputs) { Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock (), Glib::Threads::NOT_LOCK); @@ -2151,8 +2151,8 @@ Session::reconnect_existing_routes (bool withLock, bool reconnect_master) // We need to disconnect the route's inputs and outputs first // basing on autoconnect configuration - bool reconnectIputs = !(Config->get_input_auto_connect() & ManualConnect); - bool reconnectOutputs = !(Config->get_output_auto_connect() & ManualConnect); + bool reconnectIputs = !(Config->get_input_auto_connect() & ManualConnect) && reconnect_inputs; + bool reconnectOutputs = !(Config->get_output_auto_connect() & ManualConnect) && reconnect_outputs; ChanCount existing_inputs; ChanCount existing_outputs; @@ -2866,7 +2866,7 @@ Session::remove_route (boost::shared_ptr route) * Wave Tracks: reconnect routes */ if (ARDOUR::Profile->get_trx () ) { - reconnect_existing_routes(true); + reconnect_existing_routes(true, false); } else { resort_routes (); } @@ -5232,7 +5232,7 @@ Session::notify_remote_id_change () * TODO: move it to GUI */ if (ARDOUR::Profile->get_trx () ) { - reconnect_existing_routes(true); + reconnect_existing_routes(true, false); } }