diff options
-rw-r--r-- | libs/ardour/ardour/route.h | 2 | ||||
-rw-r--r-- | libs/ardour/route.cc | 33 | ||||
-rw-r--r-- | libs/ardour/session.cc | 14 |
3 files changed, 40 insertions, 9 deletions
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index b2e3d1236e..7b090af35c 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -603,6 +603,8 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, bool _last_custom_meter_was_at_end; void reset_instrument_info (); + + void set_remote_control_id_internal (uint32_t id, bool notify_class_listeners = true); }; } // namespace ARDOUR diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 8546c3ce76..1d1b75239b 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -202,12 +202,13 @@ Route::set_remote_control_id (uint32_t id, bool notify_class_listeners) if (Config->get_remote_model() != UserOrdered) { return; } - - if (id < 1) { - error << _("Remote Control ID's start at one, not zero") << endmsg; - return; - } + set_remote_control_id_internal (id, notify_class_listeners); +} + +void +Route::set_remote_control_id_internal (uint32_t id, bool notify_class_listeners) +{ /* force IDs for master/monitor busses and prevent any other route from accidentally getting these IDs (i.e. legacy sessions) @@ -221,6 +222,11 @@ Route::set_remote_control_id (uint32_t id, bool notify_class_listeners) id = MonitorBusRemoteControlID; } + if (id < 1) { + error << _("Remote Control ID's start at one, not zero") << endmsg; + return; + } + /* don't allow it to collide */ if (!is_master () && !is_monitor() && @@ -661,6 +667,7 @@ void Route::set_solo (bool yn, void *src) { if (_solo_safe) { + DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 ignore solo change due to solo-safe\n", name())); return; } @@ -669,6 +676,9 @@ Route::set_solo (bool yn, void *src) return; } + DEBUG_TRACE (DEBUG::Solo, string_compose ("%1: set solo => %2, src: %3 grp ? %4 currently self-soloed ? %5\n", + name(), yn, src, (src == _route_group), self_soloed())); + if (self_soloed() != yn) { set_self_solo (yn); set_mute_master_solo (); @@ -680,6 +690,7 @@ Route::set_solo (bool yn, void *src) void Route::set_self_solo (bool yn) { + DEBUG_TRACE (DEBUG::Solo, string_compose ("%1: set SELF solo => %2\n", name(), yn)); _self_solo = yn; } @@ -687,9 +698,13 @@ void Route::mod_solo_by_others_upstream (int32_t delta) { if (_solo_safe) { + DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 ignore solo-by-upstream due to solo-safe\n", name())); return; } + DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 mod solo-by-upstream by %2, current up = %3 down = %4\n", + name(), delta, _soloed_by_others_upstream, _soloed_by_others_downstream)); + uint32_t old_sbu = _soloed_by_others_upstream; if (delta < 0) { @@ -743,9 +758,13 @@ void Route::mod_solo_by_others_downstream (int32_t delta) { if (_solo_safe) { + DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 ignore solo-by-downstream due to solo safe\n", name())); return; } + DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 mod solo-by-downstream by %2, current up = %3 down = %4\n", + name(), delta, _soloed_by_others_upstream, _soloed_by_others_downstream)); + if (delta < 0) { if (_soloed_by_others_downstream >= (uint32_t) abs (delta)) { _soloed_by_others_downstream += delta; @@ -2166,7 +2185,7 @@ Route::set_state (const XMLNode& node, int version) if ((prop = child->property (X_("id"))) != 0) { int32_t x; sscanf (prop->value().c_str(), "%d", &x); - set_remote_control_id (x); + set_remote_control_id_internal (x); } } else if (child->name() == X_("MuteMaster")) { @@ -2427,7 +2446,7 @@ Route::set_state_2X (const XMLNode& node, int version) if ((prop = child->property (X_("id"))) != 0) { int32_t x; sscanf (prop->value().c_str(), "%d", &x); - set_remote_control_id (x); + set_remote_control_id_internal (x); } } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index e98b1b6877..da5f956c4b 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -2549,14 +2549,17 @@ Session::route_solo_changed (bool self_solo_change, void* /*src*/, boost::weak_p DEBUG_TRACE (DEBUG::Solo, string_compose ("check feed from %1\n", (*i)->name())); if ((*i)->feeds (route, &via_sends_only)) { + DEBUG_TRACE (DEBUG::Solo, string_compose ("\tthere is a feed from %1\n", (*i)->name())); if (!via_sends_only) { if (!route->soloed_by_others_upstream()) { (*i)->mod_solo_by_others_downstream (delta); } + } else { + DEBUG_TRACE (DEBUG::Solo, string_compose ("\tthere is a send-only feed from %1\n", (*i)->name())); } in_signal_flow = true; } else { - DEBUG_TRACE (DEBUG::Solo, "\tno feed from\n"); + DEBUG_TRACE (DEBUG::Solo, string_compose ("\tno feed from %1\n", (*i)->name())); } DEBUG_TRACE (DEBUG::Solo, string_compose ("check feed to %1\n", (*i)->name())); @@ -2577,7 +2580,11 @@ Session::route_solo_changed (bool self_solo_change, void* /*src*/, boost::weak_p if (!route->soloed_by_others_downstream()) { DEBUG_TRACE (DEBUG::Solo, string_compose ("\tmod %1 by %2\n", (*i)->name(), delta)); (*i)->mod_solo_by_others_upstream (delta); + } else { + DEBUG_TRACE (DEBUG::Solo, "\talready soloed by others downstream\n"); } + } else { + DEBUG_TRACE (DEBUG::Solo, string_compose ("\tfeed to %1 ignored, sends-only\n", (*i)->name())); } in_signal_flow = true; } else { @@ -2599,7 +2606,7 @@ Session::route_solo_changed (bool self_solo_change, void* /*src*/, boost::weak_p */ for (RouteList::iterator i = uninvolved.begin(); i != uninvolved.end(); ++i) { - DEBUG_TRACE (DEBUG::Solo, string_compose ("mute change for %1\n", (*i)->name())); + DEBUG_TRACE (DEBUG::Solo, string_compose ("mute change for %1, which neither feeds or is fed by %2\n", (*i)->name(), route->name())); (*i)->mute_changed (this); } @@ -2649,6 +2656,9 @@ Session::update_route_solo_state (boost::shared_ptr<RouteList> r) _solo_isolated_cnt = isolated; IsolatedChanged (); /* EMIT SIGNAL */ } + + DEBUG_TRACE (DEBUG::Solo, string_compose ("solo state updated by session, soloed? %1 listeners %2 isolated %3\n", + something_soloed, listeners, isolated)); } boost::shared_ptr<RouteList> |