Fixed infinite recursion if the WASAPI audio device couldn't be recovered

Sam Lantinga 2017-07-27 22:52:19 -07:00
parent f033ce61e1
commit 4a734209a3
1 changed files with 13 additions and 15 deletions

View File

@ -605,24 +605,22 @@ WASAPI_CaptureFromDevice(_THIS, void *buffer, int buflen)
static void static void
WASAPI_FlushCapture(_THIS) WASAPI_FlushCapture(_THIS)
{ {
if (RecoverWasapiIfLost(this)) { BYTE *ptr = NULL;
BYTE *ptr = NULL; UINT32 frames = 0;
UINT32 frames = 0; DWORD flags = 0;
DWORD flags = 0;
/* just read until we stop getting packets, throwing them away. */ /* just read until we stop getting packets, throwing them away. */
while (SDL_TRUE) { while (SDL_TRUE) {
const HRESULT ret = IAudioCaptureClient_GetBuffer(this->hidden->capture, &ptr, &frames, &flags, NULL, NULL); const HRESULT ret = IAudioCaptureClient_GetBuffer(this->hidden->capture, &ptr, &frames, &flags, NULL, NULL);
if (ret == AUDCLNT_S_BUFFER_EMPTY) { if (ret == AUDCLNT_S_BUFFER_EMPTY) {
break; /* no more buffered data; we're done. */ break; /* no more buffered data; we're done. */
} else if (WasapiFailed(this, ret)) { } else if (WasapiFailed(this, ret)) {
break; /* failed for some other reason, abort. */ break; /* failed for some other reason, abort. */
} else if (WasapiFailed(this, IAudioCaptureClient_ReleaseBuffer(this->hidden->capture, frames))) { } else if (WasapiFailed(this, IAudioCaptureClient_ReleaseBuffer(this->hidden->capture, frames))) {
break; /* something broke. */ break; /* something broke. */
}
} }
SDL_AudioStreamClear(this->hidden->capturestream);
} }
SDL_AudioStreamClear(this->hidden->capturestream);
} }
static void static void