diff --git a/src/audio/coreaudio/SDL_coreaudio.m b/src/audio/coreaudio/SDL_coreaudio.m index 9b6b81984a..569499854b 100644 --- a/src/audio/coreaudio/SDL_coreaudio.m +++ b/src/audio/coreaudio/SDL_coreaudio.m @@ -436,7 +436,12 @@ static bool UpdateAudioSession(SDL_AudioDevice *device, bool open, bool allow_pl } } } else if (data.playback && data.recording) { - category = AVAudioSessionCategoryPlayAndRecord; + if (allow_playandrecord) { + category = AVAudioSessionCategoryPlayAndRecord; + } else { + // We already failed play and record with AVAudioSessionErrorCodeResourceNotAvailable + return false; + } } else if (data.recording) { category = AVAudioSessionCategoryRecord; } @@ -494,12 +499,15 @@ static bool UpdateAudioSession(SDL_AudioDevice *device, bool open, bool allow_pl if (![session setActive:YES error:&err]) { if ([err code] == AVAudioSessionErrorCodeResourceNotAvailable && category == AVAudioSessionCategoryPlayAndRecord) { - return UpdateAudioSession(device, open, false); + if (UpdateAudioSession(device, open, false)) { + return true; + } else { + return SDL_SetError("Could not activate Audio Session: Resource not available"); + } } NSString *desc = err.description; - SDL_SetError("Could not activate Audio Session: %s", desc.UTF8String); - return false; + return SDL_SetError("Could not activate Audio Session: %s", desc.UTF8String); } session_active = true; ResumeAudioDevices();