From 11dfc4d737a6f61ad8ec0ed50414ae1075caf672 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Sat, 24 Jun 2023 23:10:54 -0400
Subject: [PATCH] test: Update testautomation_audio for SDL3 audio API.
---
test/testautomation_audio.c | 296 +++++-------------------------------
1 file changed, 36 insertions(+), 260 deletions(-)
diff --git a/test/testautomation_audio.c b/test/testautomation_audio.c
index 9cd98a859884..5d6dd4e83566 100644
--- a/test/testautomation_audio.c
+++ b/test/testautomation_audio.c
@@ -176,28 +176,22 @@ static int audio_initOpenCloseQuitAudio(void *arg)
desired.freq = 22050;
desired.format = SDL_AUDIO_S16SYS;
desired.channels = 2;
- desired.samples = 4096;
- desired.callback = audio_testCallback;
- desired.userdata = NULL;
case 1:
/* Set custom desired spec */
desired.freq = 48000;
desired.format = SDL_AUDIO_F32SYS;
desired.channels = 2;
- desired.samples = 2048;
- desired.callback = audio_testCallback;
- desired.userdata = NULL;
break;
}
/* Call Open (maybe multiple times) */
for (k = 0; k <= j; k++) {
- result = SDL_OpenAudioDevice(NULL, 0, &desired, NULL, 0);
+ result = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, &desired);
if (k == 0) {
g_audio_id = result;
}
- SDLTest_AssertPass("Call to SDL_OpenAudioDevice(NULL, 0, desired_spec_%d, NULL, 0), call %d", j, k + 1);
+ SDLTest_AssertPass("Call to SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, desired_spec_%d), call %d", j, k + 1);
SDLTest_AssertCheck(result > 0, "Verify return value; expected: > 0, got: %d", result);
}
@@ -269,9 +263,6 @@ static int audio_pauseUnpauseAudio(void *arg)
desired.freq = 22050;
desired.format = SDL_AUDIO_S16SYS;
desired.channels = 2;
- desired.samples = 4096;
- desired.callback = audio_testCallback;
- desired.userdata = NULL;
break;
case 1:
@@ -279,18 +270,16 @@ static int audio_pauseUnpauseAudio(void *arg)
desired.freq = 48000;
desired.format = SDL_AUDIO_F32SYS;
desired.channels = 2;
- desired.samples = 2048;
- desired.callback = audio_testCallback;
- desired.userdata = NULL;
break;
}
/* Call Open */
- g_audio_id = SDL_OpenAudioDevice(NULL, 0, &desired, NULL, 0);
+ g_audio_id = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, &desired);
result = g_audio_id;
- SDLTest_AssertPass("Call to SDL_OpenAudioDevice(NULL, 0, desired_spec_%d, NULL, 0)", j);
+ SDLTest_AssertPass("Call to SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, desired_spec_%d)", j);
SDLTest_AssertCheck(result > 0, "Verify return value; expected > 0 got: %d", result);
+#if 0 /* !!! FIXME: maybe update this? */
/* Start and stop audio multiple times */
for (l = 0; l < 3; l++) {
SDLTest_Log("Pause/Unpause iteration: %d", l + 1);
@@ -332,6 +321,7 @@ static int audio_pauseUnpauseAudio(void *arg)
SDL_Delay(totalDelay + 10);
SDLTest_AssertCheck(originalCounter == g_audio_testCallbackCounter, "Verify callback counter; expected: %d, got: %d", originalCounter, g_audio_testCallbackCounter);
}
+#endif
/* Call Close */
SDL_CloseAudioDevice(g_audio_id);
@@ -360,49 +350,32 @@ static int audio_enumerateAndNameAudioDevices(void *arg)
{
int t, tt;
int i, n, nn;
- const char *name, *nameAgain;
+ char *name, *nameAgain;
+ SDL_AudioDeviceID *devices = NULL;
/* Iterate over types: t=0 output device, t=1 input/capture device */
for (t = 0; t < 2; t++) {
-
/* Get number of devices. */
- n = SDL_GetNumAudioDevices(t);
- SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(%i)", t);
+ devices = (t) ? SDL_GetAudioCaptureDevices(&n) : SDL_GetAudioOutputDevices(&n);
+ SDLTest_AssertPass("Call to SDL_GetAudio%sDevices(%i)", (t) ? "Capture" : "Output", t);
SDLTest_Log("Number of %s devices < 0, reported as %i", (t) ? "capture" : "output", n);
SDLTest_AssertCheck(n >= 0, "Validate result is >= 0, got: %i", n);
- /* Variation of non-zero type */
- if (t == 1) {
- tt = t + SDLTest_RandomIntegerInRange(1, 10);
- nn = SDL_GetNumAudioDevices(tt);
- SDLTest_AssertCheck(n == nn, "Verify result from SDL_GetNumAudioDevices(%i), expected same number of audio devices %i, got %i", tt, n, nn);
- nn = SDL_GetNumAudioDevices(-tt);
- SDLTest_AssertCheck(n == nn, "Verify result from SDL_GetNumAudioDevices(%i), expected same number of audio devices %i, got %i", -tt, n, nn);
- }
-
/* List devices. */
if (n > 0) {
+ SDLTest_AssertCheck(devices != NULL, "Validate devices is not NULL if n > 0");
for (i = 0; i < n; i++) {
- name = SDL_GetAudioDeviceName(i, t);
- SDLTest_AssertPass("Call to SDL_GetAudioDeviceName(%i, %i)", i, t);
- SDLTest_AssertCheck(name != NULL, "Verify result from SDL_GetAudioDeviceName(%i, %i) is not NULL", i, t);
+ name = SDL_GetAudioDeviceName(devices[i]);
+ SDLTest_AssertPass("Call to SDL_GetAudioDeviceName(%i)", i);
+ SDLTest_AssertCheck(name != NULL, "Verify result from SDL_GetAudioDeviceName(%i) is not NULL", i);
if (name != NULL) {
- SDLTest_AssertCheck(name[0] != '\0', "verify result from SDL_GetAudioDeviceName(%i, %i) is not empty, got: '%s'", i, t, name);
- if (t == 1) {
- /* Also try non-zero type */
- tt = t + SDLTest_RandomIntegerInRange(1, 10);
- nameAgain = SDL_GetAudioDeviceName(i, tt);
- SDLTest_AssertCheck(nameAgain != NULL, "Verify result from SDL_GetAudioDeviceName(%i, %i) is not NULL", i, tt);
- if (nameAgain != NULL) {
- SDLTest_AssertCheck(nameAgain[0] != '\0', "Verify result from SDL_GetAudioDeviceName(%i, %i) is not empty, got: '%s'", i, tt, nameAgain);
- SDLTest_AssertCheck(SDL_strcmp(name, nameAgain) == 0,
- "Verify SDL_GetAudioDeviceName(%i, %i) and SDL_GetAudioDeviceName(%i %i) return the same string",
- i, t, i, tt);
- }
- }
+ SDLTest_AssertCheck(name[0] != '\0', "verify result from SDL_GetAudioDeviceName(%i) is not empty, got: '%s'", i, name);
+ SDL_free(name);
}
}
}
+
+ SDL_free(devices);
}
return TEST_COMPLETED;
@@ -416,42 +389,7 @@ static int audio_enumerateAndNameAudioDevices(void *arg)
*/
static int audio_enumerateAndNameAudioDevicesNegativeTests(void *arg)
{
- int t;
- int i, j, no, nc;
- const char *name;
-
- /* Get number of devices. */
- no = SDL_GetNumAudioDevices(0);
- SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)");
- nc = SDL_GetNumAudioDevices(1);
- SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(1)");
-
- /* Invalid device index when getting name */
- for (t = 0; t < 2; t++) {
- /* Negative device index */
- i = SDLTest_RandomIntegerInRange(-10, -1);
- name = SDL_GetAudioDeviceName(i, t);
- SDLTest_AssertPass("Call to SDL_GetAudioDeviceName(%i, %i)", i, t);
- SDLTest_AssertCheck(name == NULL, "Check SDL_GetAudioDeviceName(%i, %i) result NULL, expected NULL, got: %s", i, t, (name == NULL) ? "NULL" : name);
-
- /* Device index past range */
- for (j = 0; j < 3; j++) {
- i = (t) ? nc + j : no + j;
- name = SDL_GetAudioDeviceName(i, t);
- SDLTest_AssertPass("Call to SDL_GetAudioDeviceName(%i, %i)", i, t);
- SDLTest_AssertCheck(name == NULL, "Check SDL_GetAudioDeviceName(%i, %i) result, expected: NULL, got: %s", i, t, (name == NULL) ? "NULL" : name);
- }
-
- /* Capture index past capture range but within output range */
- if ((no > 0) && (no > nc) && (t == 1)) {
- i = no - 1;
- name = SDL_GetAudioDeviceName(i, t);
- SDLTest_AssertPass("Call to SDL_GetAudioDeviceName(%i, %i)", i, t);
- SDLTest_AssertCheck(name == NULL, "Check SDL_GetAudioDeviceName(%i, %i) result, expected: NULL, got: %s", i, t, (name == NULL) ? "NULL" : name);
- }
- }
-
- return TEST_COMPLETED;
+ return TEST_COMPLETED; /* nothing in here atm since these interfaces changed in SDL3. */
}
/**
@@ -532,8 +470,7 @@ static int audio_buildAudioStream(void *arg)
spec1.format = SDL_AUDIO_S16LSB;
spec1.channels = 2;
spec1.freq = 22050;
- stream = SDL_CreateAudioStream(spec1.format, spec1.channels, spec1.freq,
- spec1.format, spec1.channels, spec1.freq);
+ stream = SDL_CreateAudioStream(&spec1, &spec1);
SDLTest_AssertPass("Call to SDL_CreateAudioStream(spec1 ==> spec1)");
SDLTest_AssertCheck(stream != NULL, "Verify stream value; expected: != NULL, got: %p", (void *)stream);
SDL_DestroyAudioStream(stream);
@@ -545,8 +482,7 @@ static int audio_buildAudioStream(void *arg)
spec2.format = SDL_AUDIO_S16LSB;
spec2.channels = 2;
spec2.freq = 44100;
- stream = SDL_CreateAudioStream(spec1.format, spec1.channels, spec1.freq,
- spec2.format, spec2.channels, spec2.freq);
+ stream = SDL_CreateAudioStream(&spec1, &spec2);
SDLTest_AssertPass("Call to SDL_CreateAudioStream(spec1 ==> spec2)");
SDLTest_AssertCheck(stream != NULL, "Verify stream value; expected: != NULL, got: %p", (void *)stream);
SDL_DestroyAudioStream(stream);
@@ -564,8 +500,7 @@ static int audio_buildAudioStream(void *arg)
spec2.format = g_audioFormats[ii];
spec2.channels = g_audioChannels[jj];
spec2.freq = g_audioFrequencies[kk];
- stream = SDL_CreateAudioStream(spec1.format, spec1.channels, spec1.freq,
- spec2.format, spec2.channels, spec2.freq);
+ stream = SDL_CreateAudioStream(&spec1, &spec2);
SDLTest_AssertPass("Call to SDL_CreateAudioStream(format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i ==> format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i)",
i, g_audioFormatsVerbose[i], spec1.format, j, spec1.channels, k, spec1.freq, ii, g_audioFormatsVerbose[ii], spec2.format, jj, spec2.channels, kk, spec2.freq);
@@ -646,8 +581,7 @@ static int audio_buildAudioStreamNegative(void *arg)
spec2.freq = 0;
}
SDLTest_Log("%s", message);
- stream = SDL_CreateAudioStream(spec1.format, spec1.channels, spec1.freq,
- spec2.format, spec2.channels, spec2.freq);
+ stream = SDL_CreateAudioStream(&spec1, &spec2);
SDLTest_AssertPass("Call to SDL_CreateAudioStream(spec1 ==> spec2)");
SDLTest_AssertCheck(stream == NULL, "Verify stream value; expected: NULL, got: %p", (void *)stream);
error = SDL_GetError();
@@ -669,16 +603,7 @@ static int audio_buildAudioStreamNegative(void *arg)
*/
static int audio_getAudioStatus(void *arg)
{
- SDL_AudioStatus result;
-
- /* Check current audio status */
- result = SDL_GetAudioDeviceStatus(g_audio_id);
- SDLTest_AssertPass("Call to SDL_GetAudioDeviceStatus(g_audio_id)");
- SDLTest_AssertCheck(result == SDL_AUDIO_STOPPED || result == SDL_AUDIO_PLAYING || result == SDL_AUDIO_PAUSED,
- "Verify returned value; expected: STOPPED (%i) | PLAYING (%i) | PAUSED (%i), got: %i",
- SDL_AUDIO_STOPPED, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED, result);
-
- return TEST_COMPLETED;
+ return TEST_COMPLETED; /* no longer a thing in SDL3. */
}
/**
@@ -688,57 +613,7 @@ static int audio_getAudioStatus(void *arg)
*/
static int audio_openCloseAndGetAudioStatus(void *arg)
{
- SDL_AudioStatus result;
- int i;
- int count;
- const char *device;
- SDL_AudioDeviceID id;
- SDL_AudioSpec desired, obtained;
-
- /* Get number of devices. */
- count = SDL_GetNumAudioDevices(0);
- SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)");
- if (count > 0) {
- for (i = 0; i < count; i++) {
- /* Get device name */
- device = SDL_GetAudioDeviceName(i, 0);
- SDLTest_AssertPass("SDL_GetAudioDeviceName(%i,0)", i);
- SDLTest_AssertCheck(device != NULL, "Validate device name is not NULL; got: %s", (device != NULL) ? device : "NULL");
- if (device == NULL) {
- return TEST_ABORTED;
- }
-
- /* Set standard desired spec */
- desired.freq = 22050;
- desired.format = SDL_AUDIO_S16SYS;
- desired.channels = 2;
- desired.samples = 4096;
- desired.callback = audio_testCallback;
- desired.userdata = NULL;
-
- /* Open device */
- id = SDL_OpenAudioDevice(device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE);
- SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device);
- SDLTest_AssertCheck(id > 0, "Validate device ID; expected: > 0, got: %" SDL_PRIu32, id);
- if (id > 0) {
-
- /* Check device audio status */
- result = SDL_GetAudioDeviceStatus(id);
- SDLTest_AssertPass("Call to SDL_GetAudioDeviceStatus()");
- SDLTest_AssertCheck(result == SDL_AUDIO_STOPPED || result == SDL_AUDIO_PLAYING || result == SDL_AUDIO_PAUSED,
- "Verify returned value; expected: STOPPED (%i) | PLAYING (%i) | PAUSED (%i), got: %i",
- SDL_AUDIO_STOPPED, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED, result);
-
- /* Close device again */
- SDL_CloseAudioDevice(id);
- SDLTest_AssertPass("Call to SDL_CloseAudioDevice()");
- }
- }
- } else {
- SDLTest_Log("No devices to test with");
- }
-
- return TEST_COMPLETED;
+ return TEST_COMPLETED; /* not a thing in SDL3. */
}
/**
@@ -749,60 +624,7 @@ static int audio_openCloseAndGetAudioStatus(void *arg)
*/
static int audio_lockUnlockOpenAudioDevice(void *arg)
{
- int i;
- int count;
- const char *device;
- SDL_AudioDeviceID id;
- SDL_AudioSpec desired, obtained;
-
- /* Get number of devices. */
- count = SDL_GetNumAudioDevices(0);
- SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)");
- if (count > 0) {
- for (i = 0; i < count; i++) {
- /* Get device name */
- device = SDL_GetAudioDeviceName(i, 0);
- SDLTest_AssertPass("SDL_GetAudioDeviceName(%i,0)", i);
- SDLTest_AssertCheck(device != NULL, "Validate device name is not NULL; got: %s", (device != NULL) ? device : "NULL");
- if (device == NULL) {
- return TEST_ABORTED;
- }
-
- /* Set standard desired spec */
- desired.freq = 22050;
- desired.format = SDL_AUDIO_S16SYS;
- desired.channels = 2;
- desired.samples = 4096;
- desired.callback = audio_testCallback;
- desired.userdata = NULL;
-
- /* Open device */
- id = SDL_OpenAudioDevice(device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE);
- SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device);
- SDLTest_AssertCheck(id > 1, "Validate device ID; expected: > 0, got: %" SDL_PRIu32, id);
- if (id > 0) {
- /* Lock to protect callback */
- SDL_LockAudioDevice(id);
- SDLTest_AssertPass("SDL_LockAudioDevice(%" SDL_PRIu32 ")", id);
-
- /* Simulate callback processing */
- SDL_Delay(10);
- SDLTest_Log("Simulate callback processing - delay");
-
- /* Unlock again */
- SDL_UnlockAudioDevice(id);
- SDLTest_AssertPass("SDL_UnlockAudioDevice(%" SDL_PRIu32 ")", id);
-
- /* Close device again */
- SDL_CloseAudioDevice(id);
- SDLTest_AssertPass("Call to SDL_CloseAudioDevice()");
- }
- }
- } else {
- SDLTest_Log("No devices to test with");
- }
-
- return TEST_COMPLETED;
+ return TEST_COMPLETED; /* not a thing in SDL3 */
}
/**
@@ -862,8 +684,7 @@ static int audio_convertAudio(void *arg)
spec2.channels = g_audioChannels[jj];
spec2.freq = g_audioFrequencies[kk];
- stream = SDL_CreateAudioStream(spec1.format, spec1.channels, spec1.freq,
- spec2.format, spec2.channels, spec2.freq);
+ stream = SDL_CreateAudioStream(&spec1, &spec2);
SDLTest_AssertPass("Call to SDL_CreateAudioStream(format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i ==> format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i)",
i, g_audioFormatsVerbose[i], spec1.format, j, spec1.channels, k, spec1.freq, ii, g_audioFormatsVerbose[ii], spec2.format, jj, spec2.channels, kk, spec2.freq);
SDLTest_AssertCheck(stream != NULL, "Verify stream value; expected: != NULL, got: %p", (void *)stream);
@@ -936,59 +757,7 @@ static int audio_convertAudio(void *arg)
*/
static int audio_openCloseAudioDeviceConnected(void *arg)
{
- int result = -1;
- int i;
- int count;
- const char *device;
- SDL_AudioDeviceID id;
- SDL_AudioSpec desired, obtained;
-
- /* Get number of devices. */
- count = SDL_GetNumAudioDevices(0);
- SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)");
- if (count > 0) {
- for (i = 0; i < count; i++) {
- /* Get device name */
- device = SDL_GetAudioDeviceName(i, 0);
- SDLTest_AssertPass("SDL_GetAudioDeviceName(%i,0)", i);
- SDLTest_AssertCheck(device != NULL, "Validate device name is not NULL; got: %s", (device != NULL) ? device : "NULL");
- if (device == NULL) {
- return TEST_ABORTED;
- }
-
- /* Set standard desired spec */
- desired.freq = 22050;
- desired.format = SDL_AUDIO_S16SYS;
- desired.channels = 2;
- desired.samples = 4096;
- desired.callback = audio_testCallback;
- desired.userdata = NULL;
-
- /* Open device */
- id = SDL_OpenAudioDevice(device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE);
- SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device);
- SDLTest_AssertCheck(id > 0, "Validate device ID; expected: > 0, got: %" SDL_PRIu32, id);
- if (id > 0) {
-
- /* TODO: enable test code when function is available in SDL3 */
-
-#ifdef AUDIODEVICECONNECTED_DEFINED
- /* Get connected status */
- result = SDL_AudioDeviceConnected(id);
- SDLTest_AssertPass("Call to SDL_AudioDeviceConnected()");
-#endif
- SDLTest_AssertCheck(result == 1, "Verify returned value; expected: 1; got: %i", result);
-
- /* Close device again */
- SDL_CloseAudioDevice(id);
- SDLTest_AssertPass("Call to SDL_CloseAudioDevice()");
- }
- }
- } else {
- SDLTest_Log("No devices to test with");
- }
-
- return TEST_COMPLETED;
+ return TEST_COMPLETED; /* not a thing in SDL3. */
}
static double sine_wave_sample(const Sint64 idx, const Sint64 rate, const Sint64 freq, const double phase)
@@ -1040,6 +809,7 @@ static int audio_resampleLoss(void *arg)
const int len_in = frames_in * (int)sizeof(float);
const int len_target = frames_target * (int)sizeof(float);
+ SDL_AudioSpec tmpspec1, tmpspec2;
Uint64 tick_beg = 0;
Uint64 tick_end = 0;
int i = 0;
@@ -1056,7 +826,13 @@ static int audio_resampleLoss(void *arg)
SDLTest_AssertPass("Test resampling of %i s %i Hz %f phase sine wave from sampling rate of %i Hz to %i Hz",
spec->time, spec->freq, spec->phase, spec->rate_in, spec->rate_out);
- stream = SDL_CreateAudioStream(SDL_AUDIO_F32, 1, spec->rate_in, SDL_AUDIO_F32, 1, spec->rate_out);
+ tmpspec1.format = SDL_AUDIO_F32;
+ tmpspec1.channels = 1;
+ tmpspec1.freq = spec->rate_in;
+ tmpspec2.format = SDL_AUDIO_F32;
+ tmpspec2.channels = 1;
+ tmpspec2.freq = spec->rate_out;
+ stream = SDL_CreateAudioStream(&tmpspec1, &tmpspec2);
SDLTest_AssertPass("Call to SDL_CreateAudioStream(SDL_AUDIO_F32, 1, %i, SDL_AUDIO_F32, 1, %i)", spec->rate_in, spec->rate_out);
SDLTest_AssertCheck(stream != NULL, "Expected SDL_CreateAudioStream to succeed.");
if (stream == NULL) {