Vamp::Plugins::process Lua bindings
[ardour.git] / libs / ardour / session.cc
index b22fe03643ae01f5662dc451c4f54a6d3ff3f35d..431cadfca0628cc0a8e2edd99f480db5295fe721 100644 (file)
@@ -910,6 +910,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();