summaryrefslogtreecommitdiff
path: root/libs/ardour/session.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-07-09 12:21:32 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-09-27 14:59:30 -0500
commit1c9fdc0ce88a542d0a98e971af05a33f08ab75f5 (patch)
tree1f9e15888a34700df41fc88b3a2f551fe562b6c1 /libs/ardour/session.cc
parent47ba20143e06445a9977f4757d816439ea8042d0 (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.cc63
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();