SDL: Fixed crash when we can't recover the audio device under Android

From 36864b60a2a5629c0de1c4e33589b5902322dbc2 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 12 Oct 2026 17:54:08 -0700
Subject: [PATCH] Fixed crash when we can't recover the audio device under
 Android

---
 src/audio/aaudio/SDL_aaudio.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/audio/aaudio/SDL_aaudio.c b/src/audio/aaudio/SDL_aaudio.c
index 85dc10203e4f6..dd99fb4eca8cd 100644
--- a/src/audio/aaudio/SDL_aaudio.c
+++ b/src/audio/aaudio/SDL_aaudio.c
@@ -207,6 +207,10 @@ static bool RecoverAAudioDevice(SDL_AudioDevice *device)
     SDL_copyp(&prevspec, &device->spec);
 
     if (!BuildAAudioStream(device)) {
+        // Restore the buffer sizes that match the allocated buffers, so we don't crash
+        device->sample_frames = prev_sample_frames;
+        SDL_copyp(&device->spec, &prevspec);
+        SDL_UpdatedAudioDeviceFormat(device);
         return false;  // oh well, we tried.
     }
 
@@ -318,10 +322,10 @@ static bool BuildAAudioStream(SDL_AudioDevice *device)
     AAudioStreamBuilder *builder = NULL;
     res = ctx.AAudio_createStreamBuilder(&builder);
     if (res != AAUDIO_OK) {
-        LOGI("SDL Failed AAudio_createStreamBuilder %d", res);
+        SDL_LogError(SDL_LOG_CATEGORY_AUDIO, "SDL Failed AAudio_createStreamBuilder %d", res);
         return SDL_SetError("SDL Failed AAudio_createStreamBuilder %d", res);
     } else if (!builder) {
-        LOGI("SDL Failed AAudio_createStreamBuilder - builder NULL");
+        SDL_LogError(SDL_LOG_CATEGORY_AUDIO, "SDL Failed AAudio_createStreamBuilder - builder NULL");
         return SDL_SetError("SDL Failed AAudio_createStreamBuilder - builder NULL");
     }
 
@@ -383,7 +387,7 @@ static bool BuildAAudioStream(SDL_AudioDevice *device)
 
     res = ctx.AAudioStreamBuilder_openStream(builder, &hidden->stream);
     if (res != AAUDIO_OK) {
-        LOGI("SDL Failed AAudioStreamBuilder_openStream %d", res);
+        SDL_LogError(SDL_LOG_CATEGORY_AUDIO, "SDL Failed AAudioStreamBuilder_openStream %d", res);
         ctx.AAudioStreamBuilder_delete(builder);
         return SDL_SetError("%s : %s", SDL_FUNCTION, ctx.AAudio_convertResultToText(res));
     }
@@ -434,7 +438,7 @@ static bool BuildAAudioStream(SDL_AudioDevice *device)
 
     res = ctx.AAudioStream_requestStart(hidden->stream);
     if (res != AAUDIO_OK) {
-        LOGI("SDL Failed AAudioStream_requestStart %d recording:%d", res, recording);
+        SDL_LogError(SDL_LOG_CATEGORY_AUDIO, "SDL Failed AAudioStream_requestStart %d recording:%d", res, recording);
         return SDL_SetError("%s : %s", SDL_FUNCTION, ctx.AAudio_convertResultToText(res));
     }