mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-11 09:06:33 +01:00
add Session::get_physical_ports() to centralize "get physical ports but (maybe) ignore control-only (and MIDI Through) ports"
This commit is contained in:
parent
47ba20143e
commit
1c9fdc0ce8
2 changed files with 40 additions and 25 deletions
|
|
@ -1528,6 +1528,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
|
||||||
AutoConnectQueue _auto_connect_queue;
|
AutoConnectQueue _auto_connect_queue;
|
||||||
guint _latency_recompute_pending;
|
guint _latency_recompute_pending;
|
||||||
|
|
||||||
|
void get_physical_ports (std::vector<std::string>& inputs, std::vector<std::string>& outputs, DataType type, bool excluding);
|
||||||
|
|
||||||
void auto_connect (const AutoConnectRequest&);
|
void auto_connect (const AutoConnectRequest&);
|
||||||
void queue_latency_recompute ();
|
void queue_latency_recompute ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
void
|
||||||
Session::setup_bundles ()
|
Session::setup_bundles ()
|
||||||
{
|
{
|
||||||
|
|
@ -928,30 +963,9 @@ Session::setup_bundles ()
|
||||||
|
|
||||||
vector<string> inputs[DataType::num_types];
|
vector<string> inputs[DataType::num_types];
|
||||||
vector<string> outputs[DataType::num_types];
|
vector<string> outputs[DataType::num_types];
|
||||||
|
|
||||||
for (uint32_t i = 0; i < DataType::num_types; ++i) {
|
for (uint32_t i = 0; i < DataType::num_types; ++i) {
|
||||||
_engine.get_physical_inputs (DataType (DataType::Symbol (i)), inputs[i]);
|
get_physical_ports (inputs[i], outputs[i], DataType (DataType::Symbol (i)), true);
|
||||||
|
|
||||||
/* 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create a set of Bundle objects that map
|
/* Create a set of Bundle objects that map
|
||||||
|
|
@ -6934,8 +6948,7 @@ Session::auto_connect (const AutoConnectRequest& ar)
|
||||||
vector<string> physinputs;
|
vector<string> physinputs;
|
||||||
vector<string> physoutputs;
|
vector<string> physoutputs;
|
||||||
|
|
||||||
_engine.get_physical_outputs (*t, physoutputs);
|
get_physical_ports (physinputs, physoutputs, *t, true);
|
||||||
_engine.get_physical_inputs (*t, physinputs);
|
|
||||||
|
|
||||||
if (!physinputs.empty() && ar.connect_inputs) {
|
if (!physinputs.empty() && ar.connect_inputs) {
|
||||||
uint32_t nphysical_in = physinputs.size();
|
uint32_t nphysical_in = physinputs.size();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue