summaryrefslogtreecommitdiff
path: root/libs/ardour/session.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-10-21 16:32:46 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-10-21 16:32:46 -0400
commit6866359c4800a3443f218c8c3fcff08f83fea9da (patch)
tree0903b08e9d2edb80a98e295bc7e5b24f4ee89d5d /libs/ardour/session.cc
parentfb200cfbb9271433aba7355e29cf8dafc97552bf (diff)
when fetching MIDI ports for bundles and auto-connection, ignore control-only (and "virtual") MIDI ports
"virtual" is a placeholder name for ALSA sequencer MIDI through ports
Diffstat (limited to 'libs/ardour/session.cc')
-rw-r--r--libs/ardour/session.cc48
1 files changed, 15 insertions, 33 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 8313c215ef..5605ac1e6c 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -912,38 +912,11 @@ Session::setup_click_state (const XMLNode* node)
}
void
-Session::get_physical_ports (vector<string>& inputs, vector<string>& outputs, DataType type, bool excluding)
+Session::get_physical_ports (vector<string>& inputs, vector<string>& outputs, DataType type,
+ MidiPortFlags include, MidiPortFlags exclude)
{
- _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;
- }
- }
- }
+ _engine.get_physical_inputs (type, inputs, include, exclude);
+ _engine.get_physical_outputs (type, outputs, include, exclude);
}
void
@@ -966,7 +939,10 @@ Session::setup_bundles ()
vector<string> outputs[DataType::num_types];
for (uint32_t i = 0; i < DataType::num_types; ++i) {
- get_physical_ports (inputs[i], outputs[i], DataType (DataType::Symbol (i)), true);
+ get_physical_ports (inputs[i], outputs[i], DataType (DataType::Symbol (i)),
+ MidiPortFlags (0), /* no specific inclusions */
+ MidiPortFlags (MidiPortControl|MidiPortVirtual) /* exclude control & virtual ports */
+ );
}
/* Create a set of Bundle objects that map
@@ -1050,6 +1026,7 @@ Session::setup_bundles ()
for (uint32_t np = 0; np < inputs[DataType::MIDI].size(); ++np) {
string n = inputs[DataType::MIDI][np];
+
std::string pn = _engine.get_pretty_name_by_name (n);
if (!pn.empty()) {
n = pn;
@@ -6954,7 +6931,12 @@ Session::auto_connect (const AutoConnectRequest& ar)
vector<string> physinputs;
vector<string> physoutputs;
- get_physical_ports (physinputs, physoutputs, *t, true);
+
+ /* for connecting track inputs we only want MIDI ports marked
+ * for "music".
+ */
+
+ get_physical_ports (physinputs, physoutputs, *t, MidiPortMusic);
if (!physinputs.empty() && ar.connect_inputs) {
uint32_t nphysical_in = physinputs.size();