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
WASAPI_FlushCapture(_THIS)
{
if (RecoverWasapiIfLost(this)) {
BYTE *ptr = NULL;
UINT32 frames = 0;
DWORD flags = 0;
BYTE *ptr = NULL;
UINT32 frames = 0;
DWORD flags = 0;
/* just read until we stop getting packets, throwing them away. */
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. */
}
/* just read until we stop getting packets, throwing them away. */
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);
}
SDL_AudioStreamClear(this->hidden->capturestream);
}
static void