From 3939ef72f8381fe436b3f4438367421c027c5270 Mon Sep 17 00:00:00 2001
From: pionere <[EMAIL REDACTED]>
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 181f66c5783..ab25ec93d5b 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 028debd49a9..9d6f936e713 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;
}