X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsession.cc;h=431cadfca0628cc0a8e2edd99f480db5295fe721;hb=6946bdc0830c9f0971d2cd0d54b27e343c54d96a;hp=adaa3ccc84819ce09719291b517fb3ea8b45f6de;hpb=f91e591f40cfe1a2634aff48045c32fbbf24c43a;p=ardour.git diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index adaa3ccc84..431cadfca0 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -37,7 +37,6 @@ #include "pbd/basename.h" #include "pbd/convert.h" -#include "pbd/convert.h" #include "pbd/error.h" #include "pbd/file_utils.h" #include "pbd/md5.h" @@ -318,7 +317,6 @@ Session::Session (AudioEngine &eng, , _midi_ports (0) , _mmc (0) , _vca_manager (new VCAManager (*this)) - , _midi_regions_use_bbt_beats (false) { uint32_t sr = 0; @@ -478,10 +476,10 @@ Session::Session (AudioEngine &eng, } } #endif - _midi_regions_use_bbt_beats = false; _is_new = false; session_loaded (); + BootMessage (_("Session loading complete")); } @@ -912,6 +910,41 @@ Session::setup_click_state (const XMLNode* node) } } +void +Session::get_physical_ports (vector& inputs, vector& outputs, DataType type, bool excluding) +{ + _engine.get_physical_inputs (type, inputs); + + if (excluding) { + /* rip out ControlOnly ports, and ALSA MIDI Through ports */ + + for (vector::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::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 () { @@ -930,9 +963,9 @@ Session::setup_bundles () vector inputs[DataType::num_types]; vector outputs[DataType::num_types]; + for (uint32_t i = 0; i < DataType::num_types; ++i) { - _engine.get_physical_inputs (DataType (DataType::Symbol (i)), inputs[i]); - _engine.get_physical_outputs (DataType (DataType::Symbol (i)), outputs[i]); + get_physical_ports (inputs[i], outputs[i], DataType (DataType::Symbol (i)), true); } /* Create a set of Bundle objects that map @@ -6296,12 +6329,12 @@ Session::goto_end () } void -Session::goto_start () +Session::goto_start (bool and_roll) { if (_session_range_location) { - request_locate (_session_range_location->start(), false); + request_locate (_session_range_location->start(), and_roll); } else { - request_locate (0, false); + request_locate (0, and_roll); } } @@ -6915,8 +6948,7 @@ Session::auto_connect (const AutoConnectRequest& ar) vector physinputs; vector 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();