Finalize experiment: always propagate solo via sends
See also caf057f06d
This commit is contained in:
parent
8b6e1d78f9
commit
2e98c57fb8
|
@ -110,8 +110,7 @@ InternalSend::propagate_solo ()
|
|||
if ((*i) == _send_to || (*i)->is_master() || (*i)->is_monitor() || (*i)->is_auditioner()) {
|
||||
continue;
|
||||
}
|
||||
bool sends_only;
|
||||
bool does_feed = _send_to->feeds (*i, &sends_only);
|
||||
bool does_feed = _send_to->feeds (*i);
|
||||
if (does_feed && to_soloed_upstream) {
|
||||
(*i)->solo_control()->mod_solo_by_others_upstream (-1);
|
||||
}
|
||||
|
@ -129,9 +128,7 @@ InternalSend::propagate_solo ()
|
|||
if (*i == _send_from || !(*i)->can_solo()) {
|
||||
continue;
|
||||
}
|
||||
bool sends_only;
|
||||
bool does_feed = (*i)->feeds (_send_from, &sends_only);
|
||||
if (does_feed) {
|
||||
if ((*i)->feeds (_send_from)) {
|
||||
(*i)->solo_control()->mod_solo_by_others_downstream (-1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -756,10 +756,7 @@ Route::push_solo_isolate_upstream (int32_t delta)
|
|||
continue;
|
||||
}
|
||||
|
||||
bool sends_only;
|
||||
bool does_feed = feeds (*i, &sends_only);
|
||||
|
||||
if (does_feed /*&& !sends_only*/) {
|
||||
if (feeds (*i)) {
|
||||
(*i)->solo_isolate_control()->mod_solo_isolated_by_upstream (delta);
|
||||
}
|
||||
}
|
||||
|
@ -770,9 +767,6 @@ Route::push_solo_upstream (int delta)
|
|||
{
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose("\t ... INVERT push from %1\n", _name));
|
||||
for (FedBy::iterator i = _fed_by.begin(); i != _fed_by.end(); ++i) {
|
||||
if (i->sends_only) {
|
||||
/* continue; */
|
||||
}
|
||||
boost::shared_ptr<Route> sr (i->r.lock());
|
||||
if (sr) {
|
||||
sr->solo_control()->mod_solo_by_others_downstream (-delta);
|
||||
|
@ -3701,9 +3695,7 @@ Route::input_change_handler (IOChange change, void * /*src*/)
|
|||
if ((*i).get() == this || (*i)->is_master() || (*i)->is_monitor() || (*i)->is_auditioner()) {
|
||||
continue;
|
||||
}
|
||||
bool sends_only;
|
||||
bool does_feed = (*i)->direct_feeds_according_to_reality (boost::dynamic_pointer_cast<Route> (shared_from_this()), &sends_only);
|
||||
if (does_feed /*&& !sends_only*/) {
|
||||
if ((*i)->direct_feeds_according_to_reality (boost::dynamic_pointer_cast<Route> (shared_from_this()))) {
|
||||
if ((*i)->soloed()) {
|
||||
++sbou;
|
||||
}
|
||||
|
@ -3746,13 +3738,12 @@ Route::input_change_handler (IOChange change, void * /*src*/)
|
|||
if ((*i).get() == this || (*i)->is_master() || (*i)->is_monitor() || (*i)->is_auditioner()) {
|
||||
continue;
|
||||
}
|
||||
bool sends_only;
|
||||
bool does_feed = feeds (*i, &sends_only);
|
||||
if (delta <= 0 && does_feed /*&& !sends_only*/) {
|
||||
bool does_feed = feeds (*i);
|
||||
if (delta <= 0 && does_feed) {
|
||||
(*i)->solo_control()->mod_solo_by_others_upstream (delta);
|
||||
}
|
||||
|
||||
if (idelta < 0 && does_feed /*&& !sends_only*/) {
|
||||
if (idelta < 0 && does_feed) {
|
||||
(*i)->solo_isolate_control()->mod_solo_isolated_by_upstream (-1);
|
||||
}
|
||||
}
|
||||
|
@ -3799,9 +3790,7 @@ Route::output_change_handler (IOChange change, void * /*src*/)
|
|||
if ((*i).get() == this || (*i)->is_master() || (*i)->is_monitor() || (*i)->is_auditioner()) {
|
||||
continue;
|
||||
}
|
||||
bool sends_only;
|
||||
bool does_feed = direct_feeds_according_to_reality (*i, &sends_only);
|
||||
if (does_feed /*&& !sends_only*/) {
|
||||
if (direct_feeds_according_to_reality (*i)) {
|
||||
if ((*i)->soloed()) {
|
||||
++sbod;
|
||||
break;
|
||||
|
@ -3821,9 +3810,7 @@ Route::output_change_handler (IOChange change, void * /*src*/)
|
|||
if ((*i).get() == this || !can_solo()) {
|
||||
continue;
|
||||
}
|
||||
bool sends_only;
|
||||
bool does_feed = (*i)->feeds (shared_this, &sends_only);
|
||||
if (delta != 0 && does_feed /*&& !sends_only*/) {
|
||||
if (delta != 0 && (*i)->feeds (shared_this)) {
|
||||
(*i)->solo_control()->mod_solo_by_others_downstream (delta);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3690,7 +3690,6 @@ Session::route_solo_changed (bool self_solo_changed, Controllable::GroupControlD
|
|||
DEBUG_TRACE (DEBUG::Solo, string_compose ("%1\n", route->name()));
|
||||
|
||||
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
|
||||
bool via_sends_only;
|
||||
bool in_signal_flow;
|
||||
|
||||
if ((*i) == route) {
|
||||
|
@ -3718,16 +3717,12 @@ Session::route_solo_changed (bool self_solo_changed, Controllable::GroupControlD
|
|||
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("check feed from %1\n", (*i)->name()));
|
||||
|
||||
if ((*i)->feeds (route, &via_sends_only)) {
|
||||
if ((*i)->feeds (route)) {
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("\tthere is a feed from %1\n", (*i)->name()));
|
||||
if (true /*!via_sends_only*/) {
|
||||
if (!route->soloed_by_others_upstream()) {
|
||||
(*i)->solo_control()->mod_solo_by_others_downstream (delta);
|
||||
} else {
|
||||
DEBUG_TRACE (DEBUG::Solo, "\talready soloed by others upstream\n");
|
||||
}
|
||||
if (!route->soloed_by_others_upstream()) {
|
||||
(*i)->solo_control()->mod_solo_by_others_downstream (delta);
|
||||
} else {
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("\tthere is a send-only feed from %1\n", (*i)->name()));
|
||||
DEBUG_TRACE (DEBUG::Solo, "\talready soloed by others upstream\n");
|
||||
}
|
||||
in_signal_flow = true;
|
||||
} else {
|
||||
|
@ -3736,25 +3731,15 @@ Session::route_solo_changed (bool self_solo_changed, Controllable::GroupControlD
|
|||
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("check feed to %1\n", (*i)->name()));
|
||||
|
||||
if (route->feeds (*i, &via_sends_only)) {
|
||||
/* propagate solo upstream only if routing other than
|
||||
sends is involved, but do consider the other route
|
||||
(*i) to be part of the signal flow even if only
|
||||
sends are involved.
|
||||
*/
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 feeds %2 via sends only %3 sboD %4 sboU %5\n",
|
||||
if (route->feeds (*i)) {
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 feeds %2 sboD %3 sboU %4\n",
|
||||
route->name(),
|
||||
(*i)->name(),
|
||||
via_sends_only,
|
||||
route->soloed_by_others_downstream(),
|
||||
route->soloed_by_others_upstream()));
|
||||
if (true /*!via_sends_only*/) {
|
||||
//NB. Triggers Invert Push, which handles soloed by downstream
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("\tmod %1 by %2\n", (*i)->name(), delta));
|
||||
(*i)->solo_control()->mod_solo_by_others_upstream (delta);
|
||||
} else {
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("\tfeed to %1 ignored, sends-only\n", (*i)->name()));
|
||||
}
|
||||
//NB. Triggers Invert Push, which handles soloed by downstream
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("\tmod %1 by %2\n", (*i)->name(), delta));
|
||||
(*i)->solo_control()->mod_solo_by_others_upstream (delta);
|
||||
in_signal_flow = true;
|
||||
} else {
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose("\tno feed to %1\n", (*i)->name()) );
|
||||
|
|
Loading…
Reference in New Issue
Block a user