PulseAudio driver will now change the device if the default system device changes

This commit is contained in:
Marcelo Fernandez 2018-12-12 11:17:46 -03:00
parent 4cb6b80090
commit a6743414f8

View file

@ -316,6 +316,7 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) {
AudioDriverPulseAudio *ad = (AudioDriverPulseAudio *)p_udata;
unsigned int write_ofs = 0;
size_t avail_bytes = 0;
uint32_t default_device_msec = OS::get_singleton()->get_ticks_msec();
while (!ad->exit_thread) {
@ -406,6 +407,47 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) {
write_ofs = 0;
}
// If we're using the default device check that the current device is still the default
if (ad->device_name == "Default") {
uint32_t msec = OS::get_singleton()->get_ticks_msec();
if (msec > (default_device_msec + 1000)) {
String old_default_device = ad->default_device;
default_device_msec = msec;
ad->pa_status = 0;
pa_operation *pa_op = pa_context_get_server_info(ad->pa_ctx, &AudioDriverPulseAudio::pa_server_info_cb, (void *)ad);
if (pa_op) {
while (ad->pa_status == 0) {
int ret = pa_mainloop_iterate(ad->pa_ml, 1, NULL);
if (ret < 0) {
ERR_PRINT("pa_mainloop_iterate error");
}
}
pa_operation_unref(pa_op);
} else {
ERR_PRINT("pa_context_get_server_info error");
}
if (old_default_device != ad->default_device) {
ad->finish_device();
Error err = ad->init_device();
if (err != OK) {
ERR_PRINT("PulseAudio: init_device error");
ad->active = false;
ad->exit_thread = true;
break;
}
avail_bytes = 0;
write_ofs = 0;
}
}
}
if (ad->pa_rec_str && pa_stream_get_state(ad->pa_rec_str) == PA_STREAM_READY) {
size_t bytes = pa_stream_readable_size(ad->pa_rec_str);
if (bytes > 0) {