summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-05-07 15:09:55 +0200
committerRobin Gareus <robin@gareus.org>2020-05-07 15:12:57 +0200
commit8967df460a933a64b1ecbe122aaf8e86146832e0 (patch)
tree131c34698bb8f791b47308d7dd0c0d29d8176ce1 /libs/ardour
parent2e2ca85131ee9634193e707d9ccb519359e5df0a (diff)
Auditioner: ignore dis/connections during init/shutdown
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/auditioner.cc72
1 files changed, 40 insertions, 32 deletions
diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc
index 6b1921a2f8..6ae58c04be 100644
--- a/libs/ardour/auditioner.cc
+++ b/libs/ardour/auditioner.cc
@@ -528,46 +528,54 @@ Auditioner::seek_response (sampleoffset_t pos) {
void
Auditioner::output_changed (IOChange change, void* /*src*/)
{
- if (change.type & IOChange::ConnectionsChanged) {
- string phys;
- vector<string> connections;
- vector<string> outputs;
- _session.engine().get_physical_outputs (DataType::AUDIO, outputs);
+ if (0 == (change.type & IOChange::ConnectionsChanged)) {
+ return;
+ }
+ if (_session.inital_connect_or_deletion_in_progress ()) {
+ return;
+ }
+ if (_session.reconnection_in_progress ()) {
+ return;
+ }
- if (_session.monitor_out () && _output->connected_to (_session.monitor_out ()->input ())) {
- Config->set_auditioner_output_left ("default");
- Config->set_auditioner_output_right ("default");
- via_monitor = true;
- return;
- }
+ string phys;
+ vector<string> connections;
+ vector<string> outputs;
+ _session.engine().get_physical_outputs (DataType::AUDIO, outputs);
- if (_output->nth (0)->get_connections (connections)) {
- if (outputs.size() > 0) {
- phys = outputs[0];
- }
- if (phys != connections[0]) {
- Config->set_auditioner_output_left (connections[0]);
- } else {
- Config->set_auditioner_output_left ("default");
- }
+ if (_session.monitor_out () && _output->connected_to (_session.monitor_out ()->input ())) {
+ Config->set_auditioner_output_left ("default");
+ Config->set_auditioner_output_right ("default");
+ via_monitor = true;
+ return;
+ }
+
+ if (_output->nth (0)->get_connections (connections)) {
+ if (outputs.size() > 0) {
+ phys = outputs[0];
+ }
+ if (phys != connections[0]) {
+ Config->set_auditioner_output_left (connections[0]);
} else {
- Config->set_auditioner_output_left ("");
+ Config->set_auditioner_output_left ("default");
}
+ } else {
+ Config->set_auditioner_output_left ("");
+ }
- connections.clear ();
+ connections.clear ();
- if (_output->nth (1)->get_connections (connections)) {
- if (outputs.size() > 1) {
- phys = outputs[1];
- }
- if (phys != connections[0]) {
- Config->set_auditioner_output_right (connections[0]);
- } else {
- Config->set_auditioner_output_right ("default");
- }
+ if (_output->nth (1)->get_connections (connections)) {
+ if (outputs.size() > 1) {
+ phys = outputs[1];
+ }
+ if (phys != connections[0]) {
+ Config->set_auditioner_output_right (connections[0]);
} else {
- Config->set_auditioner_output_right ("");
+ Config->set_auditioner_output_right ("default");
}
+ } else {
+ Config->set_auditioner_output_right ("");
}
}