diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-09-10 15:41:19 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-09-10 15:41:19 -0400 |
commit | 209e4bdcaed8e0f7d66fa5673f9049948e1f1d53 (patch) | |
tree | bdf1ffca2a5f1f20ac652e6803a77cfcf8278363 /gtk2_ardour | |
parent | a6815efb86e5091ce82f66ddfb60b2b2cffc587a (diff) |
many changes relating to session construction and audioengine interaction
every session member is now initialized using C++ constructor syntax
session construction reordered to clarify the split(s) between work
where the engine is not relevant and work where is it is. this
split is still not 100% obvious, but is enormously clearer than
previously.
if engine/backend are not running as session is created, and the SR
of the sample rate is known, attempt to force backend to that value.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/engine_dialog.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/engine_dialog.h | 19 |
4 files changed, 37 insertions, 14 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index d6c6863b14..4992e0a14b 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -268,7 +268,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) /* handle Audio/MIDI setup when session requires it */ - ARDOUR::Session::AudioEngineSetupRequired.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::do_audio_midi_setup, this)); + ARDOUR::Session::AudioEngineSetupRequired.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::do_audio_midi_setup, this, _1)); /* handle sr mismatch with a dialog (PROBLEM: needs to return a value and thus cannot be x-thread) */ @@ -4159,10 +4159,12 @@ ARDOUR_UI::launch_audio_midi_setup () } int -ARDOUR_UI::do_audio_midi_setup () +ARDOUR_UI::do_audio_midi_setup (uint32_t desired_sample_rate) { launch_audio_midi_setup (); + _audio_midi_setup->set_desired_sample_rate (desired_sample_rate); + int r = _audio_midi_setup->run (); switch (r) { diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 77e81fd23a..fa8eb18f01 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -750,7 +750,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr EngineControl* _audio_midi_setup; void launch_audio_midi_setup (); - int do_audio_midi_setup (); + int do_audio_midi_setup (uint32_t); }; #endif /* __ardour_gui_h__ */ diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index b03dc9a304..b97a7133e6 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -65,6 +65,7 @@ EngineControl::EngineControl () , control_app_button (_("Launch Control App")) , basic_packer (9, 3) , ignore_changes (0) + , _desired_sample_rate (0) { build_notebook (); @@ -340,6 +341,8 @@ EngineControl::device_changed () ignore_changes++; /* sample rates */ + + string desired; vector<float> sr = backend->available_sample_rates (device_name); for (vector<float>::const_iterator x = sr.begin(); x != sr.end(); ++x) { @@ -350,11 +353,17 @@ EngineControl::device_changed () snprintf (buf, sizeof (buf), "%.0f kHz", (*x)/1000.0); } s.push_back (buf); + if (*x == _desired_sample_rate) { + desired = buf; + } } set_popdown_strings (sample_rate_combo, s); - sample_rate_combo.set_active_text (s.front()); - + if (desired.empty()) { + sample_rate_combo.set_active_text (s.front()); + } else { + sample_rate_combo.set_active_text (desired); + } vector<uint32_t> bs = backend->available_buffer_sizes(device_name); s.clear (); @@ -514,7 +523,9 @@ EngineControl::maybe_display_saved_state () if (state) { ignore_changes++; - sample_rate_combo.set_active_text (state->sample_rate); + if (!_desired_sample_rate) { + sample_rate_combo.set_active_text (state->sample_rate); + } buffer_size_combo.set_active_text (state->buffer_size); input_latency.set_value (state->input_latency); output_latency.set_value (state->output_latency); @@ -843,3 +854,10 @@ EngineControl::manage_control_app_sensitivity () control_app_button.set_sensitive (true); } } + +void +EngineControl::set_desired_sample_rate (uint32_t sr) +{ + _desired_sample_rate = sr; + device_changed (); +} diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h index cdeb18a2c7..a92d0629f2 100644 --- a/gtk2_ardour/engine_dialog.h +++ b/gtk2_ardour/engine_dialog.h @@ -37,14 +37,16 @@ class EngineControl : public ArdourDialog { public: - EngineControl (); - ~EngineControl (); - - static bool need_setup (); - - XMLNode& get_state (); - void set_state (const XMLNode&); - + EngineControl (); + ~EngineControl (); + + static bool need_setup (); + + XMLNode& get_state (); + void set_state (const XMLNode&); + + void set_desired_sample_rate (uint32_t); + private: Gtk::Notebook notebook; @@ -153,6 +155,7 @@ class EngineControl : public ArdourDialog { void control_app_button_clicked (); void manage_control_app_sensitivity (); int push_state_to_backend (bool start); + uint32_t _desired_sample_rate; }; #endif /* __gtk2_ardour_engine_dialog_h__ */ |