Browse Source

Revert "WASAPI_WaitDevice: Check current padding before waiting on event"

This reverts commit 09fbb2a07dfca7f3daf4f9c24d5bc0c8ee62cfce.

This was causing issues in CS2 and DOTA:
https://old.reddit.com/r/DotA2/comments/1d4bqe3/dota_2_sound_crackling_since_this_morning/
https://old.reddit.com/r/DotA2/comments/1d44udf/anyone_having_sound_issues_or_any_clue_how_to_fix/
Sam Lantinga 10 months ago
parent
commit
90beffdeb1
1 changed files with 12 additions and 14 deletions
  1. 12 14
      src/audio/wasapi/SDL_wasapi.c

+ 12 - 14
src/audio/wasapi/SDL_wasapi.c

@@ -465,22 +465,20 @@ static int WASAPI_WaitDevice(SDL_AudioDevice *device)
 {
     // WaitDevice does not hold the device lock, so check for recovery/disconnect details here.
     while (RecoverWasapiIfLost(device) && device->hidden->client && device->hidden->event) {
-        UINT32 padding = 0;
-        if (!WasapiFailed(device, IAudioClient_GetCurrentPadding(device->hidden->client, &padding))) {
+        DWORD waitResult = WaitForSingleObjectEx(device->hidden->event, 200, FALSE);
+        if (waitResult == WAIT_OBJECT_0) {
             const UINT32 maxpadding = device->sample_frames;
-            //SDL_Log("WASAPI %s EVENT! padding=%u maxpadding=%u", device->iscapture ? "CAPTURE" : "PLAYBACK", (unsigned int)padding, (unsigned int)maxpadding);
-            if (device->iscapture ? (padding > 0) : (padding < maxpadding)) {
-                break;
+            UINT32 padding = 0;
+            if (!WasapiFailed(device, IAudioClient_GetCurrentPadding(device->hidden->client, &padding))) {
+                //SDL_Log("WASAPI EVENT! padding=%u maxpadding=%u", (unsigned int)padding, (unsigned int)maxpadding);*/
+                if (device->iscapture && (padding > 0)) {
+                    break;
+                } else if (!device->iscapture && (padding <= maxpadding)) {
+                    break;
+                }
             }
-        }
-
-        switch (WaitForSingleObjectEx(device->hidden->event, 200, FALSE)) {
-        case WAIT_OBJECT_0:
-        case WAIT_TIMEOUT:
-            break;
-
-        default:
-            //SDL_Log("WASAPI FAILED EVENT!");
+        } else if (waitResult != WAIT_TIMEOUT) {
+            //SDL_Log("WASAPI FAILED EVENT!");*/
             IAudioClient_Stop(device->hidden->client);
             return -1;
         }