wasapi: Deal with AUDCLNT_S_BUFFER_EMPTY when flushing audio device.
diff --git a/src/audio/wasapi/SDL_wasapi.c b/src/audio/wasapi/SDL_wasapi.c
index a004e47..fb9da1c 100644
--- a/src/audio/wasapi/SDL_wasapi.c
+++ b/src/audio/wasapi/SDL_wasapi.c
@@ -609,9 +609,14 @@ WASAPI_FlushCapture(_THIS)
DWORD flags = 0;
/* just read until we stop getting packets, throwing them away. */
- while (!WasapiFailed(this, IAudioCaptureClient_GetBuffer(this->hidden->capture, &ptr, &frames, &flags, NULL, NULL))) {
- if (WasapiFailed(this, IAudioCaptureClient_ReleaseBuffer(this->hidden->capture, frames))) {
- break;
+ while (SDL_TRUE) {
+ const HRESULT ret = IAudioCaptureClient_GetBuffer(this->hidden->capture, &ptr, &frames, &flags, NULL, NULL));
+ if (ret == AUDCLNT_S_BUFFER_EMPTY) {
+ break; /* no more buffered data; we're done. */
+ } else if (WasapiFailed(this, ret)) {
+ break; /* failed for some other reason, abort. */
+ } else if (WasapiFailed(this, IAudioCaptureClient_ReleaseBuffer(this->hidden->capture, frames))) {
+ break; /* something broke. */
}
}
SDL_AudioStreamClear(this->hidden->capturestream);