Fix WASAPI driver not working when the device doesn't supports the mix format
This commit is contained in:
parent
4f697f73a5
commit
e1e4f96995
1 changed files with 26 additions and 0 deletions
|
@ -238,6 +238,32 @@ Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_c
|
|||
hr = p_device->audio_client->GetMixFormat(&pwfex);
|
||||
ERR_FAIL_COND_V(hr != S_OK, ERR_CANT_OPEN);
|
||||
|
||||
print_verbose("WASAPI: wFormatTag = " + itos(pwfex->wFormatTag));
|
||||
print_verbose("WASAPI: nChannels = " + itos(pwfex->nChannels));
|
||||
print_verbose("WASAPI: nSamplesPerSec = " + itos(pwfex->nSamplesPerSec));
|
||||
print_verbose("WASAPI: nAvgBytesPerSec = " + itos(pwfex->nAvgBytesPerSec));
|
||||
print_verbose("WASAPI: nBlockAlign = " + itos(pwfex->nBlockAlign));
|
||||
print_verbose("WASAPI: wBitsPerSample = " + itos(pwfex->wBitsPerSample));
|
||||
print_verbose("WASAPI: cbSize = " + itos(pwfex->cbSize));
|
||||
|
||||
WAVEFORMATEX *closest = NULL;
|
||||
hr = p_device->audio_client->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, pwfex, &closest);
|
||||
if (hr == S_FALSE) {
|
||||
WARN_PRINT("WASAPI: Mix format is not supported by the Device");
|
||||
if (closest) {
|
||||
print_verbose("WASAPI: closest->wFormatTag = " + itos(closest->wFormatTag));
|
||||
print_verbose("WASAPI: closest->nChannels = " + itos(closest->nChannels));
|
||||
print_verbose("WASAPI: closest->nSamplesPerSec = " + itos(closest->nSamplesPerSec));
|
||||
print_verbose("WASAPI: closest->nAvgBytesPerSec = " + itos(closest->nAvgBytesPerSec));
|
||||
print_verbose("WASAPI: closest->nBlockAlign = " + itos(closest->nBlockAlign));
|
||||
print_verbose("WASAPI: closest->wBitsPerSample = " + itos(closest->wBitsPerSample));
|
||||
print_verbose("WASAPI: closest->cbSize = " + itos(closest->cbSize));
|
||||
|
||||
WARN_PRINT("WASAPI: Using closest match instead");
|
||||
pwfex = closest;
|
||||
}
|
||||
}
|
||||
|
||||
// Since we're using WASAPI Shared Mode we can't control any of these, we just tag along
|
||||
p_device->channels = pwfex->nChannels;
|
||||
p_device->format_tag = pwfex->wFormatTag;
|
||||
|
|
Loading…
Reference in a new issue