mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-11 09:06:33 +01:00
Add button to Engine Dialog to choose between Portaudio callback and blocking API
This commit is contained in:
parent
85b4acc916
commit
2b4ac72e5d
2 changed files with 60 additions and 0 deletions
|
|
@ -87,6 +87,7 @@ EngineControl::EngineControl ()
|
||||||
, midi_devices_button (_("Midi Device Setup"))
|
, midi_devices_button (_("Midi Device Setup"))
|
||||||
, start_stop_button (_("Stop"))
|
, start_stop_button (_("Stop"))
|
||||||
, update_devices_button (_("Refresh Devices"))
|
, update_devices_button (_("Refresh Devices"))
|
||||||
|
, use_buffered_io_button (_("Use Buffered I/O"), ArdourButton::led_default_elements)
|
||||||
, lm_measure_label (_("Measure"))
|
, lm_measure_label (_("Measure"))
|
||||||
, lm_use_button (_("Use results"))
|
, lm_use_button (_("Use results"))
|
||||||
, lm_back_button (_("Back to settings ... (ignore results)"))
|
, lm_back_button (_("Back to settings ... (ignore results)"))
|
||||||
|
|
@ -281,6 +282,11 @@ EngineControl::EngineControl ()
|
||||||
update_devices_button.set_name ("generic button");
|
update_devices_button.set_name ("generic button");
|
||||||
update_devices_button.set_can_focus(true);
|
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);
|
cancel_button = add_button (Gtk::Stock::CLOSE, Gtk::RESPONSE_CANCEL);
|
||||||
ok_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK);
|
ok_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK);
|
||||||
|
|
||||||
|
|
@ -503,6 +509,7 @@ EngineControl::build_notebook ()
|
||||||
|
|
||||||
basic_packer.attach (start_stop_button, 3, 4, 0, 1, xopt, xopt);
|
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 (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.signal_clicked.connect (sigc::mem_fun (*this, &EngineControl::calibrate_audio_latency));
|
||||||
lm_button_audio.set_name ("generic button");
|
lm_button_audio.set_name ("generic button");
|
||||||
|
|
@ -854,14 +861,21 @@ EngineControl::update_sensitivity ()
|
||||||
if (ARDOUR::AudioEngine::instance()->running()) {
|
if (ARDOUR::AudioEngine::instance()->running()) {
|
||||||
start_stop_button.set_text("Stop");
|
start_stop_button.set_text("Stop");
|
||||||
update_devices_button.set_sensitive(false);
|
update_devices_button.set_sensitive(false);
|
||||||
|
use_buffered_io_button.set_sensitive(false);
|
||||||
} else {
|
} else {
|
||||||
if (backend->can_request_update_devices()) {
|
if (backend->can_request_update_devices()) {
|
||||||
update_devices_button.show();
|
update_devices_button.show();
|
||||||
} else {
|
} else {
|
||||||
update_devices_button.hide();
|
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");
|
start_stop_button.set_text("Start");
|
||||||
update_devices_button.set_sensitive(true);
|
update_devices_button.set_sensitive(true);
|
||||||
|
use_buffered_io_button.set_sensitive(true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
update_devices_button.set_sensitive(false);
|
update_devices_button.set_sensitive(false);
|
||||||
|
|
@ -1823,6 +1837,7 @@ EngineControl::store_state (State state)
|
||||||
state->output_channels = get_output_channels ();
|
state->output_channels = get_output_channels ();
|
||||||
state->midi_option = get_midi_option ();
|
state->midi_option = get_midi_option ();
|
||||||
state->midi_devices = _midi_devices;
|
state->midi_devices = _midi_devices;
|
||||||
|
state->use_buffered_io = get_use_buffered_io ();
|
||||||
state->lru = time (NULL) ;
|
state->lru = time (NULL) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1852,6 +1867,8 @@ EngineControl::maybe_display_saved_state ()
|
||||||
input_latency.set_value (state->input_latency);
|
input_latency.set_value (state->input_latency);
|
||||||
output_latency.set_value (state->output_latency);
|
output_latency.set_value (state->output_latency);
|
||||||
|
|
||||||
|
use_buffered_io_button.set_active (state->use_buffered_io);
|
||||||
|
|
||||||
if (!state->midi_option.empty()) {
|
if (!state->midi_option.empty()) {
|
||||||
midi_option_combo.set_active_text (state->midi_option);
|
midi_option_combo.set_active_text (state->midi_option);
|
||||||
_midi_devices = state->midi_devices;
|
_midi_devices = state->midi_devices;
|
||||||
|
|
@ -1889,6 +1906,7 @@ EngineControl::get_state ()
|
||||||
node->add_property ("input-channels", (*i)->input_channels);
|
node->add_property ("input-channels", (*i)->input_channels);
|
||||||
node->add_property ("output-channels", (*i)->output_channels);
|
node->add_property ("output-channels", (*i)->output_channels);
|
||||||
node->add_property ("active", (*i)->active ? "yes" : "no");
|
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 ("midi-option", (*i)->midi_option);
|
||||||
node->add_property ("lru", (*i)->active ? time (NULL) : (*i)->lru);
|
node->add_property ("lru", (*i)->active ? time (NULL) : (*i)->lru);
|
||||||
|
|
||||||
|
|
@ -2033,6 +2051,11 @@ EngineControl::set_state (const XMLNode& root)
|
||||||
}
|
}
|
||||||
state->active = string_is_affirmative (prop->value ());
|
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) {
|
if ((prop = grandchild->property ("midi-option")) == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -2206,6 +2229,7 @@ EngineControl::set_current_state (const State& state)
|
||||||
input_latency.set_value (state->input_latency);
|
input_latency.set_value (state->input_latency);
|
||||||
output_latency.set_value (state->output_latency);
|
output_latency.set_value (state->output_latency);
|
||||||
midi_option_combo.set_active_text (state->midi_option);
|
midi_option_combo.set_active_text (state->midi_option);
|
||||||
|
use_buffered_io_button.set_active (state->use_buffered_io);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2232,6 +2256,7 @@ EngineControl::push_state_to_backend (bool start)
|
||||||
bool change_latency = false;
|
bool change_latency = false;
|
||||||
bool change_channels = false;
|
bool change_channels = false;
|
||||||
bool change_midi = false;
|
bool change_midi = false;
|
||||||
|
bool change_buffered_io = false;
|
||||||
|
|
||||||
uint32_t ochan = get_output_channels ();
|
uint32_t ochan = get_output_channels ();
|
||||||
uint32_t ichan = get_input_channels ();
|
uint32_t ichan = get_input_channels ();
|
||||||
|
|
@ -2282,6 +2307,12 @@ EngineControl::push_state_to_backend (bool start)
|
||||||
change_midi = true;
|
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" */
|
/* zero-requested channels means "all available" */
|
||||||
|
|
||||||
if (ichan == 0) {
|
if (ichan == 0) {
|
||||||
|
|
@ -2451,6 +2482,10 @@ EngineControl::push_state_to_backend (bool start)
|
||||||
backend->set_midi_option (get_midi_option());
|
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 */) {
|
if (1 /* TODO */) {
|
||||||
for (vector<MidiDeviceSettings>::const_iterator p = _midi_devices.begin(); p != _midi_devices.end(); ++p) {
|
for (vector<MidiDeviceSettings>::const_iterator p = _midi_devices.begin(); p != _midi_devices.end(); ++p) {
|
||||||
if (_measure_midi) {
|
if (_measure_midi) {
|
||||||
|
|
@ -2565,6 +2600,12 @@ EngineControl::get_midi_option () const
|
||||||
return midi_option_combo.get_active_text();
|
return midi_option_combo.get_active_text();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
EngineControl::get_use_buffered_io () const
|
||||||
|
{
|
||||||
|
return use_buffered_io_button.get_active();
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
EngineControl::get_input_channels() const
|
EngineControl::get_input_channels() const
|
||||||
{
|
{
|
||||||
|
|
@ -2675,6 +2716,20 @@ EngineControl::update_devices_button_clicked ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
void
|
||||||
EngineControl::manage_control_app_sensitivity ()
|
EngineControl::manage_control_app_sensitivity ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
|
||||||
ArdourButton midi_devices_button;
|
ArdourButton midi_devices_button;
|
||||||
ArdourButton start_stop_button;
|
ArdourButton start_stop_button;
|
||||||
ArdourButton update_devices_button;
|
ArdourButton update_devices_button;
|
||||||
|
ArdourButton use_buffered_io_button;
|
||||||
|
|
||||||
Gtk::Button connect_disconnect_button;
|
Gtk::Button connect_disconnect_button;
|
||||||
|
|
||||||
|
|
@ -162,6 +163,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
|
||||||
std::string get_driver() const;
|
std::string get_driver() const;
|
||||||
std::string get_backend() const;
|
std::string get_backend() const;
|
||||||
std::string get_midi_option () const;
|
std::string get_midi_option () const;
|
||||||
|
bool get_use_buffered_io () const;
|
||||||
|
|
||||||
std::string get_default_device (const std::string&,
|
std::string get_default_device (const std::string&,
|
||||||
const std::vector<std::string>&);
|
const std::vector<std::string>&);
|
||||||
|
|
@ -222,6 +224,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
|
||||||
uint32_t input_channels;
|
uint32_t input_channels;
|
||||||
uint32_t output_channels;
|
uint32_t output_channels;
|
||||||
bool active;
|
bool active;
|
||||||
|
bool use_buffered_io;
|
||||||
std::string midi_option;
|
std::string midi_option;
|
||||||
std::vector<MidiDeviceSettings> midi_devices;
|
std::vector<MidiDeviceSettings> midi_devices;
|
||||||
time_t lru;
|
time_t lru;
|
||||||
|
|
@ -234,6 +237,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
|
||||||
, input_channels (0)
|
, input_channels (0)
|
||||||
, output_channels (0)
|
, output_channels (0)
|
||||||
, active (false)
|
, active (false)
|
||||||
|
, use_buffered_io (false)
|
||||||
, lru (0) {}
|
, lru (0) {}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
@ -306,6 +310,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
|
||||||
void control_app_button_clicked ();
|
void control_app_button_clicked ();
|
||||||
void start_stop_button_clicked ();
|
void start_stop_button_clicked ();
|
||||||
void update_devices_button_clicked ();
|
void update_devices_button_clicked ();
|
||||||
|
void use_buffered_io_button_clicked ();
|
||||||
void use_latency_button_clicked ();
|
void use_latency_button_clicked ();
|
||||||
void manage_control_app_sensitivity ();
|
void manage_control_app_sensitivity ();
|
||||||
int push_state_to_backend (bool start);
|
int push_state_to_backend (bool start);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue