summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-09-10 15:41:19 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-09-10 15:41:19 -0400
commit209e4bdcaed8e0f7d66fa5673f9049948e1f1d53 (patch)
treebdf1ffca2a5f1f20ac652e6803a77cfcf8278363 /gtk2_ardour
parenta6815efb86e5091ce82f66ddfb60b2b2cffc587a (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.cc6
-rw-r--r--gtk2_ardour/ardour_ui.h2
-rw-r--r--gtk2_ardour/engine_dialog.cc24
-rw-r--r--gtk2_ardour/engine_dialog.h19
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__ */