+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;
+ }
+ }
+ }
+}
+