diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2015-05-09 19:34:50 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2015-06-29 14:18:11 -0400 |
commit | fab465c4cca420f8e0fb5f5469f7e6aa67f871c5 (patch) | |
tree | f11fa3cb9ad90aa06f432508615496952b5c5163 /libs | |
parent | c57aecafb18e6c3868bdce6db0ee5cfaf801dca6 (diff) |
bring in more connection-related changes from Tracks
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/midiport_manager.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 2 | ||||
-rw-r--r-- | libs/ardour/engine_state_controller.cc | 6 | ||||
-rw-r--r-- | libs/ardour/session.cc | 72 |
4 files changed, 79 insertions, 4 deletions
diff --git a/libs/ardour/ardour/midiport_manager.h b/libs/ardour/ardour/midiport_manager.h index 5e87238c22..4d6453b5cb 100644 --- a/libs/ardour/ardour/midiport_manager.h +++ b/libs/ardour/ardour/midiport_manager.h @@ -60,6 +60,9 @@ class LIBARDOUR_API MidiPortManager { MIDI::Port* scene_input_port () const { return _scene_input_port; } MIDI::Port* scene_output_port () const { return _scene_output_port; } + boost::shared_ptr<MidiPort> mmc_in() const { return boost::dynamic_pointer_cast<MidiPort>(_mmc_in); } + boost::shared_ptr<MidiPort> mmc_out() const { return boost::dynamic_pointer_cast<MidiPort>(_mmc_out); } + boost::shared_ptr<MidiPort> scene_in() const { return boost::dynamic_pointer_cast<MidiPort>(_scene_in); } boost::shared_ptr<MidiPort> scene_out() const { return boost::dynamic_pointer_cast<MidiPort>(_scene_out); } diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 9f560524f4..b5e539cbc4 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -996,6 +996,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop MIDI::MachineControl& mmc() { return *_mmc; } void reconnect_midi_scene_ports (bool); + void reconnect_mtc_ports (); + void reconnect_mmc_ports (bool); protected: friend class AudioEngine; diff --git a/libs/ardour/engine_state_controller.cc b/libs/ardour/engine_state_controller.cc index 64273eb38c..4bcf345175 100644 --- a/libs/ardour/engine_state_controller.cc +++ b/libs/ardour/engine_state_controller.cc @@ -582,10 +582,10 @@ EngineStateController::_validate_current_device_state() std::vector<pframes_t>::iterator bs_iter = std::find (buffer_sizes.begin(), buffer_sizes.end(), _current_state->buffer_size); // if current is not found switch to default if is supported if (bs_iter == buffer_sizes.end()) { - bs_iter = std::find (buffer_sizes.begin(), buffer_sizes.end(), backend->default_buffer_size ()); + bs_iter = std::find (buffer_sizes.begin(), buffer_sizes.end(), backend->default_buffer_size (_current_state->device_name)); if (bs_iter != buffer_sizes.end()) { - _current_state->buffer_size = backend->default_buffer_size (); + _current_state->buffer_size = backend->default_buffer_size (_current_state->device_name); } else { if (!buffer_sizes.empty()) { _current_state->buffer_size = buffer_sizes.front(); @@ -665,7 +665,7 @@ EngineStateController::get_default_buffer_size() const { boost::shared_ptr<AudioBackend> backend = AudioEngine::instance()->current_backend(); assert(backend); - return backend->default_buffer_size(); + return backend->default_buffer_size(_current_state->device_name); } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index e6e6f5f17a..7f40f957f1 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -46,6 +46,7 @@ #include "pbd/search_path.h" #include "pbd/stacktrace.h" #include "pbd/stl_delete.h" +#include "pbd/replace_all.h" #include "pbd/unwind.h" #include "ardour/amp.h" @@ -404,7 +405,8 @@ Session::Session (AudioEngine &eng, string track_name = ""; for (std::vector<string>::size_type i = 0; i < inputs.size(); ++i) { string track_name; - remove_pattern_from_string(inputs[i], "system:capture:", track_name); + track_name = inputs[i]; + replace_all (track_name, "system:capture", ""); list<boost::shared_ptr<AudioTrack> > single_track = new_audio_track (1, 1, Normal, 0, 1, track_name); tracks.insert(tracks.begin(), single_track.front()); @@ -2652,6 +2654,74 @@ Session::reconnect_midi_scene_ports(bool inputs) } } +void +Session::reconnect_mtc_ports() +{ +#if 0 + boost::shared_ptr<MidiPort> mtc_in_ptr = _midi_ports->mtc_input_port(); + + if (mtc_in_ptr) { + mtc_in_ptr->disconnect_all (); + + std::vector<EngineStateController::MidiPortState> midi_port_states; + EngineStateController::instance()->get_physical_midi_input_states (midi_port_states); + + std::vector<EngineStateController::MidiPortState>::iterator state_iter = midi_port_states.begin(); + + for (; state_iter != midi_port_states.end(); ++state_iter) { + if (state_iter->available && state_iter->mtc_in) { + mtc_in_ptr->connect (state_iter->name); + } + } + + if (!_midi_ports->mtc_input_port ()->connected () && + config.get_external_sync () && + (Config->get_sync_source () == MTC) ) { + config.set_external_sync (false); + } + if ( ARDOUR::Profile->get_trx () ) { + // Tracks need this signal to update timecode_source_dropdown + MtcOrLtcInputPortChanged (); //emit signal + } + } +#endif +} + +void +Session::reconnect_mmc_ports(bool inputs) +{ + if (inputs ) { // get all enabled midi input ports + + boost::shared_ptr<MidiPort> mmc_in_ptr = _midi_ports->mmc_in(); + if (mmc_in_ptr) { + mmc_in_ptr->disconnect_all (); + std::vector<std::string> enabled_midi_inputs; + EngineStateController::instance()->get_physical_midi_inputs (enabled_midi_inputs); + + std::vector<std::string>::iterator port_iter = enabled_midi_inputs.begin(); + + for (; port_iter != enabled_midi_inputs.end(); ++port_iter) { + mmc_in_ptr->connect (*port_iter); + } + + } + } else { // get all enabled midi output ports + + boost::shared_ptr<MidiPort> mmc_out_ptr = _midi_ports->mmc_out(); + if (mmc_out_ptr ) { + mmc_out_ptr->disconnect_all (); + std::vector<std::string> enabled_midi_outputs; + EngineStateController::instance()->get_physical_midi_outputs (enabled_midi_outputs); + + std::vector<std::string>::iterator port_iter = enabled_midi_outputs.begin(); + + for (; port_iter != enabled_midi_outputs.end(); ++port_iter) { + mmc_out_ptr->connect (*port_iter); + } + } + } +} + #endif /** Caller must not hold process lock |