From 3939ef72f8381fe436b3f4438367421c027c5270 Mon Sep 17 00:00:00 2001 From: pionere Date: Wed, 19 Jan 2022 17:23:53 +0100 Subject: [PATCH] cleanup SDL_GetAudioDeviceSpec - drop unnecessary hascapture check - call SDL_InvalidParamError and return -1 in case the index is out of range - do not zfill SDL_AudioSpec - adjust documentation to reflect the behavior --- include/SDL_audio.h | 4 +--- src/audio/SDL_audio.c | 35 +++++++++++++++-------------------- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/include/SDL_audio.h b/include/SDL_audio.h index 181f66c57..ab25ec93d 100644 --- a/include/SDL_audio.h +++ b/include/SDL_audio.h @@ -500,9 +500,7 @@ extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, * hardware. * * `spec` will be filled with the sample rate, sample format, and channel - * count. All other values in the structure are filled with 0. When the - * supported struct members are 0, SDL was unable to get the property from the - * backend. + * count. * * \param index the index of the audio device; valid values range from 0 to * SDL_GetNumAudioDevices() - 1 diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index 028debd49..9d6f936e7 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -1112,38 +1112,33 @@ SDL_GetAudioDeviceName(int index, int iscapture) int SDL_GetAudioDeviceSpec(int index, int iscapture, SDL_AudioSpec *spec) { + SDL_AudioDeviceItem *item; + int i, retval; + if (spec == NULL) { return SDL_InvalidParamError("spec"); } - SDL_zerop(spec); - if (!SDL_GetCurrentAudioDriver()) { return SDL_SetError("Audio subsystem is not initialized"); } - if (iscapture && !current_audio.impl.HasCaptureSupport) { - return SDL_SetError("No capture support"); - } - - if (index >= 0) { - SDL_AudioDeviceItem *item; - int i; - - SDL_LockMutex(current_audio.detectionLock); - item = iscapture ? current_audio.inputDevices : current_audio.outputDevices; - i = iscapture ? current_audio.inputDeviceCount : current_audio.outputDeviceCount; - if (index < i) { - for (i--; i > index; i--, item = item->next) { - SDL_assert(item != NULL); - } + SDL_LockMutex(current_audio.detectionLock); + item = iscapture ? current_audio.inputDevices : current_audio.outputDevices; + i = iscapture ? current_audio.inputDeviceCount : current_audio.outputDeviceCount; + if (index >= 0 && index < i) { + for (i--; i > index; i--, item = item->next) { SDL_assert(item != NULL); - SDL_memcpy(spec, &item->spec, sizeof(SDL_AudioSpec)); } - SDL_UnlockMutex(current_audio.detectionLock); + SDL_assert(item != NULL); + SDL_memcpy(spec, &item->spec, sizeof(SDL_AudioSpec)); + retval = 0; + } else { + retval = SDL_InvalidParamError("index"); } + SDL_UnlockMutex(current_audio.detectionLock); - return 0; + return retval; }