, midi_devices_button (_("Midi Device Setup"))
, start_stop_button (_("Stop"))
, update_devices_button (_("Refresh Devices"))
+ , use_buffered_io_button (_("Use Buffered I/O"), ArdourButton::led_default_elements)
, lm_measure_label (_("Measure"))
, lm_use_button (_("Use results"))
, lm_back_button (_("Back to settings ... (ignore results)"))
update_devices_button.set_name ("generic button");
update_devices_button.set_can_focus(true);
+ use_buffered_io_button.signal_clicked.connect (mem_fun (*this, &EngineControl::use_buffered_io_button_clicked));
+ use_buffered_io_button.set_sensitive (false);
+ use_buffered_io_button.set_name ("generic button");
+ use_buffered_io_button.set_can_focus(true);
+
cancel_button = add_button (Gtk::Stock::CLOSE, Gtk::RESPONSE_CANCEL);
ok_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK);
basic_packer.attach (start_stop_button, 3, 4, 0, 1, xopt, xopt);
basic_packer.attach (update_devices_button, 3, 4, 1, 2, xopt, xopt);
+ basic_packer.attach (use_buffered_io_button, 3, 4, 2, 3, xopt, xopt);
lm_button_audio.signal_clicked.connect (sigc::mem_fun (*this, &EngineControl::calibrate_audio_latency));
lm_button_audio.set_name ("generic button");
if (ARDOUR::AudioEngine::instance()->running()) {
start_stop_button.set_text("Stop");
update_devices_button.set_sensitive(false);
+ use_buffered_io_button.set_sensitive(false);
} else {
if (backend->can_request_update_devices()) {
update_devices_button.show();
} else {
update_devices_button.hide();
}
+ if (backend->can_use_buffered_io()) {
+ use_buffered_io_button.show();
+ } else {
+ use_buffered_io_button.hide();
+ }
start_stop_button.set_text("Start");
update_devices_button.set_sensitive(true);
+ use_buffered_io_button.set_sensitive(true);
}
} else {
update_devices_button.set_sensitive(false);
state->output_channels = get_output_channels ();
state->midi_option = get_midi_option ();
state->midi_devices = _midi_devices;
+ state->use_buffered_io = get_use_buffered_io ();
state->lru = time (NULL) ;
}
input_latency.set_value (state->input_latency);
output_latency.set_value (state->output_latency);
+ use_buffered_io_button.set_active (state->use_buffered_io);
+
if (!state->midi_option.empty()) {
midi_option_combo.set_active_text (state->midi_option);
_midi_devices = state->midi_devices;
node->add_property ("input-channels", (*i)->input_channels);
node->add_property ("output-channels", (*i)->output_channels);
node->add_property ("active", (*i)->active ? "yes" : "no");
+ node->add_property ("use-buffered-io", (*i)->use_buffered_io ? "yes" : "no");
node->add_property ("midi-option", (*i)->midi_option);
node->add_property ("lru", (*i)->active ? time (NULL) : (*i)->lru);
}
state->active = string_is_affirmative (prop->value ());
+ if ((prop = grandchild->property ("use-buffered-io")) == 0) {
+ continue;
+ }
+ state->use_buffered_io = string_is_affirmative (prop->value ());
+
if ((prop = grandchild->property ("midi-option")) == 0) {
continue;
}
input_latency.set_value (state->input_latency);
output_latency.set_value (state->output_latency);
midi_option_combo.set_active_text (state->midi_option);
+ use_buffered_io_button.set_active (state->use_buffered_io);
return true;
}
bool change_latency = false;
bool change_channels = false;
bool change_midi = false;
+ bool change_buffered_io = false;
uint32_t ochan = get_output_channels ();
uint32_t ichan = get_input_channels ();
change_midi = true;
}
+ if (backend->can_use_buffered_io()) {
+ if (get_use_buffered_io() != backend->get_use_buffered_io()) {
+ change_buffered_io = true;
+ }
+ }
+
/* zero-requested channels means "all available" */
if (ichan == 0) {
backend->set_midi_option (get_midi_option());
}
+ if (change_buffered_io) {
+ backend->set_use_buffered_io (use_buffered_io_button.get_active());
+ }
+
if (1 /* TODO */) {
for (vector<MidiDeviceSettings>::const_iterator p = _midi_devices.begin(); p != _midi_devices.end(); ++p) {
if (_measure_midi) {
return midi_option_combo.get_active_text();
}
+bool
+EngineControl::get_use_buffered_io () const
+{
+ return use_buffered_io_button.get_active();
+}
+
uint32_t
EngineControl::get_input_channels() const
{
}
}
+void
+EngineControl::use_buffered_io_button_clicked ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+
+ if (!backend) {
+ return;
+ }
+
+ bool set_buffered_io = !use_buffered_io_button.get_active();
+ use_buffered_io_button.set_active (set_buffered_io);
+ backend->set_use_buffered_io (set_buffered_io);
+}
+
void
EngineControl::manage_control_app_sensitivity ()
{