Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix audio driver wasapi audio input handling #75628

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 32 additions & 30 deletions drivers/wasapi/audio_driver_wasapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -891,31 +891,30 @@ void AudioDriverWASAPI::thread_func(void *p_udata) {
ERR_BREAK(hr != S_OK);
}
}
}

// If we're using the Default output device and it changed finish it so we'll re-init the output device
if (ad->audio_input.device_name == "Default" && default_input_device_changed) {
Error err = ad->finish_input_device();
if (err != OK) {
ERR_PRINT("WASAPI: finish_input_device error");
}
bool reinitDevice = false;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
bool reinitDevice = false;
bool reinit_device = false;

Use snake_case


default_input_device_changed = false;
}
// If we're using the Default input device and it changed finish it so we'll re-init the input device
if (ad->audio_input.device_name == "Default" && default_input_device_changed) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (ad->audio_input.device_name == "Default" && default_input_device_changed) {
if (default_input_device_changed && ad->audio_input.device_name == "Default") {

Cheaper condition first

reinitDevice = ad->audio_input.active.is_set();
default_input_device_changed = false;
}

// User selected a new input device, finish the current one so we'll init the new input device
if (ad->audio_input.device_name != ad->audio_input.new_device) {
ad->audio_input.device_name = ad->audio_input.new_device;
Error err = ad->finish_input_device();
if (err != OK) {
ERR_PRINT("WASAPI: finish_input_device error");
}
}
// User selected a new input device, finish the current one so we'll init the new input device
if (ad->audio_input.device_name != ad->audio_input.new_device) {
ad->audio_input.device_name = ad->audio_input.new_device;
reinitDevice = ad->audio_input.active.is_set();
}

if (!ad->audio_input.audio_client) {
Error err = ad->init_input_device(true);
if (err == OK) {
ad->input_start();
}
if (reinitDevice) {
Error err = ad->finish_input_device();
if (err != OK) {
ERR_PRINT("WASAPI: finish_input_device error");
}
err = ad->input_start();
if (err != OK) {
ERR_PRINT("WASAPI: input_start error");
}
}

Expand Down Expand Up @@ -960,30 +959,33 @@ void AudioDriverWASAPI::finish() {
}

Error AudioDriverWASAPI::input_start() {
if (audio_input.active.is_set()) {
return FAILED;
}

Error err = init_input_device();
if (err != OK) {
ERR_PRINT("WASAPI: init_input_device error");
return err;
}

if (audio_input.active.is_set()) {
return FAILED;
}

audio_input.audio_client->Start();
audio_input.active.set();
return OK;
}

Error AudioDriverWASAPI::input_stop() {
if (audio_input.active.is_set()) {
audio_input.audio_client->Stop();
audio_input.active.clear();
if (!audio_input.active.is_set()) {
return FAILED;
}

return OK;
Error err = finish_input_device();
if (err != OK) {
ERR_PRINT("WASAPI: finish_input_device error");
return err;
}

return FAILED;
return OK;
}

PackedStringArray AudioDriverWASAPI::get_input_device_list() {
Expand Down
Loading