}
bool
-EngineControl::stop_engine ()
+EngineControl::stop_engine (bool for_latency)
{
- if (ARDOUR::AudioEngine::instance()->stop()) {
+ if (ARDOUR::AudioEngine::instance()->stop(for_latency)) {
MessageDialog msg(*this,
ARDOUR::AudioEngine::instance()->get_last_backend_error());
msg.run();
/* determine if we need to stop the backend before changing parameters */
- if (change_driver || change_device || change_channels || change_latency ||
+ if (change_driver || change_device || change_channels ||
+ (change_latency && !backend->can_change_systemic_latency_when_running ()) ||
(change_rate && !backend->can_change_sample_rate_when_running()) ||
change_midi ||
(change_bufsize && !backend->can_change_buffer_size_when_running())) {
} else {
backend->set_midi_device_enabled ((*p)->name, false);
}
+ if (backend->can_change_systemic_latency_when_running ()) {
+ backend->set_systemic_midi_input_latency ((*p)->name, 0);
+ backend->set_systemic_midi_output_latency ((*p)->name, 0);
+ }
continue;
}
backend->set_midi_device_enabled ((*p)->name, (*p)->enabled);
/* latency tab */
if (ARDOUR::AudioEngine::instance()->running()) {
- // TODO - mark as 'stopped for latency
- stop_engine ();
+ stop_engine (true);
}
{
void post_push ();
void update_sensitivity ();
bool start_engine ();
- bool stop_engine ();
+ bool stop_engine (bool for_latency = false);
/* latency measurement */
void latency_button_clicked ();