diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-07-09 12:21:32 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-09-27 14:59:30 -0500 |
commit | 1c9fdc0ce88a542d0a98e971af05a33f08ab75f5 (patch) | |
tree | 1f9e15888a34700df41fc88b3a2f551fe562b6c1 /libs/ardour/session.cc | |
parent | 47ba20143e06445a9977f4757d816439ea8042d0 (diff) |
add Session::get_physical_ports() to centralize "get physical ports but (maybe) ignore control-only (and MIDI Through) ports"
Diffstat (limited to 'libs/ardour/session.cc')
-rw-r--r-- | libs/ardour/session.cc | 63 |
1 files changed, 38 insertions, 25 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index b22fe03643..431cadfca0 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -911,6 +911,41 @@ Session::setup_click_state (const XMLNode* node) } void +Session::get_physical_ports (vector<string>& inputs, vector<string>& outputs, DataType type, bool excluding) +{ + _engine.get_physical_inputs (type, inputs); + + if (excluding) { + /* rip out ControlOnly ports, and ALSA MIDI Through ports */ + + for (vector<string>::iterator si = inputs.begin(); si != inputs.end(); ) { + if (PortManager::port_is_control_only (*si)) { + si = inputs.erase (si); + } else if ((*si).find (X_("Midi Through")) != string::npos || (*si).find (X_("Midi-Through")) != string::npos) { + si = inputs.erase (si); + } else { + ++si; + } + } + } + _engine.get_physical_outputs (type, outputs); + + if (excluding) { + /* rip out ControlOnly ports, and ALSA MIDI Through ports */ + + for (vector<string>::iterator si = outputs.begin(); si != outputs.end(); ) { + if (PortManager::port_is_control_only (*si)) { + si = outputs.erase (si); + } else if ((*si).find (X_("Midi Through")) != string::npos || (*si).find (X_("Midi-Through")) != string::npos) { + si = outputs.erase (si); + } else { + ++si; + } + } + } +} + +void Session::setup_bundles () { @@ -928,30 +963,9 @@ Session::setup_bundles () vector<string> inputs[DataType::num_types]; vector<string> outputs[DataType::num_types]; - for (uint32_t i = 0; i < DataType::num_types; ++i) { - _engine.get_physical_inputs (DataType (DataType::Symbol (i)), inputs[i]); - - /* rip out ControlOnly ports */ - - for (vector<string>::iterator si = inputs[i].begin(); si != inputs[i].end(); ) { - if (PortManager::port_is_control_only (*si)) { - si = inputs[i].erase (si); - } else { - ++si; - } - } - _engine.get_physical_outputs (DataType (DataType::Symbol (i)), outputs[i]); - - /* rip out ControlOnly ports */ - - for (vector<string>::iterator si = outputs[i].begin(); si != outputs[i].end(); ) { - if (PortManager::port_is_control_only (*si)) { - si = outputs[i].erase (si); - } else { - ++si; - } - } + for (uint32_t i = 0; i < DataType::num_types; ++i) { + get_physical_ports (inputs[i], outputs[i], DataType (DataType::Symbol (i)), true); } /* Create a set of Bundle objects that map @@ -6934,8 +6948,7 @@ Session::auto_connect (const AutoConnectRequest& ar) vector<string> physinputs; vector<string> physoutputs; - _engine.get_physical_outputs (*t, physoutputs); - _engine.get_physical_inputs (*t, physinputs); + get_physical_ports (physinputs, physoutputs, *t, true); if (!physinputs.empty() && ar.connect_inputs) { uint32_t nphysical_in = physinputs.size(); |