}
}
+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 ()
{
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
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();