Merge pull request #24301 from marcelofg55/default_device_pulseaudio
PulseAudio driver will now change the device if the default system device changes
This commit is contained in:
commit
e4b02513fe
1 changed files with 42 additions and 0 deletions
|
@ -316,6 +316,7 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) {
|
||||||
AudioDriverPulseAudio *ad = (AudioDriverPulseAudio *)p_udata;
|
AudioDriverPulseAudio *ad = (AudioDriverPulseAudio *)p_udata;
|
||||||
unsigned int write_ofs = 0;
|
unsigned int write_ofs = 0;
|
||||||
size_t avail_bytes = 0;
|
size_t avail_bytes = 0;
|
||||||
|
uint32_t default_device_msec = OS::get_singleton()->get_ticks_msec();
|
||||||
|
|
||||||
while (!ad->exit_thread) {
|
while (!ad->exit_thread) {
|
||||||
|
|
||||||
|
@ -406,6 +407,47 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) {
|
||||||
write_ofs = 0;
|
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) {
|
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);
|
size_t bytes = pa_stream_readable_size(ad->pa_rec_str);
|
||||||
if (bytes > 0) {
|
if (bytes > 0) {
|
||||||
|
|
Loading…
Reference in a new issue