Fixed infinite recursion when the microphone is unavailable

This commit is contained in:
Sam Lantinga 2024-11-20 16:07:43 -08:00
parent 1413848f41
commit 932bb968d7

View file

@ -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();