[Summary] Improved tracks reconnection logic which increases reconnection time up to 50% for tracks reconnection us cases

This commit is contained in:
GZharun 2014-07-30 16:34:46 +03:00
parent 9c67a37f60
commit f403f8de4e
5 changed files with 16 additions and 16 deletions

View file

@ -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:

View file

@ -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;

View file

@ -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);
}
}

View file

@ -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
}

View file

@ -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> 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> 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);
}
}