summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-08-04 03:36:03 +0200
committerRobin Gareus <robin@gareus.org>2017-08-04 03:39:41 +0200
commitcc4df346974a5d33d2207f749890e33c35b1871d (patch)
tree00c746bc383ca9252ee536cd8a243b8d36a12bdf
parent1d0221349a1b425740171b7ee20b5d705dfcadae (diff)
SNAFU. Allow changing engine buffer-size while running
-rw-r--r--gtk2_ardour/engine_dialog.cc24
1 files changed, 9 insertions, 15 deletions
diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc
index f96bcf1b8b..9475d39ec2 100644
--- a/gtk2_ardour/engine_dialog.cc
+++ b/gtk2_ardour/engine_dialog.cc
@@ -803,22 +803,10 @@ EngineControl::update_sensitivity ()
if (get_popdown_string_count (buffer_size_combo) > 0) {
if (!engine_running) {
buffer_size_combo.set_sensitive (valid);
- } else if (backend->can_change_sample_rate_when_running()) {
+ } else if (backend->can_change_buffer_size_when_running ()) {
buffer_size_combo.set_sensitive (valid || !_have_control);
} else {
-#if 1
- /* TODO
- * Currently there is no way to manually stop the
- * engine in order to re-configure it.
- * This needs to remain sensitive for now.
- *
- * (it's also handy to implicily
- * re-start the engine)
- */
- buffer_size_combo.set_sensitive (true);
-#else
buffer_size_combo.set_sensitive (false);
-#endif
}
} else {
buffer_size_combo.set_sensitive (false);
@@ -1443,7 +1431,7 @@ EngineControl::set_buffersize_popdown_strings ()
s.push_back (bufsize_as_string (*x));
}
- uint32_t previous_size = 0;
+ uint32_t previous_size = backend->buffer_size ();
if (!buffer_size_combo.get_active_text().empty()) {
previous_size = get_buffer_size ();
}
@@ -1634,6 +1622,12 @@ void
EngineControl::buffer_size_changed ()
{
DEBUG_ECONTROL ("buffer_size_changed");
+ if (ARDOUR::AudioEngine::instance()->running()) {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ if (backend && backend->can_change_buffer_size_when_running ()) {
+ backend->set_buffer_size (get_buffer_size());
+ }
+ }
show_buffer_duration ();
}
@@ -1869,7 +1863,7 @@ EngineControl::store_state (State state)
void
EngineControl::maybe_display_saved_state ()
{
- if (!_have_control) {
+ if (!_have_control || ARDOUR::AudioEngine::instance()->running ()) {
return;
}