audio: Cleaned out most remaining /* */ comments for // style.

Fully committing to it...!

This left SDL_wave.* alone for now, since there's a ton of comments in there
and this code hasn't changed much from SDL2 so far. But as SDL2 ages out a
little more, I'll likely switch this over, too.
This commit is contained in:
Ryan C. Gordon
2023-10-18 15:35:09 -04:00
parent 0ff67dc21b
commit 9d7c57234a
37 changed files with 378 additions and 384 deletions

View File

@@ -269,7 +269,7 @@ static void write_converter(const int fromchans, const int tochans)
"\n", lowercase(fromstr), lowercase(tostr)); "\n", lowercase(fromstr), lowercase(tostr));
if (convert_backwards) { /* must convert backwards when growing the output in-place. */ if (convert_backwards) { /* must convert backwards when growing the output in-place. */
printf(" /* convert backwards, since output is growing in-place. */\n"); printf(" // convert backwards, since output is growing in-place.\n");
printf(" src += (num_frames-1)"); printf(" src += (num_frames-1)");
if (fromchans != 1) { if (fromchans != 1) {
printf(" * %d", fromchans); printf(" * %d", fromchans);
@@ -425,7 +425,7 @@ int main(void)
" 3. This notice may not be removed or altered from any source distribution.\n" " 3. This notice may not be removed or altered from any source distribution.\n"
"*/\n" "*/\n"
"\n" "\n"
"/* DO NOT EDIT, THIS FILE WAS GENERATED BY build-scripts/gen_audio_channel_conversion.c */\n" "// DO NOT EDIT, THIS FILE WAS GENERATED BY build-scripts/gen_audio_channel_conversion.c\n"
"\n" "\n"
"\n" "\n"
"typedef void (*SDL_AudioChannelConverter)(float *dst, const float *src, int num_frames);\n" "typedef void (*SDL_AudioChannelConverter)(float *dst, const float *src, int num_frames);\n"

View File

@@ -25,7 +25,7 @@ Built with:
gcc -o genfilter build-scripts/gen_audio_resampler_filter.c -lm && ./genfilter > src/audio/SDL_audio_resampler_filter.h gcc -o genfilter build-scripts/gen_audio_resampler_filter.c -lm && ./genfilter > src/audio/SDL_audio_resampler_filter.h
*/ */
/* /*
SDL's resampler uses a "bandlimited interpolation" algorithm: SDL's resampler uses a "bandlimited interpolation" algorithm:
@@ -128,7 +128,7 @@ int main(void)
" 3. This notice may not be removed or altered from any source distribution.\n" " 3. This notice may not be removed or altered from any source distribution.\n"
"*/\n" "*/\n"
"\n" "\n"
"/* DO NOT EDIT, THIS FILE WAS GENERATED BY build-scripts/gen_audio_resampler_filter.c */\n" "// DO NOT EDIT, THIS FILE WAS GENERATED BY build-scripts/gen_audio_resampler_filter.c\n"
"\n" "\n"
"#define RESAMPLER_ZERO_CROSSINGS %d\n" "#define RESAMPLER_ZERO_CROSSINGS %d\n"
"#define RESAMPLER_BITS_PER_SAMPLE %d\n" "#define RESAMPLER_BITS_PER_SAMPLE %d\n"

View File

@@ -19,7 +19,7 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
/* DO NOT EDIT, THIS FILE WAS GENERATED BY build-scripts/gen_audio_channel_conversion.c */ // DO NOT EDIT, THIS FILE WAS GENERATED BY build-scripts/gen_audio_channel_conversion.c
typedef void (*SDL_AudioChannelConverter)(float *dst, const float *src, int num_frames); typedef void (*SDL_AudioChannelConverter)(float *dst, const float *src, int num_frames);
@@ -30,7 +30,7 @@ static void SDL_ConvertMonoToStereo(float *dst, const float *src, int num_frames
LOG_DEBUG_AUDIO_CONVERT("mono", "stereo"); LOG_DEBUG_AUDIO_CONVERT("mono", "stereo");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1); src += (num_frames-1);
dst += (num_frames-1) * 2; dst += (num_frames-1) * 2;
for (i = num_frames; i; i--, src--, dst -= 2) { for (i = num_frames; i; i--, src--, dst -= 2) {
@@ -47,7 +47,7 @@ static void SDL_ConvertMonoTo21(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("mono", "2.1"); LOG_DEBUG_AUDIO_CONVERT("mono", "2.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1); src += (num_frames-1);
dst += (num_frames-1) * 3; dst += (num_frames-1) * 3;
for (i = num_frames; i; i--, src--, dst -= 3) { for (i = num_frames; i; i--, src--, dst -= 3) {
@@ -65,7 +65,7 @@ static void SDL_ConvertMonoToQuad(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("mono", "quad"); LOG_DEBUG_AUDIO_CONVERT("mono", "quad");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1); src += (num_frames-1);
dst += (num_frames-1) * 4; dst += (num_frames-1) * 4;
for (i = num_frames; i; i--, src--, dst -= 4) { for (i = num_frames; i; i--, src--, dst -= 4) {
@@ -84,7 +84,7 @@ static void SDL_ConvertMonoTo41(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("mono", "4.1"); LOG_DEBUG_AUDIO_CONVERT("mono", "4.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1); src += (num_frames-1);
dst += (num_frames-1) * 5; dst += (num_frames-1) * 5;
for (i = num_frames; i; i--, src--, dst -= 5) { for (i = num_frames; i; i--, src--, dst -= 5) {
@@ -104,7 +104,7 @@ static void SDL_ConvertMonoTo51(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("mono", "5.1"); LOG_DEBUG_AUDIO_CONVERT("mono", "5.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1); src += (num_frames-1);
dst += (num_frames-1) * 6; dst += (num_frames-1) * 6;
for (i = num_frames; i; i--, src--, dst -= 6) { for (i = num_frames; i; i--, src--, dst -= 6) {
@@ -125,7 +125,7 @@ static void SDL_ConvertMonoTo61(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("mono", "6.1"); LOG_DEBUG_AUDIO_CONVERT("mono", "6.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1); src += (num_frames-1);
dst += (num_frames-1) * 7; dst += (num_frames-1) * 7;
for (i = num_frames; i; i--, src--, dst -= 7) { for (i = num_frames; i; i--, src--, dst -= 7) {
@@ -147,7 +147,7 @@ static void SDL_ConvertMonoTo71(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("mono", "7.1"); LOG_DEBUG_AUDIO_CONVERT("mono", "7.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1); src += (num_frames-1);
dst += (num_frames-1) * 8; dst += (num_frames-1) * 8;
for (i = num_frames; i; i--, src--, dst -= 8) { for (i = num_frames; i; i--, src--, dst -= 8) {
@@ -182,7 +182,7 @@ static void SDL_ConvertStereoTo21(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("stereo", "2.1"); LOG_DEBUG_AUDIO_CONVERT("stereo", "2.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 2; src += (num_frames-1) * 2;
dst += (num_frames-1) * 3; dst += (num_frames-1) * 3;
for (i = num_frames; i; i--, src -= 2, dst -= 3) { for (i = num_frames; i; i--, src -= 2, dst -= 3) {
@@ -199,7 +199,7 @@ static void SDL_ConvertStereoToQuad(float *dst, const float *src, int num_frames
LOG_DEBUG_AUDIO_CONVERT("stereo", "quad"); LOG_DEBUG_AUDIO_CONVERT("stereo", "quad");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 2; src += (num_frames-1) * 2;
dst += (num_frames-1) * 4; dst += (num_frames-1) * 4;
for (i = num_frames; i; i--, src -= 2, dst -= 4) { for (i = num_frames; i; i--, src -= 2, dst -= 4) {
@@ -217,7 +217,7 @@ static void SDL_ConvertStereoTo41(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("stereo", "4.1"); LOG_DEBUG_AUDIO_CONVERT("stereo", "4.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 2; src += (num_frames-1) * 2;
dst += (num_frames-1) * 5; dst += (num_frames-1) * 5;
for (i = num_frames; i; i--, src -= 2, dst -= 5) { for (i = num_frames; i; i--, src -= 2, dst -= 5) {
@@ -236,7 +236,7 @@ static void SDL_ConvertStereoTo51(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("stereo", "5.1"); LOG_DEBUG_AUDIO_CONVERT("stereo", "5.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 2; src += (num_frames-1) * 2;
dst += (num_frames-1) * 6; dst += (num_frames-1) * 6;
for (i = num_frames; i; i--, src -= 2, dst -= 6) { for (i = num_frames; i; i--, src -= 2, dst -= 6) {
@@ -256,7 +256,7 @@ static void SDL_ConvertStereoTo61(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("stereo", "6.1"); LOG_DEBUG_AUDIO_CONVERT("stereo", "6.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 2; src += (num_frames-1) * 2;
dst += (num_frames-1) * 7; dst += (num_frames-1) * 7;
for (i = num_frames; i; i--, src -= 2, dst -= 7) { for (i = num_frames; i; i--, src -= 2, dst -= 7) {
@@ -277,7 +277,7 @@ static void SDL_ConvertStereoTo71(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("stereo", "7.1"); LOG_DEBUG_AUDIO_CONVERT("stereo", "7.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 2; src += (num_frames-1) * 2;
dst += (num_frames-1) * 8; dst += (num_frames-1) * 8;
for (i = num_frames; i; i--, src -= 2, dst -= 8) { for (i = num_frames; i; i--, src -= 2, dst -= 8) {
@@ -325,7 +325,7 @@ static void SDL_Convert21ToQuad(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("2.1", "quad"); LOG_DEBUG_AUDIO_CONVERT("2.1", "quad");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 3; src += (num_frames-1) * 3;
dst += (num_frames-1) * 4; dst += (num_frames-1) * 4;
for (i = num_frames; i; i--, src -= 3, dst -= 4) { for (i = num_frames; i; i--, src -= 3, dst -= 4) {
@@ -344,7 +344,7 @@ static void SDL_Convert21To41(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("2.1", "4.1"); LOG_DEBUG_AUDIO_CONVERT("2.1", "4.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 3; src += (num_frames-1) * 3;
dst += (num_frames-1) * 5; dst += (num_frames-1) * 5;
for (i = num_frames; i; i--, src -= 3, dst -= 5) { for (i = num_frames; i; i--, src -= 3, dst -= 5) {
@@ -363,7 +363,7 @@ static void SDL_Convert21To51(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("2.1", "5.1"); LOG_DEBUG_AUDIO_CONVERT("2.1", "5.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 3; src += (num_frames-1) * 3;
dst += (num_frames-1) * 6; dst += (num_frames-1) * 6;
for (i = num_frames; i; i--, src -= 3, dst -= 6) { for (i = num_frames; i; i--, src -= 3, dst -= 6) {
@@ -383,7 +383,7 @@ static void SDL_Convert21To61(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("2.1", "6.1"); LOG_DEBUG_AUDIO_CONVERT("2.1", "6.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 3; src += (num_frames-1) * 3;
dst += (num_frames-1) * 7; dst += (num_frames-1) * 7;
for (i = num_frames; i; i--, src -= 3, dst -= 7) { for (i = num_frames; i; i--, src -= 3, dst -= 7) {
@@ -404,7 +404,7 @@ static void SDL_Convert21To71(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("2.1", "7.1"); LOG_DEBUG_AUDIO_CONVERT("2.1", "7.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 3; src += (num_frames-1) * 3;
dst += (num_frames-1) * 8; dst += (num_frames-1) * 8;
for (i = num_frames; i; i--, src -= 3, dst -= 8) { for (i = num_frames; i; i--, src -= 3, dst -= 8) {
@@ -469,7 +469,7 @@ static void SDL_ConvertQuadTo41(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("quad", "4.1"); LOG_DEBUG_AUDIO_CONVERT("quad", "4.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 4; src += (num_frames-1) * 4;
dst += (num_frames-1) * 5; dst += (num_frames-1) * 5;
for (i = num_frames; i; i--, src -= 4, dst -= 5) { for (i = num_frames; i; i--, src -= 4, dst -= 5) {
@@ -488,7 +488,7 @@ static void SDL_ConvertQuadTo51(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("quad", "5.1"); LOG_DEBUG_AUDIO_CONVERT("quad", "5.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 4; src += (num_frames-1) * 4;
dst += (num_frames-1) * 6; dst += (num_frames-1) * 6;
for (i = num_frames; i; i--, src -= 4, dst -= 6) { for (i = num_frames; i; i--, src -= 4, dst -= 6) {
@@ -508,7 +508,7 @@ static void SDL_ConvertQuadTo61(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("quad", "6.1"); LOG_DEBUG_AUDIO_CONVERT("quad", "6.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 4; src += (num_frames-1) * 4;
dst += (num_frames-1) * 7; dst += (num_frames-1) * 7;
for (i = num_frames; i; i--, src -= 4, dst -= 7) { for (i = num_frames; i; i--, src -= 4, dst -= 7) {
@@ -531,7 +531,7 @@ static void SDL_ConvertQuadTo71(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("quad", "7.1"); LOG_DEBUG_AUDIO_CONVERT("quad", "7.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 4; src += (num_frames-1) * 4;
dst += (num_frames-1) * 8; dst += (num_frames-1) * 8;
for (i = num_frames; i; i--, src -= 4, dst -= 8) { for (i = num_frames; i; i--, src -= 4, dst -= 8) {
@@ -613,7 +613,7 @@ static void SDL_Convert41To51(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("4.1", "5.1"); LOG_DEBUG_AUDIO_CONVERT("4.1", "5.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 5; src += (num_frames-1) * 5;
dst += (num_frames-1) * 6; dst += (num_frames-1) * 6;
for (i = num_frames; i; i--, src -= 5, dst -= 6) { for (i = num_frames; i; i--, src -= 5, dst -= 6) {
@@ -633,7 +633,7 @@ static void SDL_Convert41To61(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("4.1", "6.1"); LOG_DEBUG_AUDIO_CONVERT("4.1", "6.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 5; src += (num_frames-1) * 5;
dst += (num_frames-1) * 7; dst += (num_frames-1) * 7;
for (i = num_frames; i; i--, src -= 5, dst -= 7) { for (i = num_frames; i; i--, src -= 5, dst -= 7) {
@@ -656,7 +656,7 @@ static void SDL_Convert41To71(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("4.1", "7.1"); LOG_DEBUG_AUDIO_CONVERT("4.1", "7.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 5; src += (num_frames-1) * 5;
dst += (num_frames-1) * 8; dst += (num_frames-1) * 8;
for (i = num_frames; i; i--, src -= 5, dst -= 8) { for (i = num_frames; i; i--, src -= 5, dst -= 8) {
@@ -758,7 +758,7 @@ static void SDL_Convert51To61(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("5.1", "6.1"); LOG_DEBUG_AUDIO_CONVERT("5.1", "6.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 6; src += (num_frames-1) * 6;
dst += (num_frames-1) * 7; dst += (num_frames-1) * 7;
for (i = num_frames; i; i--, src -= 6, dst -= 7) { for (i = num_frames; i; i--, src -= 6, dst -= 7) {
@@ -781,7 +781,7 @@ static void SDL_Convert51To71(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("5.1", "7.1"); LOG_DEBUG_AUDIO_CONVERT("5.1", "7.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 6; src += (num_frames-1) * 6;
dst += (num_frames-1) * 8; dst += (num_frames-1) * 8;
for (i = num_frames; i; i--, src -= 6, dst -= 8) { for (i = num_frames; i; i--, src -= 6, dst -= 8) {
@@ -911,7 +911,7 @@ static void SDL_Convert61To71(float *dst, const float *src, int num_frames)
LOG_DEBUG_AUDIO_CONVERT("6.1", "7.1"); LOG_DEBUG_AUDIO_CONVERT("6.1", "7.1");
/* convert backwards, since output is growing in-place. */ // convert backwards, since output is growing in-place.
src += (num_frames-1) * 7; src += (num_frames-1) * 7;
dst += (num_frames-1) * 8; dst += (num_frames-1) * 8;
for (i = num_frames; i; i--, src -= 7, dst -= 8) { for (i = num_frames; i; i--, src -= 7, dst -= 8) {

View File

@@ -19,7 +19,7 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
/* DO NOT EDIT, THIS FILE WAS GENERATED BY build-scripts/gen_audio_resampler_filter.c */ // DO NOT EDIT, THIS FILE WAS GENERATED BY build-scripts/gen_audio_resampler_filter.c
#define RESAMPLER_ZERO_CROSSINGS 5 #define RESAMPLER_ZERO_CROSSINGS 5
#define RESAMPLER_BITS_PER_SAMPLE 16 #define RESAMPLER_BITS_PER_SAMPLE 16

View File

@@ -20,14 +20,14 @@
*/ */
#include "SDL_internal.h" #include "SDL_internal.h"
/* Get the name of the audio device we use for output */ // Get the name of the audio device we use for output
#if defined(SDL_AUDIO_DRIVER_NETBSD) || defined(SDL_AUDIO_DRIVER_OSS) #if defined(SDL_AUDIO_DRIVER_NETBSD) || defined(SDL_AUDIO_DRIVER_OSS)
#include <fcntl.h> #include <fcntl.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> /* For close() */ #include <unistd.h> // For close()
#include "SDL_audiodev_c.h" #include "SDL_audiodev_c.h"
@@ -84,7 +84,7 @@ static void SDL_EnumUnixAudioDevices_Internal(const SDL_bool iscapture, const SD
test = test_stub; test = test_stub;
} }
/* Figure out what our audio device is */ // Figure out what our audio device is
audiodev = SDL_getenv("SDL_PATH_DSP"); audiodev = SDL_getenv("SDL_PATH_DSP");
if (audiodev == NULL) { if (audiodev == NULL) {
audiodev = SDL_getenv("AUDIODEV"); audiodev = SDL_getenv("AUDIODEV");
@@ -95,7 +95,7 @@ static void SDL_EnumUnixAudioDevices_Internal(const SDL_bool iscapture, const SD
} else { } else {
struct stat sb; struct stat sb;
/* Added support for /dev/sound/\* in Linux 2.4 */ // Added support for /dev/sound/\* in Linux 2.4
if (((stat("/dev/sound", &sb) == 0) && S_ISDIR(sb.st_mode)) && ((stat(SDL_PATH_DEV_DSP24, &sb) == 0) && S_ISCHR(sb.st_mode))) { if (((stat("/dev/sound", &sb) == 0) && S_ISDIR(sb.st_mode)) && ((stat(SDL_PATH_DEV_DSP24, &sb) == 0) && S_ISCHR(sb.st_mode))) {
audiodev = SDL_PATH_DEV_DSP24; audiodev = SDL_PATH_DEV_DSP24;
} else { } else {
@@ -122,4 +122,4 @@ void SDL_EnumUnixAudioDevices(const SDL_bool classic, SDL_bool (*test)(int))
SDL_EnumUnixAudioDevices_Internal(SDL_FALSE, classic, test); SDL_EnumUnixAudioDevices_Internal(SDL_FALSE, classic, test);
} }
#endif /* Audio driver selection */ #endif // Audio device selection

View File

@@ -25,8 +25,8 @@
#include "SDL_internal.h" #include "SDL_internal.h"
#include "SDL_sysaudio.h" #include "SDL_sysaudio.h"
/* Open the audio device for playback, and don't block if busy */ // Open the audio device for playback, and don't block if busy
/* #define USE_BLOCKING_WRITES */ //#define USE_BLOCKING_WRITES
#ifdef USE_BLOCKING_WRITES #ifdef USE_BLOCKING_WRITES
#define OPEN_FLAGS_OUTPUT O_WRONLY #define OPEN_FLAGS_OUTPUT O_WRONLY
@@ -38,4 +38,4 @@
extern void SDL_EnumUnixAudioDevices(const SDL_bool classic, SDL_bool (*test)(int)); extern void SDL_EnumUnixAudioDevices(const SDL_bool classic, SDL_bool (*test)(int));
#endif /* SDL_audiodev_c_h_ */ #endif // SDL_audiodev_c_h_

View File

@@ -23,13 +23,13 @@
#include "SDL_sysaudio.h" #include "SDL_sysaudio.h"
#include "SDL_audioresample.h" #include "SDL_audioresample.h"
/* SDL's resampler uses a "bandlimited interpolation" algorithm: // SDL's resampler uses a "bandlimited interpolation" algorithm:
https://ccrma.stanford.edu/~jos/resample/ */ // https://ccrma.stanford.edu/~jos/resample/
#include "SDL_audio_resampler_filter.h" #include "SDL_audio_resampler_filter.h"
/* For a given srcpos, `srcpos + frame` are sampled, where `-RESAMPLER_ZERO_CROSSINGS < frame <= RESAMPLER_ZERO_CROSSINGS`. // For a given srcpos, `srcpos + frame` are sampled, where `-RESAMPLER_ZERO_CROSSINGS < frame <= RESAMPLER_ZERO_CROSSINGS`.
* Note, when upsampling, it is also possible to start sampling from `srcpos = -1`. */ // Note, when upsampling, it is also possible to start sampling from `srcpos = -1`.
#define RESAMPLER_MAX_PADDING_FRAMES (RESAMPLER_ZERO_CROSSINGS + 1) #define RESAMPLER_MAX_PADDING_FRAMES (RESAMPLER_ZERO_CROSSINGS + 1)
#define RESAMPLER_FILTER_INTERP_BITS (32 - RESAMPLER_BITS_PER_ZERO_CROSSING) #define RESAMPLER_FILTER_INTERP_BITS (32 - RESAMPLER_BITS_PER_ZERO_CROSSING)

View File

@@ -22,32 +22,31 @@
#include "SDL_audio_c.h" #include "SDL_audio_c.h"
/* TODO: NEON is disabled until https://github.com/libsdl-org/SDL/issues/8352 // TODO: NEON is disabled until https://github.com/libsdl-org/SDL/issues/8352 can be fixed
* can be fixed */
#undef SDL_NEON_INTRINSICS #undef SDL_NEON_INTRINSICS
#ifndef SDL_CPUINFO_DISABLED #ifndef SDL_CPUINFO_DISABLED
#if defined(__x86_64__) && defined(SDL_SSE2_INTRINSICS) #if defined(__x86_64__) && defined(SDL_SSE2_INTRINSICS)
#define NEED_SCALAR_CONVERTER_FALLBACKS 0 /* x86_64 guarantees SSE2. */ #define NEED_SCALAR_CONVERTER_FALLBACKS 0 // x86_64 guarantees SSE2.
#elif defined(__MACOS__) && defined(SDL_SSE2_INTRINSICS) #elif defined(__MACOS__) && defined(SDL_SSE2_INTRINSICS)
#define NEED_SCALAR_CONVERTER_FALLBACKS 0 /* macOS/Intel guarantees SSE2. */ #define NEED_SCALAR_CONVERTER_FALLBACKS 0 // macOS/Intel guarantees SSE2.
#elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8) && defined(SDL_NEON_INTRINSICS) #elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8) && defined(SDL_NEON_INTRINSICS)
#define NEED_SCALAR_CONVERTER_FALLBACKS 0 /* ARMv8+ promise NEON. */ #define NEED_SCALAR_CONVERTER_FALLBACKS 0 // ARMv8+ promise NEON.
#elif defined(__APPLE__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 7) && defined(SDL_NEON_INTRINSICS) #elif defined(__APPLE__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 7) && defined(SDL_NEON_INTRINSICS)
#define NEED_SCALAR_CONVERTER_FALLBACKS 0 /* All Apple ARMv7 chips promise NEON support. */ #define NEED_SCALAR_CONVERTER_FALLBACKS 0 // All Apple ARMv7 chips promise NEON support.
#endif #endif
#endif #endif
/* Set to zero if platform is guaranteed to use a SIMD codepath here. */ // Set to zero if platform is guaranteed to use a SIMD codepath here.
#if !defined(NEED_SCALAR_CONVERTER_FALLBACKS) || defined(SDL_CPUINFO_DISABLED) #if !defined(NEED_SCALAR_CONVERTER_FALLBACKS) || defined(SDL_CPUINFO_DISABLED)
#define NEED_SCALAR_CONVERTER_FALLBACKS 1 #define NEED_SCALAR_CONVERTER_FALLBACKS 1
#endif #endif
#define DIVBY2147483648 0.0000000004656612873077392578125f /* 0x1p-31f */ #define DIVBY2147483648 0.0000000004656612873077392578125f // 0x1p-31f
#if NEED_SCALAR_CONVERTER_FALLBACKS #if NEED_SCALAR_CONVERTER_FALLBACKS
/* This code requires that floats are in the IEEE-754 binary32 format */ // This code requires that floats are in the IEEE-754 binary32 format
SDL_COMPILE_TIME_ASSERT(float_bits, sizeof(float) == sizeof(Uint32)); SDL_COMPILE_TIME_ASSERT(float_bits, sizeof(float) == sizeof(Uint32));
union float_bits { union float_bits {
@@ -111,7 +110,7 @@ static void SDL_Convert_S32_to_F32_Scalar(float *dst, const Sint32 *src, int num
} }
} }
/* Create a bit-mask based on the sign-bit. Should optimize to a single arithmetic-shift-right */ // Create a bit-mask based on the sign-bit. Should optimize to a single arithmetic-shift-right
#define SIGNMASK(x) (Uint32)(0u - ((Uint32)(x) >> 31)) #define SIGNMASK(x) (Uint32)(0u - ((Uint32)(x) >> 31))
static void SDL_Convert_F32_to_S8_Scalar(Sint8 *dst, const float *src, int num_samples) static void SDL_Convert_F32_to_S8_Scalar(Sint8 *dst, const float *src, int num_samples)
@@ -202,7 +201,7 @@ static void SDL_Convert_F32_to_S32_Scalar(Sint32 *dst, const float *src, int num
#undef SIGNMASK #undef SIGNMASK
#endif /* NEED_SCALAR_CONVERTER_FALLBACKS */ #endif // NEED_SCALAR_CONVERTER_FALLBACKS
#ifdef SDL_SSE2_INTRINSICS #ifdef SDL_SSE2_INTRINSICS
static void SDL_TARGETING("sse2") SDL_Convert_S8_to_F32_SSE2(float *dst, const Sint8 *src, int num_samples) static void SDL_TARGETING("sse2") SDL_Convert_S8_to_F32_SSE2(float *dst, const Sint8 *src, int num_samples)
@@ -324,7 +323,7 @@ static void SDL_TARGETING("sse2") SDL_Convert_S32_to_F32_SSE2(float *dst, const
{ {
int i = num_samples; int i = num_samples;
/* dst[i] = f32(src[i]) / f32(0x80000000) */ // dst[i] = f32(src[i]) / f32(0x80000000)
const __m128 scaler = _mm_set1_ps(DIVBY2147483648); const __m128 scaler = _mm_set1_ps(DIVBY2147483648);
LOG_DEBUG_AUDIO_CONVERT("S32", "F32 (using SSE2)"); LOG_DEBUG_AUDIO_CONVERT("S32", "F32 (using SSE2)");
@@ -543,9 +542,9 @@ static void SDL_TARGETING("sse2") SDL_Convert_F32_to_S32_SSE2(Sint32 *dst, const
#endif #endif
#ifdef SDL_NEON_INTRINSICS #ifdef SDL_NEON_INTRINSICS
#define DIVBY128 0.0078125f /* 0x1p-7f */ #define DIVBY128 0.0078125f // 0x1p-7f
#define DIVBY32768 0.000030517578125f /* 0x1p-15f */ #define DIVBY32768 0.000030517578125f // 0x1p-15f
#define DIVBY8388607 0.00000011920930376163766f /* 0x1.000002p-23f */ #define DIVBY8388607 0.00000011920930376163766f // 0x1.000002p-23f
static void SDL_Convert_S8_to_F32_NEON(float *dst, const Sint8 *src, int num_samples) static void SDL_Convert_S8_to_F32_NEON(float *dst, const Sint8 *src, int num_samples)
{ {
@@ -556,25 +555,25 @@ static void SDL_Convert_S8_to_F32_NEON(float *dst, const Sint8 *src, int num_sam
src += num_samples - 1; src += num_samples - 1;
dst += num_samples - 1; dst += num_samples - 1;
/* Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src) */ // Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src)
for (i = num_samples; i && (((size_t)(dst - 15)) & 15); --i, --src, --dst) { for (i = num_samples; i && (((size_t)(dst - 15)) & 15); --i, --src, --dst) {
*dst = ((float)*src) * DIVBY128; *dst = ((float)*src) * DIVBY128;
} }
src -= 15; src -= 15;
dst -= 15; /* adjust to read NEON blocks from the start. */ dst -= 15; // adjust to read NEON blocks from the start.
SDL_assert(!i || !(((size_t)dst) & 15)); SDL_assert(!i || !(((size_t)dst) & 15));
/* Make sure src is aligned too. */ // Make sure src is aligned too.
if (!(((size_t)src) & 15)) { if (!(((size_t)src) & 15)) {
/* Aligned! Do NEON blocks as long as we have 16 bytes available. */ // Aligned! Do NEON blocks as long as we have 16 bytes available.
const int8_t *mmsrc = (const int8_t *)src; const int8_t *mmsrc = (const int8_t *)src;
const float32x4_t divby128 = vdupq_n_f32(DIVBY128); const float32x4_t divby128 = vdupq_n_f32(DIVBY128);
while (i >= 16) { /* 16 * 8-bit */ while (i >= 16) { // 16 * 8-bit
const int8x16_t bytes = vld1q_s8(mmsrc); /* get 16 sint8 into a NEON register. */ const int8x16_t bytes = vld1q_s8(mmsrc); // get 16 sint8 into a NEON register.
const int16x8_t int16hi = vmovl_s8(vget_high_s8(bytes)); /* convert top 8 bytes to 8 int16 */ const int16x8_t int16hi = vmovl_s8(vget_high_s8(bytes)); // convert top 8 bytes to 8 int16
const int16x8_t int16lo = vmovl_s8(vget_low_s8(bytes)); /* convert bottom 8 bytes to 8 int16 */ const int16x8_t int16lo = vmovl_s8(vget_low_s8(bytes)); // convert bottom 8 bytes to 8 int16
/* split int16 to two int32, then convert to float, then multiply to normalize, store. */ // split int16 to two int32, then convert to float, then multiply to normalize, store.
vst1q_f32(dst, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(int16lo))), divby128)); vst1q_f32(dst, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(int16lo))), divby128));
vst1q_f32(dst + 4, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(int16lo))), divby128)); vst1q_f32(dst + 4, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(int16lo))), divby128));
vst1q_f32(dst + 8, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(int16hi))), divby128)); vst1q_f32(dst + 8, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(int16hi))), divby128));
@@ -588,9 +587,9 @@ static void SDL_Convert_S8_to_F32_NEON(float *dst, const Sint8 *src, int num_sam
} }
src += 15; src += 15;
dst += 15; /* adjust for any scalar finishing. */ dst += 15; // adjust for any scalar finishing.
/* Finish off any leftovers with scalar operations. */ // Finish off any leftovers with scalar operations.
while (i) { while (i) {
*dst = ((float)*src) * DIVBY128; *dst = ((float)*src) * DIVBY128;
i--; i--;
@@ -608,26 +607,26 @@ static void SDL_Convert_U8_to_F32_NEON(float *dst, const Uint8 *src, int num_sam
src += num_samples - 1; src += num_samples - 1;
dst += num_samples - 1; dst += num_samples - 1;
/* Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src) */ // Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src)
for (i = num_samples; i && (((size_t)(dst - 15)) & 15); --i, --src, --dst) { for (i = num_samples; i && (((size_t)(dst - 15)) & 15); --i, --src, --dst) {
*dst = (((float)*src) * DIVBY128) - 1.0f; *dst = (((float)*src) * DIVBY128) - 1.0f;
} }
src -= 15; src -= 15;
dst -= 15; /* adjust to read NEON blocks from the start. */ dst -= 15; // adjust to read NEON blocks from the start.
SDL_assert(!i || !(((size_t)dst) & 15)); SDL_assert(!i || !(((size_t)dst) & 15));
/* Make sure src is aligned too. */ // Make sure src is aligned too.
if (!(((size_t)src) & 15)) { if (!(((size_t)src) & 15)) {
/* Aligned! Do NEON blocks as long as we have 16 bytes available. */ // Aligned! Do NEON blocks as long as we have 16 bytes available.
const uint8_t *mmsrc = (const uint8_t *)src; const uint8_t *mmsrc = (const uint8_t *)src;
const float32x4_t divby128 = vdupq_n_f32(DIVBY128); const float32x4_t divby128 = vdupq_n_f32(DIVBY128);
const float32x4_t negone = vdupq_n_f32(-1.0f); const float32x4_t negone = vdupq_n_f32(-1.0f);
while (i >= 16) { /* 16 * 8-bit */ while (i >= 16) { // 16 * 8-bit
const uint8x16_t bytes = vld1q_u8(mmsrc); /* get 16 uint8 into a NEON register. */ const uint8x16_t bytes = vld1q_u8(mmsrc); // get 16 uint8 into a NEON register.
const uint16x8_t uint16hi = vmovl_u8(vget_high_u8(bytes)); /* convert top 8 bytes to 8 uint16 */ const uint16x8_t uint16hi = vmovl_u8(vget_high_u8(bytes)); // convert top 8 bytes to 8 uint16
const uint16x8_t uint16lo = vmovl_u8(vget_low_u8(bytes)); /* convert bottom 8 bytes to 8 uint16 */ const uint16x8_t uint16lo = vmovl_u8(vget_low_u8(bytes)); // convert bottom 8 bytes to 8 uint16
/* split uint16 to two uint32, then convert to float, then multiply to normalize, subtract to adjust for sign, store. */ // split uint16 to two uint32, then convert to float, then multiply to normalize, subtract to adjust for sign, store.
vst1q_f32(dst, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uint16lo))), divby128)); vst1q_f32(dst, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uint16lo))), divby128));
vst1q_f32(dst + 4, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uint16lo))), divby128)); vst1q_f32(dst + 4, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uint16lo))), divby128));
vst1q_f32(dst + 8, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uint16hi))), divby128)); vst1q_f32(dst + 8, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uint16hi))), divby128));
@@ -641,9 +640,9 @@ static void SDL_Convert_U8_to_F32_NEON(float *dst, const Uint8 *src, int num_sam
} }
src += 15; src += 15;
dst += 15; /* adjust for any scalar finishing. */ dst += 15; // adjust for any scalar finishing.
/* Finish off any leftovers with scalar operations. */ // Finish off any leftovers with scalar operations.
while (i) { while (i) {
*dst = (((float)*src) * DIVBY128) - 1.0f; *dst = (((float)*src) * DIVBY128) - 1.0f;
i--; i--;
@@ -661,22 +660,22 @@ static void SDL_Convert_S16_to_F32_NEON(float *dst, const Sint16 *src, int num_s
src += num_samples - 1; src += num_samples - 1;
dst += num_samples - 1; dst += num_samples - 1;
/* Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src) */ // Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src)
for (i = num_samples; i && (((size_t)(dst - 7)) & 15); --i, --src, --dst) { for (i = num_samples; i && (((size_t)(dst - 7)) & 15); --i, --src, --dst) {
*dst = ((float)*src) * DIVBY32768; *dst = ((float)*src) * DIVBY32768;
} }
src -= 7; src -= 7;
dst -= 7; /* adjust to read NEON blocks from the start. */ dst -= 7; // adjust to read NEON blocks from the start.
SDL_assert(!i || !(((size_t)dst) & 15)); SDL_assert(!i || !(((size_t)dst) & 15));
/* Make sure src is aligned too. */ // Make sure src is aligned too.
if (!(((size_t)src) & 15)) { if (!(((size_t)src) & 15)) {
/* Aligned! Do NEON blocks as long as we have 16 bytes available. */ // Aligned! Do NEON blocks as long as we have 16 bytes available.
const float32x4_t divby32768 = vdupq_n_f32(DIVBY32768); const float32x4_t divby32768 = vdupq_n_f32(DIVBY32768);
while (i >= 8) { /* 8 * 16-bit */ while (i >= 8) { // 8 * 16-bit
const int16x8_t ints = vld1q_s16((int16_t const *)src); /* get 8 sint16 into a NEON register. */ const int16x8_t ints = vld1q_s16((int16_t const *)src); // get 8 sint16 into a NEON register.
/* split int16 to two int32, then convert to float, then multiply to normalize, store. */ // split int16 to two int32, then convert to float, then multiply to normalize, store.
vst1q_f32(dst, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(ints))), divby32768)); vst1q_f32(dst, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(ints))), divby32768));
vst1q_f32(dst + 4, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(ints))), divby32768)); vst1q_f32(dst + 4, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(ints))), divby32768));
i -= 8; i -= 8;
@@ -686,9 +685,9 @@ static void SDL_Convert_S16_to_F32_NEON(float *dst, const Sint16 *src, int num_s
} }
src += 7; src += 7;
dst += 7; /* adjust for any scalar finishing. */ dst += 7; // adjust for any scalar finishing.
/* Finish off any leftovers with scalar operations. */ // Finish off any leftovers with scalar operations.
while (i) { while (i) {
*dst = ((float)*src) * DIVBY32768; *dst = ((float)*src) * DIVBY32768;
i--; i--;
@@ -703,20 +702,20 @@ static void SDL_Convert_S32_to_F32_NEON(float *dst, const Sint32 *src, int num_s
LOG_DEBUG_AUDIO_CONVERT("S32", "F32 (using NEON)"); LOG_DEBUG_AUDIO_CONVERT("S32", "F32 (using NEON)");
/* Get dst aligned to 16 bytes */ // Get dst aligned to 16 bytes
for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) { for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) {
*dst = ((float)(*src >> 8)) * DIVBY8388607; *dst = ((float)(*src >> 8)) * DIVBY8388607;
} }
SDL_assert(!i || !(((size_t)dst) & 15)); SDL_assert(!i || !(((size_t)dst) & 15));
/* Make sure src is aligned too. */ // Make sure src is aligned too.
if (!(((size_t)src) & 15)) { if (!(((size_t)src) & 15)) {
/* Aligned! Do NEON blocks as long as we have 16 bytes available. */ // Aligned! Do NEON blocks as long as we have 16 bytes available.
const float32x4_t divby8388607 = vdupq_n_f32(DIVBY8388607); const float32x4_t divby8388607 = vdupq_n_f32(DIVBY8388607);
const int32_t *mmsrc = (const int32_t *)src; const int32_t *mmsrc = (const int32_t *)src;
while (i >= 4) { /* 4 * sint32 */ while (i >= 4) { // 4 * sint32
/* shift out lowest bits so int fits in a float32. Small precision loss, but much faster. */ // shift out lowest bits so int fits in a float32. Small precision loss, but much faster.
vst1q_f32(dst, vmulq_f32(vcvtq_f32_s32(vshrq_n_s32(vld1q_s32(mmsrc), 8)), divby8388607)); vst1q_f32(dst, vmulq_f32(vcvtq_f32_s32(vshrq_n_s32(vld1q_s32(mmsrc), 8)), divby8388607));
i -= 4; i -= 4;
mmsrc += 4; mmsrc += 4;
@@ -725,7 +724,7 @@ static void SDL_Convert_S32_to_F32_NEON(float *dst, const Sint32 *src, int num_s
src = (const Sint32 *)mmsrc; src = (const Sint32 *)mmsrc;
} }
/* Finish off any leftovers with scalar operations. */ // Finish off any leftovers with scalar operations.
while (i) { while (i) {
*dst = ((float)(*src >> 8)) * DIVBY8388607; *dst = ((float)(*src >> 8)) * DIVBY8388607;
i--; i--;
@@ -740,7 +739,7 @@ static void SDL_Convert_F32_to_S8_NEON(Sint8 *dst, const float *src, int num_sam
LOG_DEBUG_AUDIO_CONVERT("F32", "S8 (using NEON)"); LOG_DEBUG_AUDIO_CONVERT("F32", "S8 (using NEON)");
/* Get dst aligned to 16 bytes */ // Get dst aligned to 16 bytes
for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) { for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) {
const float sample = *src; const float sample = *src;
if (sample >= 1.0f) { if (sample >= 1.0f) {
@@ -754,21 +753,21 @@ static void SDL_Convert_F32_to_S8_NEON(Sint8 *dst, const float *src, int num_sam
SDL_assert(!i || !(((size_t)dst) & 15)); SDL_assert(!i || !(((size_t)dst) & 15));
/* Make sure src is aligned too. */ // Make sure src is aligned too.
if (!(((size_t)src) & 15)) { if (!(((size_t)src) & 15)) {
/* Aligned! Do NEON blocks as long as we have 16 bytes available. */ // Aligned! Do NEON blocks as long as we have 16 bytes available.
const float32x4_t one = vdupq_n_f32(1.0f); const float32x4_t one = vdupq_n_f32(1.0f);
const float32x4_t negone = vdupq_n_f32(-1.0f); const float32x4_t negone = vdupq_n_f32(-1.0f);
const float32x4_t mulby127 = vdupq_n_f32(127.0f); const float32x4_t mulby127 = vdupq_n_f32(127.0f);
int8_t *mmdst = (int8_t *)dst; int8_t *mmdst = (int8_t *)dst;
while (i >= 16) { /* 16 * float32 */ while (i >= 16) { // 16 * float32
const int32x4_t ints1 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src)), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */ const int32x4_t ints1 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src)), one), mulby127)); // load 4 floats, clamp, convert to sint32
const int32x4_t ints2 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 4)), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */ const int32x4_t ints2 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 4)), one), mulby127)); // load 4 floats, clamp, convert to sint32
const int32x4_t ints3 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 8)), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */ const int32x4_t ints3 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 8)), one), mulby127)); // load 4 floats, clamp, convert to sint32
const int32x4_t ints4 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 12)), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */ const int32x4_t ints4 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 12)), one), mulby127)); // load 4 floats, clamp, convert to sint32
const int8x8_t i8lo = vmovn_s16(vcombine_s16(vmovn_s32(ints1), vmovn_s32(ints2))); /* narrow to sint16, combine, narrow to sint8 */ const int8x8_t i8lo = vmovn_s16(vcombine_s16(vmovn_s32(ints1), vmovn_s32(ints2))); // narrow to sint16, combine, narrow to sint8
const int8x8_t i8hi = vmovn_s16(vcombine_s16(vmovn_s32(ints3), vmovn_s32(ints4))); /* narrow to sint16, combine, narrow to sint8 */ const int8x8_t i8hi = vmovn_s16(vcombine_s16(vmovn_s32(ints3), vmovn_s32(ints4))); // narrow to sint16, combine, narrow to sint8
vst1q_s8(mmdst, vcombine_s8(i8lo, i8hi)); /* combine to int8x16_t, store out */ vst1q_s8(mmdst, vcombine_s8(i8lo, i8hi)); // combine to int8x16_t, store out
i -= 16; i -= 16;
src += 16; src += 16;
mmdst += 16; mmdst += 16;
@@ -776,7 +775,7 @@ static void SDL_Convert_F32_to_S8_NEON(Sint8 *dst, const float *src, int num_sam
dst = (Sint8 *)mmdst; dst = (Sint8 *)mmdst;
} }
/* Finish off any leftovers with scalar operations. */ // Finish off any leftovers with scalar operations.
while (i) { while (i) {
const float sample = *src; const float sample = *src;
if (sample >= 1.0f) { if (sample >= 1.0f) {
@@ -798,7 +797,7 @@ static void SDL_Convert_F32_to_U8_NEON(Uint8 *dst, const float *src, int num_sam
LOG_DEBUG_AUDIO_CONVERT("F32", "U8 (using NEON)"); LOG_DEBUG_AUDIO_CONVERT("F32", "U8 (using NEON)");
/* Get dst aligned to 16 bytes */ // Get dst aligned to 16 bytes
for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) { for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) {
const float sample = *src; const float sample = *src;
if (sample >= 1.0f) { if (sample >= 1.0f) {
@@ -812,21 +811,21 @@ static void SDL_Convert_F32_to_U8_NEON(Uint8 *dst, const float *src, int num_sam
SDL_assert(!i || !(((size_t)dst) & 15)); SDL_assert(!i || !(((size_t)dst) & 15));
/* Make sure src is aligned too. */ // Make sure src is aligned too.
if (!(((size_t)src) & 15)) { if (!(((size_t)src) & 15)) {
/* Aligned! Do NEON blocks as long as we have 16 bytes available. */ // Aligned! Do NEON blocks as long as we have 16 bytes available.
const float32x4_t one = vdupq_n_f32(1.0f); const float32x4_t one = vdupq_n_f32(1.0f);
const float32x4_t negone = vdupq_n_f32(-1.0f); const float32x4_t negone = vdupq_n_f32(-1.0f);
const float32x4_t mulby127 = vdupq_n_f32(127.0f); const float32x4_t mulby127 = vdupq_n_f32(127.0f);
uint8_t *mmdst = (uint8_t *)dst; uint8_t *mmdst = (uint8_t *)dst;
while (i >= 16) { /* 16 * float32 */ while (i >= 16) { // 16 * float32
const uint32x4_t uints1 = vcvtq_u32_f32(vmulq_f32(vaddq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src)), one), one), mulby127)); /* load 4 floats, clamp, convert to uint32 */ const uint32x4_t uints1 = vcvtq_u32_f32(vmulq_f32(vaddq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src)), one), one), mulby127)); // load 4 floats, clamp, convert to uint32
const uint32x4_t uints2 = vcvtq_u32_f32(vmulq_f32(vaddq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 4)), one), one), mulby127)); /* load 4 floats, clamp, convert to uint32 */ const uint32x4_t uints2 = vcvtq_u32_f32(vmulq_f32(vaddq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 4)), one), one), mulby127)); // load 4 floats, clamp, convert to uint32
const uint32x4_t uints3 = vcvtq_u32_f32(vmulq_f32(vaddq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 8)), one), one), mulby127)); /* load 4 floats, clamp, convert to uint32 */ const uint32x4_t uints3 = vcvtq_u32_f32(vmulq_f32(vaddq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 8)), one), one), mulby127)); // load 4 floats, clamp, convert to uint32
const uint32x4_t uints4 = vcvtq_u32_f32(vmulq_f32(vaddq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 12)), one), one), mulby127)); /* load 4 floats, clamp, convert to uint32 */ const uint32x4_t uints4 = vcvtq_u32_f32(vmulq_f32(vaddq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 12)), one), one), mulby127)); // load 4 floats, clamp, convert to uint32
const uint8x8_t ui8lo = vmovn_u16(vcombine_u16(vmovn_u32(uints1), vmovn_u32(uints2))); /* narrow to uint16, combine, narrow to uint8 */ const uint8x8_t ui8lo = vmovn_u16(vcombine_u16(vmovn_u32(uints1), vmovn_u32(uints2))); // narrow to uint16, combine, narrow to uint8
const uint8x8_t ui8hi = vmovn_u16(vcombine_u16(vmovn_u32(uints3), vmovn_u32(uints4))); /* narrow to uint16, combine, narrow to uint8 */ const uint8x8_t ui8hi = vmovn_u16(vcombine_u16(vmovn_u32(uints3), vmovn_u32(uints4))); // narrow to uint16, combine, narrow to uint8
vst1q_u8(mmdst, vcombine_u8(ui8lo, ui8hi)); /* combine to uint8x16_t, store out */ vst1q_u8(mmdst, vcombine_u8(ui8lo, ui8hi)); // combine to uint8x16_t, store out
i -= 16; i -= 16;
src += 16; src += 16;
mmdst += 16; mmdst += 16;
@@ -835,7 +834,7 @@ static void SDL_Convert_F32_to_U8_NEON(Uint8 *dst, const float *src, int num_sam
dst = (Uint8 *)mmdst; dst = (Uint8 *)mmdst;
} }
/* Finish off any leftovers with scalar operations. */ // Finish off any leftovers with scalar operations.
while (i) { while (i) {
const float sample = *src; const float sample = *src;
if (sample >= 1.0f) { if (sample >= 1.0f) {
@@ -857,7 +856,7 @@ static void SDL_Convert_F32_to_S16_NEON(Sint16 *dst, const float *src, int num_s
LOG_DEBUG_AUDIO_CONVERT("F32", "S16 (using NEON)"); LOG_DEBUG_AUDIO_CONVERT("F32", "S16 (using NEON)");
/* Get dst aligned to 16 bytes */ // Get dst aligned to 16 bytes
for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) { for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) {
const float sample = *src; const float sample = *src;
if (sample >= 1.0f) { if (sample >= 1.0f) {
@@ -871,17 +870,17 @@ static void SDL_Convert_F32_to_S16_NEON(Sint16 *dst, const float *src, int num_s
SDL_assert(!i || !(((size_t)dst) & 15)); SDL_assert(!i || !(((size_t)dst) & 15));
/* Make sure src is aligned too. */ // Make sure src is aligned too.
if (!(((size_t)src) & 15)) { if (!(((size_t)src) & 15)) {
/* Aligned! Do NEON blocks as long as we have 16 bytes available. */ // Aligned! Do NEON blocks as long as we have 16 bytes available.
const float32x4_t one = vdupq_n_f32(1.0f); const float32x4_t one = vdupq_n_f32(1.0f);
const float32x4_t negone = vdupq_n_f32(-1.0f); const float32x4_t negone = vdupq_n_f32(-1.0f);
const float32x4_t mulby32767 = vdupq_n_f32(32767.0f); const float32x4_t mulby32767 = vdupq_n_f32(32767.0f);
int16_t *mmdst = (int16_t *)dst; int16_t *mmdst = (int16_t *)dst;
while (i >= 8) { /* 8 * float32 */ while (i >= 8) { // 8 * float32
const int32x4_t ints1 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */ const int32x4_t ints1 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src)), one), mulby32767)); // load 4 floats, clamp, convert to sint32
const int32x4_t ints2 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 4)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */ const int32x4_t ints2 = vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src + 4)), one), mulby32767)); // load 4 floats, clamp, convert to sint32
vst1q_s16(mmdst, vcombine_s16(vmovn_s32(ints1), vmovn_s32(ints2))); /* narrow to sint16, combine, store out. */ vst1q_s16(mmdst, vcombine_s16(vmovn_s32(ints1), vmovn_s32(ints2))); // narrow to sint16, combine, store out.
i -= 8; i -= 8;
src += 8; src += 8;
mmdst += 8; mmdst += 8;
@@ -889,7 +888,7 @@ static void SDL_Convert_F32_to_S16_NEON(Sint16 *dst, const float *src, int num_s
dst = (Sint16 *)mmdst; dst = (Sint16 *)mmdst;
} }
/* Finish off any leftovers with scalar operations. */ // Finish off any leftovers with scalar operations.
while (i) { while (i) {
const float sample = *src; const float sample = *src;
if (sample >= 1.0f) { if (sample >= 1.0f) {
@@ -911,7 +910,7 @@ static void SDL_Convert_F32_to_S32_NEON(Sint32 *dst, const float *src, int num_s
LOG_DEBUG_AUDIO_CONVERT("F32", "S32 (using NEON)"); LOG_DEBUG_AUDIO_CONVERT("F32", "S32 (using NEON)");
/* Get dst aligned to 16 bytes */ // Get dst aligned to 16 bytes
for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) { for (i = num_samples; i && (((size_t)dst) & 15); --i, ++src, ++dst) {
const float sample = *src; const float sample = *src;
if (sample >= 1.0f) { if (sample >= 1.0f) {
@@ -927,12 +926,12 @@ static void SDL_Convert_F32_to_S32_NEON(Sint32 *dst, const float *src, int num_s
SDL_assert(!i || !(((size_t)src) & 15)); SDL_assert(!i || !(((size_t)src) & 15));
{ {
/* Aligned! Do NEON blocks as long as we have 16 bytes available. */ // Aligned! Do NEON blocks as long as we have 16 bytes available.
const float32x4_t one = vdupq_n_f32(1.0f); const float32x4_t one = vdupq_n_f32(1.0f);
const float32x4_t negone = vdupq_n_f32(-1.0f); const float32x4_t negone = vdupq_n_f32(-1.0f);
const float32x4_t mulby8388607 = vdupq_n_f32(8388607.0f); const float32x4_t mulby8388607 = vdupq_n_f32(8388607.0f);
int32_t *mmdst = (int32_t *)dst; int32_t *mmdst = (int32_t *)dst;
while (i >= 4) { /* 4 * float32 */ while (i >= 4) { // 4 * float32
vst1q_s32(mmdst, vshlq_n_s32(vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src)), one), mulby8388607)), 8)); vst1q_s32(mmdst, vshlq_n_s32(vcvtq_s32_f32(vmulq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src)), one), mulby8388607)), 8));
i -= 4; i -= 4;
src += 4; src += 4;
@@ -941,7 +940,7 @@ static void SDL_Convert_F32_to_S32_NEON(Sint32 *dst, const float *src, int num_s
dst = (Sint32 *)mmdst; dst = (Sint32 *)mmdst;
} }
/* Finish off any leftovers with scalar operations. */ // Finish off any leftovers with scalar operations.
while (i) { while (i) {
const float sample = *src; const float sample = *src;
if (sample >= 1.0f) { if (sample >= 1.0f) {
@@ -958,7 +957,7 @@ static void SDL_Convert_F32_to_S32_NEON(Sint32 *dst, const float *src, int num_s
} }
#endif #endif
/* Function pointers set to a CPU-specific implementation. */ // Function pointers set to a CPU-specific implementation.
void (*SDL_Convert_S8_to_F32)(float *dst, const Sint8 *src, int num_samples) = NULL; void (*SDL_Convert_S8_to_F32)(float *dst, const Sint8 *src, int num_samples) = NULL;
void (*SDL_Convert_U8_to_F32)(float *dst, const Uint8 *src, int num_samples) = NULL; void (*SDL_Convert_U8_to_F32)(float *dst, const Uint8 *src, int num_samples) = NULL;
void (*SDL_Convert_S16_to_F32)(float *dst, const Sint16 *src, int num_samples) = NULL; void (*SDL_Convert_S16_to_F32)(float *dst, const Sint16 *src, int num_samples) = NULL;

View File

@@ -20,7 +20,7 @@
*/ */
#include "SDL_internal.h" #include "SDL_internal.h"
/* This provides the default mixing callback for the SDL audio routines */ // This provides the default mixing callback for the SDL audio routines
#include "SDL_sysaudio.h" #include "SDL_sysaudio.h"
@@ -77,12 +77,12 @@ static const Uint8 mix8[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
}; };
/* The volume ranges from 0 - 128 */ // The volume ranges from 0 - 128
#define ADJUST_VOLUME(type, s, v) ((s) = (type)(((s) * (v)) / SDL_MIX_MAXVOLUME)) #define ADJUST_VOLUME(type, s, v) ((s) = (type)(((s) * (v)) / SDL_MIX_MAXVOLUME))
#define ADJUST_VOLUME_U8(s, v) ((s) = (Uint8)(((((s) - 128) * (v)) / SDL_MIX_MAXVOLUME) + 128)) #define ADJUST_VOLUME_U8(s, v) ((s) = (Uint8)(((((s) - 128) * (v)) / SDL_MIX_MAXVOLUME) + 128))
/* !!! FIXME: this needs some SIMD magic. */ // !!! FIXME: this needs some SIMD magic.
int SDL_MixAudioFormat(Uint8 *dst, const Uint8 *src, SDL_AudioFormat format, int SDL_MixAudioFormat(Uint8 *dst, const Uint8 *src, SDL_AudioFormat format,
Uint32 len, int volume) Uint32 len, int volume)
@@ -237,7 +237,7 @@ int SDL_MixAudioFormat(Uint8 *dst, const Uint8 *src, SDL_AudioFormat format,
float *dst32 = (float *)dst; float *dst32 = (float *)dst;
float src1, src2; float src1, src2;
double dst_sample; double dst_sample;
/* !!! FIXME: are these right? */ // !!! FIXME: are these right?
const double max_audioval = 3.402823466e+38F; const double max_audioval = 3.402823466e+38F;
const double min_audioval = -3.402823466e+38F; const double min_audioval = -3.402823466e+38F;
@@ -265,7 +265,7 @@ int SDL_MixAudioFormat(Uint8 *dst, const Uint8 *src, SDL_AudioFormat format,
float *dst32 = (float *)dst; float *dst32 = (float *)dst;
float src1, src2; float src1, src2;
double dst_sample; double dst_sample;
/* !!! FIXME: are these right? */ // !!! FIXME: are these right?
const double max_audioval = 3.402823466e+38F; const double max_audioval = 3.402823466e+38F;
const double min_audioval = -3.402823466e+38F; const double min_audioval = -3.402823466e+38F;
@@ -285,7 +285,7 @@ int SDL_MixAudioFormat(Uint8 *dst, const Uint8 *src, SDL_AudioFormat format,
} }
} break; } break;
default: /* If this happens... FIXME! */ default: // If this happens... FIXME!
return SDL_SetError("SDL_MixAudioFormat(): unknown audio format"); return SDL_SetError("SDL_MixAudioFormat(): unknown audio format");
} }

View File

@@ -35,4 +35,4 @@ void AAUDIO_PauseDevices(void);
#endif #endif
#endif /* SDL_aaudio_h_ */ #endif // SDL_aaudio_h_

View File

@@ -33,18 +33,18 @@ SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSharingMode, (AAudioStreamBuilder *
SDL_PROC(void, AAudioStreamBuilder_setDirection, (AAudioStreamBuilder * builder, aaudio_direction_t direction)) SDL_PROC(void, AAudioStreamBuilder_setDirection, (AAudioStreamBuilder * builder, aaudio_direction_t direction))
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setBufferCapacityInFrames, (AAudioStreamBuilder * builder, int32_t numFrames)) SDL_PROC_UNUSED(void, AAudioStreamBuilder_setBufferCapacityInFrames, (AAudioStreamBuilder * builder, int32_t numFrames))
SDL_PROC(void, AAudioStreamBuilder_setPerformanceMode, (AAudioStreamBuilder * builder, aaudio_performance_mode_t mode)) SDL_PROC(void, AAudioStreamBuilder_setPerformanceMode, (AAudioStreamBuilder * builder, aaudio_performance_mode_t mode))
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setUsage, (AAudioStreamBuilder * builder, aaudio_usage_t usage)) /* API 28 */ SDL_PROC_UNUSED(void, AAudioStreamBuilder_setUsage, (AAudioStreamBuilder * builder, aaudio_usage_t usage)) // API 28
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setContentType, (AAudioStreamBuilder * builder, aaudio_content_type_t contentType)) /* API 28 */ SDL_PROC_UNUSED(void, AAudioStreamBuilder_setContentType, (AAudioStreamBuilder * builder, aaudio_content_type_t contentType)) // API 28
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setInputPreset, (AAudioStreamBuilder * builder, aaudio_input_preset_t inputPreset)) /* API 28 */ SDL_PROC_UNUSED(void, AAudioStreamBuilder_setInputPreset, (AAudioStreamBuilder * builder, aaudio_input_preset_t inputPreset)) // API 28
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setAllowedCapturePolicy, (AAudioStreamBuilder * builder, aaudio_allowed_capture_policy_t capturePolicy)) /* API 29 */ SDL_PROC_UNUSED(void, AAudioStreamBuilder_setAllowedCapturePolicy, (AAudioStreamBuilder * builder, aaudio_allowed_capture_policy_t capturePolicy)) // API 29
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSessionId, (AAudioStreamBuilder * builder, aaudio_session_id_t sessionId)) /* API 28 */ SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSessionId, (AAudioStreamBuilder * builder, aaudio_session_id_t sessionId)) // API 28
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setPrivacySensitive, (AAudioStreamBuilder * builder, bool privacySensitive)) /* API 30 */ SDL_PROC_UNUSED(void, AAudioStreamBuilder_setPrivacySensitive, (AAudioStreamBuilder * builder, bool privacySensitive)) // API 30
SDL_PROC(void, AAudioStreamBuilder_setDataCallback, (AAudioStreamBuilder * builder, AAudioStream_dataCallback callback, void *userData)) SDL_PROC(void, AAudioStreamBuilder_setDataCallback, (AAudioStreamBuilder * builder, AAudioStream_dataCallback callback, void *userData))
SDL_PROC(void, AAudioStreamBuilder_setFramesPerDataCallback, (AAudioStreamBuilder * builder, int32_t numFrames)) SDL_PROC(void, AAudioStreamBuilder_setFramesPerDataCallback, (AAudioStreamBuilder * builder, int32_t numFrames))
SDL_PROC(void, AAudioStreamBuilder_setErrorCallback, (AAudioStreamBuilder * builder, AAudioStream_errorCallback callback, void *userData)) SDL_PROC(void, AAudioStreamBuilder_setErrorCallback, (AAudioStreamBuilder * builder, AAudioStream_errorCallback callback, void *userData))
SDL_PROC(aaudio_result_t, AAudioStreamBuilder_openStream, (AAudioStreamBuilder * builder, AAudioStream **stream)) SDL_PROC(aaudio_result_t, AAudioStreamBuilder_openStream, (AAudioStreamBuilder * builder, AAudioStream **stream))
SDL_PROC(aaudio_result_t, AAudioStreamBuilder_delete, (AAudioStreamBuilder * builder)) SDL_PROC(aaudio_result_t, AAudioStreamBuilder_delete, (AAudioStreamBuilder * builder))
SDL_PROC_UNUSED(aaudio_result_t, AAudioStream_release, (AAudioStream * stream)) /* API 30 */ SDL_PROC_UNUSED(aaudio_result_t, AAudioStream_release, (AAudioStream * stream)) // API 30
SDL_PROC(aaudio_result_t, AAudioStream_close, (AAudioStream * stream)) SDL_PROC(aaudio_result_t, AAudioStream_close, (AAudioStream * stream))
SDL_PROC(aaudio_result_t, AAudioStream_requestStart, (AAudioStream * stream)) SDL_PROC(aaudio_result_t, AAudioStream_requestStart, (AAudioStream * stream))
SDL_PROC(aaudio_result_t, AAudioStream_requestPause, (AAudioStream * stream)) SDL_PROC(aaudio_result_t, AAudioStream_requestPause, (AAudioStream * stream))
@@ -70,13 +70,13 @@ SDL_PROC_UNUSED(aaudio_performance_mode_t, AAudioStream_getPerformanceMode, (AAu
SDL_PROC_UNUSED(aaudio_direction_t, AAudioStream_getDirection, (AAudioStream * stream)) SDL_PROC_UNUSED(aaudio_direction_t, AAudioStream_getDirection, (AAudioStream * stream))
SDL_PROC_UNUSED(int64_t, AAudioStream_getFramesWritten, (AAudioStream * stream)) SDL_PROC_UNUSED(int64_t, AAudioStream_getFramesWritten, (AAudioStream * stream))
SDL_PROC_UNUSED(int64_t, AAudioStream_getFramesRead, (AAudioStream * stream)) SDL_PROC_UNUSED(int64_t, AAudioStream_getFramesRead, (AAudioStream * stream))
SDL_PROC_UNUSED(aaudio_session_id_t, AAudioStream_getSessionId, (AAudioStream * stream)) /* API 28 */ SDL_PROC_UNUSED(aaudio_session_id_t, AAudioStream_getSessionId, (AAudioStream * stream)) // API 28
SDL_PROC(aaudio_result_t, AAudioStream_getTimestamp, (AAudioStream * stream, clockid_t clockid, int64_t *framePosition, int64_t *timeNanoseconds)) SDL_PROC(aaudio_result_t, AAudioStream_getTimestamp, (AAudioStream * stream, clockid_t clockid, int64_t *framePosition, int64_t *timeNanoseconds))
SDL_PROC_UNUSED(aaudio_usage_t, AAudioStream_getUsage, (AAudioStream * stream)) /* API 28 */ SDL_PROC_UNUSED(aaudio_usage_t, AAudioStream_getUsage, (AAudioStream * stream)) // API 28
SDL_PROC_UNUSED(aaudio_content_type_t, AAudioStream_getContentType, (AAudioStream * stream)) /* API 28 */ SDL_PROC_UNUSED(aaudio_content_type_t, AAudioStream_getContentType, (AAudioStream * stream)) // API 28
SDL_PROC_UNUSED(aaudio_input_preset_t, AAudioStream_getInputPreset, (AAudioStream * stream)) /* API 28 */ SDL_PROC_UNUSED(aaudio_input_preset_t, AAudioStream_getInputPreset, (AAudioStream * stream)) // API 28
SDL_PROC_UNUSED(aaudio_allowed_capture_policy_t, AAudioStream_getAllowedCapturePolicy, (AAudioStream * stream)) /* API 29 */ SDL_PROC_UNUSED(aaudio_allowed_capture_policy_t, AAudioStream_getAllowedCapturePolicy, (AAudioStream * stream)) // API 29
SDL_PROC_UNUSED(bool, AAudioStream_isPrivacySensitive, (AAudioStream * stream)) /* API 30 */ SDL_PROC_UNUSED(bool, AAudioStream_isPrivacySensitive, (AAudioStream * stream)) // API 30
#undef SDL_PROC #undef SDL_PROC
#undef SDL_PROC_UNUSED #undef SDL_PROC_UNUSED

View File

@@ -29,14 +29,14 @@
struct SDL_PrivateAudioData struct SDL_PrivateAudioData
{ {
/* The audio device handle */ // The audio device handle
snd_pcm_t *pcm_handle; snd_pcm_t *pcm_handle;
/* Raw mixing buffer */ // Raw mixing buffer
Uint8 *mixbuf; Uint8 *mixbuf;
/* swizzle function */ // swizzle function
void (*swizzle_func)(SDL_AudioDevice *_this, void *buffer, Uint32 bufferlen); void (*swizzle_func)(SDL_AudioDevice *_this, void *buffer, Uint32 bufferlen);
}; };
#endif /* SDL_ALSA_audio_h_ */ #endif // SDL_ALSA_audio_h_

View File

@@ -35,4 +35,4 @@ static void ANDROIDAUDIO_PauseDevices(void) {}
#endif #endif
#endif /* SDL_androidaudio_h_ */ #endif // SDL_androidaudio_h_

View File

@@ -39,7 +39,7 @@
#include <AudioToolbox/AudioToolbox.h> #include <AudioToolbox/AudioToolbox.h>
#include <AudioUnit/AudioUnit.h> #include <AudioUnit/AudioUnit.h>
/* Things named "Master" were renamed to "Main" in macOS 12.0's SDK. */ // Things named "Master" were renamed to "Main" in macOS 12.0's SDK.
#ifdef MACOSX_COREAUDIO #ifdef MACOSX_COREAUDIO
#include <AvailabilityMacros.h> #include <AvailabilityMacros.h>
#ifndef MAC_OS_VERSION_12_0 #ifndef MAC_OS_VERSION_12_0
@@ -65,4 +65,4 @@ struct SDL_PrivateAudioData
#endif #endif
}; };
#endif /* SDL_coreaudio_h_ */ #endif // SDL_coreaudio_h_

View File

@@ -79,9 +79,9 @@ static OSStatus DeviceAliveNotification(AudioObjectID devid, UInt32 num_addr, co
SDL_bool dead = SDL_FALSE; SDL_bool dead = SDL_FALSE;
if (error == kAudioHardwareBadDeviceError) { if (error == kAudioHardwareBadDeviceError) {
dead = SDL_TRUE; /* device was unplugged. */ dead = SDL_TRUE; // device was unplugged.
} else if ((error == kAudioHardwareNoError) && (!alive)) { } else if ((error == kAudioHardwareNoError) && (!alive)) {
dead = SDL_TRUE; /* device died in some other way. */ dead = SDL_TRUE; // device died in some other way.
} }
if (dead) { if (dead) {
@@ -263,7 +263,7 @@ static void COREAUDIO_DetectDevices(SDL_AudioDevice **default_output, SDL_AudioD
AudioObjectAddPropertyListener(kAudioObjectSystemObject, &devlist_address, DeviceListChangedNotification, NULL); AudioObjectAddPropertyListener(kAudioObjectSystemObject, &devlist_address, DeviceListChangedNotification, NULL);
/* Get the Device ID */ // Get the Device ID
UInt32 size; UInt32 size;
AudioDeviceID devid; AudioDeviceID devid;
@@ -428,7 +428,7 @@ static SDL_bool UpdateAudioSession(SDL_AudioDevice *device, SDL_bool open, SDL_b
/* AVAudioSessionCategoryOptionAllowBluetooth isn't available in the SDK for /* AVAudioSessionCategoryOptionAllowBluetooth isn't available in the SDK for
Apple TV but is still needed in order to output to Bluetooth devices. Apple TV but is still needed in order to output to Bluetooth devices.
*/ */
options |= 0x4; /* AVAudioSessionCategoryOptionAllowBluetooth; */ options |= 0x4; // AVAudioSessionCategoryOptionAllowBluetooth;
} }
if (category == AVAudioSessionCategoryPlayAndRecord) { if (category == AVAudioSessionCategoryPlayAndRecord) {
options |= AVAudioSessionCategoryOptionAllowBluetoothA2DP | options |= AVAudioSessionCategoryOptionAllowBluetoothA2DP |
@@ -441,7 +441,7 @@ static SDL_bool UpdateAudioSession(SDL_AudioDevice *device, SDL_bool open, SDL_b
if ([session respondsToSelector:@selector(setCategory:mode:options:error:)]) { if ([session respondsToSelector:@selector(setCategory:mode:options:error:)]) {
if (![session.category isEqualToString:category] || session.categoryOptions != options) { if (![session.category isEqualToString:category] || session.categoryOptions != options) {
/* Stop the current session so we don't interrupt other application audio */ // Stop the current session so we don't interrupt other application audio
PauseAudioDevices(); PauseAudioDevices();
[session setActive:NO error:nil]; [session setActive:NO error:nil];
session_active = SDL_FALSE; session_active = SDL_FALSE;
@@ -454,7 +454,7 @@ static SDL_bool UpdateAudioSession(SDL_AudioDevice *device, SDL_bool open, SDL_b
} }
} else { } else {
if (![session.category isEqualToString:category]) { if (![session.category isEqualToString:category]) {
/* Stop the current session so we don't interrupt other application audio */ // Stop the current session so we don't interrupt other application audio
PauseAudioDevices(); PauseAudioDevices();
[session setActive:NO error:nil]; [session setActive:NO error:nil];
session_active = SDL_FALSE; session_active = SDL_FALSE;
@@ -498,7 +498,7 @@ static SDL_bool UpdateAudioSession(SDL_AudioDevice *device, SDL_bool open, SDL_b
/* An interruption end notification is not guaranteed to be sent if /* An interruption end notification is not guaranteed to be sent if
we were previously interrupted... resuming if needed when the app we were previously interrupted... resuming if needed when the app
becomes active seems to be the way to go. */ becomes active seems to be the way to go. */
// Note: object: below needs to be nil, as otherwise it filters by the object, and session doesn't send foreground / active notifications. johna // Note: object: below needs to be nil, as otherwise it filters by the object, and session doesn't send foreground / active notifications.
[center addObserver:listener [center addObserver:listener
selector:@selector(applicationBecameActive:) selector:@selector(applicationBecameActive:)
name:UIApplicationDidBecomeActiveNotification name:UIApplicationDidBecomeActiveNotification
@@ -717,7 +717,7 @@ static int PrepareAudioQueue(SDL_AudioDevice *device)
SDL_UpdatedAudioDeviceFormat(device); // make sure this is correct. SDL_UpdatedAudioDeviceFormat(device); // make sure this is correct.
/* Set the channel layout for the audio queue */ // Set the channel layout for the audio queue
AudioChannelLayout layout; AudioChannelLayout layout;
SDL_zero(layout); SDL_zero(layout);
switch (device->spec.channels) { switch (device->spec.channels) {
@@ -740,7 +740,7 @@ static int PrepareAudioQueue(SDL_AudioDevice *device)
layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_1_A; layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_1_A;
break; break;
case 7: case 7:
/* FIXME: Need to move channel[4] (BC) to channel[6] */ // FIXME: Need to move channel[4] (BC) to channel[6]
layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_6_1_A; layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_6_1_A;
break; break;
case 8: case 8:
@@ -763,7 +763,7 @@ static int PrepareAudioQueue(SDL_AudioDevice *device)
int numAudioBuffers = 2; int numAudioBuffers = 2;
const double msecs = (device->sample_frames / ((double)device->spec.freq)) * 1000.0; const double msecs = (device->sample_frames / ((double)device->spec.freq)) * 1000.0;
if (msecs < MINIMUM_AUDIO_BUFFER_TIME_MS) { /* use more buffers if we have a VERY small sample set. */ if (msecs < MINIMUM_AUDIO_BUFFER_TIME_MS) { // use more buffers if we have a VERY small sample set.
numAudioBuffers = ((int)SDL_ceil(MINIMUM_AUDIO_BUFFER_TIME_MS / msecs) * 2); numAudioBuffers = ((int)SDL_ceil(MINIMUM_AUDIO_BUFFER_TIME_MS / msecs) * 2);
} }
@@ -782,7 +782,7 @@ static int PrepareAudioQueue(SDL_AudioDevice *device)
CHECK_RESULT("AudioQueueAllocateBuffer"); CHECK_RESULT("AudioQueueAllocateBuffer");
SDL_memset(device->hidden->audioBuffer[i]->mAudioData, device->silence_value, device->hidden->audioBuffer[i]->mAudioDataBytesCapacity); SDL_memset(device->hidden->audioBuffer[i]->mAudioData, device->silence_value, device->hidden->audioBuffer[i]->mAudioDataBytesCapacity);
device->hidden->audioBuffer[i]->mAudioDataByteSize = device->hidden->audioBuffer[i]->mAudioDataBytesCapacity; device->hidden->audioBuffer[i]->mAudioDataByteSize = device->hidden->audioBuffer[i]->mAudioDataBytesCapacity;
/* !!! FIXME: should we use AudioQueueEnqueueBufferWithParameters and specify all frames be "trimmed" so these are immediately ready to refill with SDL callback data? */ // !!! FIXME: should we use AudioQueueEnqueueBufferWithParameters and specify all frames be "trimmed" so these are immediately ready to refill with SDL callback data?
result = AudioQueueEnqueueBuffer(device->hidden->audioQueue, device->hidden->audioBuffer[i], 0, NULL); result = AudioQueueEnqueueBuffer(device->hidden->audioQueue, device->hidden->audioBuffer[i], 0, NULL);
CHECK_RESULT("AudioQueueEnqueueBuffer"); CHECK_RESULT("AudioQueueEnqueueBuffer");
} }
@@ -831,7 +831,7 @@ static int AudioQueueThreadEntry(void *arg)
static int COREAUDIO_OpenDevice(SDL_AudioDevice *device) static int COREAUDIO_OpenDevice(SDL_AudioDevice *device)
{ {
/* Initialize all variables that we clean on shutdown */ // Initialize all variables that we clean on shutdown
device->hidden = (struct SDL_PrivateAudioData *)SDL_calloc(1, sizeof(*device->hidden)); device->hidden = (struct SDL_PrivateAudioData *)SDL_calloc(1, sizeof(*device->hidden));
if (device->hidden == NULL) { if (device->hidden == NULL) {
return SDL_OutOfMemory(); return SDL_OutOfMemory();
@@ -842,7 +842,7 @@ static int COREAUDIO_OpenDevice(SDL_AudioDevice *device)
return -1; return -1;
} }
/* Stop CoreAudio from doing expensive audio rate conversion */ // Stop CoreAudio from doing expensive audio rate conversion
@autoreleasepool { @autoreleasepool {
AVAudioSession *session = [AVAudioSession sharedInstance]; AVAudioSession *session = [AVAudioSession sharedInstance];
[session setPreferredSampleRate:device->spec.freq error:nil]; [session setPreferredSampleRate:device->spec.freq error:nil];
@@ -856,12 +856,12 @@ static int COREAUDIO_OpenDevice(SDL_AudioDevice *device)
device->spec.channels = session.preferredOutputNumberOfChannels; device->spec.channels = session.preferredOutputNumberOfChannels;
} }
#else #else
/* Calling setPreferredOutputNumberOfChannels seems to break audio output on iOS */ // Calling setPreferredOutputNumberOfChannels seems to break audio output on iOS
#endif /* TARGET_OS_TV */ #endif // TARGET_OS_TV
} }
#endif #endif
/* Setup a AudioStreamBasicDescription with the requested format */ // Setup a AudioStreamBasicDescription with the requested format
AudioStreamBasicDescription *strdesc = &device->hidden->strdesc; AudioStreamBasicDescription *strdesc = &device->hidden->strdesc;
strdesc->mFormatID = kAudioFormatLinearPCM; strdesc->mFormatID = kAudioFormatLinearPCM;
strdesc->mFormatFlags = kLinearPCMFormatFlagIsPacked; strdesc->mFormatFlags = kLinearPCMFormatFlagIsPacked;
@@ -872,7 +872,7 @@ static int COREAUDIO_OpenDevice(SDL_AudioDevice *device)
const SDL_AudioFormat *closefmts = SDL_ClosestAudioFormats(device->spec.format); const SDL_AudioFormat *closefmts = SDL_ClosestAudioFormats(device->spec.format);
SDL_AudioFormat test_format; SDL_AudioFormat test_format;
while ((test_format = *(closefmts++)) != 0) { while ((test_format = *(closefmts++)) != 0) {
/* CoreAudio handles most of SDL's formats natively. */ // CoreAudio handles most of SDL's formats natively.
switch (test_format) { switch (test_format) {
case SDL_AUDIO_U8: case SDL_AUDIO_U8:
case SDL_AUDIO_S8: case SDL_AUDIO_S8:
@@ -890,7 +890,7 @@ static int COREAUDIO_OpenDevice(SDL_AudioDevice *device)
break; break;
} }
if (!test_format) { /* shouldn't happen, but just in case... */ if (!test_format) { // shouldn't happen, but just in case...
return SDL_SetError("%s: Unsupported audio format", "coreaudio"); return SDL_SetError("%s: Unsupported audio format", "coreaudio");
} }
device->spec.format = test_format; device->spec.format = test_format;
@@ -914,10 +914,10 @@ static int COREAUDIO_OpenDevice(SDL_AudioDevice *device)
} }
#endif #endif
/* This has to init in a new thread so it can get its own CFRunLoop. :/ */ // This has to init in a new thread so it can get its own CFRunLoop. :/
device->hidden->ready_semaphore = SDL_CreateSemaphore(0); device->hidden->ready_semaphore = SDL_CreateSemaphore(0);
if (!device->hidden->ready_semaphore) { if (!device->hidden->ready_semaphore) {
return -1; /* oh well. */ return -1; // oh well.
} }
char threadname[64]; char threadname[64];
@@ -951,7 +951,6 @@ static void COREAUDIO_DeinitializeStart(void)
static SDL_bool COREAUDIO_Init(SDL_AudioDriverImpl *impl) static SDL_bool COREAUDIO_Init(SDL_AudioDriverImpl *impl)
{ {
/* Set the function pointers */
impl->OpenDevice = COREAUDIO_OpenDevice; impl->OpenDevice = COREAUDIO_OpenDevice;
impl->PlayDevice = COREAUDIO_PlayDevice; impl->PlayDevice = COREAUDIO_PlayDevice;
impl->GetDeviceBuf = COREAUDIO_GetDeviceBuf; impl->GetDeviceBuf = COREAUDIO_GetDeviceBuf;
@@ -971,11 +970,11 @@ static SDL_bool COREAUDIO_Init(SDL_AudioDriverImpl *impl)
impl->ProvidesOwnCallbackThread = SDL_TRUE; impl->ProvidesOwnCallbackThread = SDL_TRUE;
impl->HasCaptureSupport = SDL_TRUE; impl->HasCaptureSupport = SDL_TRUE;
return SDL_TRUE; /* this audio target is available. */ return SDL_TRUE;
} }
AudioBootStrap COREAUDIO_bootstrap = { AudioBootStrap COREAUDIO_bootstrap = {
"coreaudio", "CoreAudio", COREAUDIO_Init, SDL_FALSE "coreaudio", "CoreAudio", COREAUDIO_Init, SDL_FALSE
}; };
#endif /* SDL_AUDIO_DRIVER_COREAUDIO */ #endif // SDL_AUDIO_DRIVER_COREAUDIO

View File

@@ -27,10 +27,10 @@
struct SDL_PrivateAudioData struct SDL_PrivateAudioData
{ {
/* The file descriptor for the audio device */ // The file descriptor for the audio device
SDL_RWops *io; SDL_RWops *io;
Uint32 io_delay; Uint32 io_delay;
Uint8 *mixbuf; Uint8 *mixbuf;
}; };
#endif /* SDL_diskaudio_h_ */ #endif // SDL_diskaudio_h_

View File

@@ -24,8 +24,8 @@
#ifdef SDL_AUDIO_DRIVER_OSS #ifdef SDL_AUDIO_DRIVER_OSS
#include <stdio.h> /* For perror() */ #include <stdio.h> // For perror()
#include <string.h> /* For strerror() */ #include <string.h> // For strerror()
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
@@ -97,7 +97,7 @@ static int DSP_OpenDevice(SDL_AudioDevice *device)
return SDL_SetError("Couldn't get audio format list"); return SDL_SetError("Couldn't get audio format list");
} }
/* Try for a closest match on audio format */ // Try for a closest match on audio format
int format = 0; int format = 0;
SDL_AudioFormat test_format; SDL_AudioFormat test_format;
const SDL_AudioFormat *closefmts = SDL_ClosestAudioFormats(device->spec.format); const SDL_AudioFormat *closefmts = SDL_ClosestAudioFormats(device->spec.format);
@@ -156,7 +156,7 @@ static int DSP_OpenDevice(SDL_AudioDevice *device)
} }
device->spec.freq = value; device->spec.freq = value;
/* Calculate the final parameters for this audio specification */ // Calculate the final parameters for this audio specification
SDL_UpdatedAudioDeviceFormat(device); SDL_UpdatedAudioDeviceFormat(device);
/* Determine the power of two of the fragment size /* Determine the power of two of the fragment size
@@ -168,9 +168,9 @@ static int DSP_OpenDevice(SDL_AudioDevice *device)
while ((0x01U << frag_spec) < device->buffer_size) { while ((0x01U << frag_spec) < device->buffer_size) {
frag_spec++; frag_spec++;
} }
frag_spec |= 0x00020000; /* two fragments, for low latency */ frag_spec |= 0x00020000; // two fragments, for low latency
/* Set the audio buffering parameters */ // Set the audio buffering parameters
#ifdef DEBUG_AUDIO #ifdef DEBUG_AUDIO
fprintf(stderr, "Requesting %d fragments of size %d\n", fprintf(stderr, "Requesting %d fragments of size %d\n",
(frag_spec >> 16), 1 << (frag_spec & 0xFFFF)); (frag_spec >> 16), 1 << (frag_spec & 0xFFFF));
@@ -189,7 +189,7 @@ static int DSP_OpenDevice(SDL_AudioDevice *device)
} }
#endif #endif
/* Allocate mixing buffer */ // Allocate mixing buffer
if (!device->iscapture) { if (!device->iscapture) {
device->hidden->mixbuf = (Uint8 *)SDL_malloc(device->buffer_size); device->hidden->mixbuf = (Uint8 *)SDL_malloc(device->buffer_size);
if (device->hidden->mixbuf == NULL) { if (device->hidden->mixbuf == NULL) {
@@ -269,8 +269,8 @@ static void DSP_FlushCapture(SDL_AudioDevice *device)
static SDL_bool InitTimeDevicesExist = SDL_FALSE; static SDL_bool InitTimeDevicesExist = SDL_FALSE;
static SDL_bool look_for_devices_test(int fd) static SDL_bool look_for_devices_test(int fd)
{ {
InitTimeDevicesExist = SDL_TRUE; /* note that _something_ exists. */ InitTimeDevicesExist = SDL_TRUE; // note that _something_ exists.
/* Don't add to the device list, we're just seeing if any devices exist. */ // Don't add to the device list, we're just seeing if any devices exist.
return SDL_FALSE; return SDL_FALSE;
} }
@@ -280,10 +280,9 @@ static SDL_bool DSP_Init(SDL_AudioDriverImpl *impl)
SDL_EnumUnixAudioDevices(SDL_FALSE, look_for_devices_test); SDL_EnumUnixAudioDevices(SDL_FALSE, look_for_devices_test);
if (!InitTimeDevicesExist) { if (!InitTimeDevicesExist) {
SDL_SetError("dsp: No such audio device"); SDL_SetError("dsp: No such audio device");
return SDL_FALSE; /* maybe try a different backend. */ return SDL_FALSE; // maybe try a different backend.
} }
/* Set the function pointers */
impl->DetectDevices = DSP_DetectDevices; impl->DetectDevices = DSP_DetectDevices;
impl->OpenDevice = DSP_OpenDevice; impl->OpenDevice = DSP_OpenDevice;
impl->WaitDevice = DSP_WaitDevice; impl->WaitDevice = DSP_WaitDevice;
@@ -296,11 +295,11 @@ static SDL_bool DSP_Init(SDL_AudioDriverImpl *impl)
impl->HasCaptureSupport = SDL_TRUE; impl->HasCaptureSupport = SDL_TRUE;
return SDL_TRUE; /* this audio target is available. */ return SDL_TRUE;
} }
AudioBootStrap DSP_bootstrap = { AudioBootStrap DSP_bootstrap = {
"dsp", "Open Sound System (/dev/dsp)", DSP_Init, SDL_FALSE "dsp", "Open Sound System (/dev/dsp)", DSP_Init, SDL_FALSE
}; };
#endif /* SDL_AUDIO_DRIVER_OSS */ #endif // SDL_AUDIO_DRIVER_OSS

View File

@@ -27,11 +27,11 @@
struct SDL_PrivateAudioData struct SDL_PrivateAudioData
{ {
/* The file descriptor for the audio device */ // The file descriptor for the audio device
int audio_fd; int audio_fd;
/* Raw mixing buffer */ // Raw mixing buffer
Uint8 *mixbuf; Uint8 *mixbuf;
}; };
#endif /* SDL_dspaudio_h_ */ #endif // SDL_dspaudio_h_

View File

@@ -30,4 +30,4 @@ struct SDL_PrivateAudioData
Uint8 *mixbuf; Uint8 *mixbuf;
}; };
#endif /* SDL_emscriptenaudio_h_ */ #endif // SDL_emscriptenaudio_h_

View File

@@ -32,4 +32,4 @@ struct SDL_PrivateAudioData
int current_buffer_len; int current_buffer_len;
}; };
#endif /* SDL_haikuaudio_h_ */ #endif // SDL_haikuaudio_h_

View File

@@ -53,19 +53,19 @@ static int load_jack_syms(void);
static const char *jack_library = SDL_AUDIO_DRIVER_JACK_DYNAMIC; static const char *jack_library = SDL_AUDIO_DRIVER_JACK_DYNAMIC;
static void *jack_handle = NULL; static void *jack_handle = NULL;
/* !!! FIXME: this is copy/pasted in several places now */ // !!! FIXME: this is copy/pasted in several places now
static int load_jack_sym(const char *fn, void **addr) static int load_jack_sym(const char *fn, void **addr)
{ {
*addr = SDL_LoadFunction(jack_handle, fn); *addr = SDL_LoadFunction(jack_handle, fn);
if (*addr == NULL) { if (*addr == NULL) {
/* Don't call SDL_SetError(): SDL_LoadFunction already did. */ // Don't call SDL_SetError(): SDL_LoadFunction already did.
return 0; return 0;
} }
return 1; return 1;
} }
/* cast funcs to char* first, to please GCC's strict aliasing rules. */ // cast funcs to char* first, to please GCC's strict aliasing rules.
#define SDL_JACK_SYM(x) \ #define SDL_JACK_SYM(x) \
if (!load_jack_sym(#x, (void **)(char *)&JACK_##x)) \ if (!load_jack_sym(#x, (void **)(char *)&JACK_##x)) \
return -1 return -1
@@ -85,7 +85,7 @@ static int LoadJackLibrary(void)
jack_handle = SDL_LoadObject(jack_library); jack_handle = SDL_LoadObject(jack_library);
if (jack_handle == NULL) { if (jack_handle == NULL) {
retval = -1; retval = -1;
/* Don't call SDL_SetError(): SDL_LoadObject already did. */ // Don't call SDL_SetError(): SDL_LoadObject already did.
} else { } else {
retval = load_jack_syms(); retval = load_jack_syms();
if (retval < 0) { if (retval < 0) {
@@ -110,7 +110,7 @@ static int LoadJackLibrary(void)
return 0; return 0;
} }
#endif /* SDL_AUDIO_DRIVER_JACK_DYNAMIC */ #endif // SDL_AUDIO_DRIVER_JACK_DYNAMIC
static int load_jack_syms(void) static int load_jack_syms(void)
{ {
@@ -137,7 +137,7 @@ static int load_jack_syms(void)
return 0; return 0;
} }
static void jackShutdownCallback(void *arg) /* JACK went away; device is lost. */ static void jackShutdownCallback(void *arg) // JACK went away; device is lost.
{ {
SDL_AudioDeviceDisconnected((SDL_AudioDevice *)arg); SDL_AudioDeviceDisconnected((SDL_AudioDevice *)arg);
} }
@@ -294,7 +294,7 @@ static int JACK_OpenDevice(SDL_AudioDevice *device)
int ports = 0; int ports = 0;
int i; int i;
/* Initialize all variables that we clean on shutdown */ // Initialize all variables that we clean on shutdown
device->hidden = (struct SDL_PrivateAudioData *)SDL_calloc(1, sizeof(*device->hidden)); device->hidden = (struct SDL_PrivateAudioData *)SDL_calloc(1, sizeof(*device->hidden));
if (device->hidden == NULL) { if (device->hidden == NULL) {
return SDL_OutOfMemory(); return SDL_OutOfMemory();
@@ -314,16 +314,16 @@ static int JACK_OpenDevice(SDL_AudioDevice *device)
} }
while (devports[++ports]) { while (devports[++ports]) {
/* spin to count devports */ // spin to count devports
} }
/* Filter out non-audio ports */ // Filter out non-audio ports
audio_ports = SDL_calloc(ports, sizeof(*audio_ports)); audio_ports = SDL_calloc(ports, sizeof(*audio_ports));
for (i = 0; i < ports; i++) { for (i = 0; i < ports; i++) {
const jack_port_t *dport = JACK_jack_port_by_name(client, devports[i]); const jack_port_t *dport = JACK_jack_port_by_name(client, devports[i]);
const char *type = JACK_jack_port_type(dport); const char *type = JACK_jack_port_type(dport);
const int len = SDL_strlen(type); const int len = SDL_strlen(type);
/* See if type ends with "audio" */ // See if type ends with "audio"
if (len >= 5 && !SDL_memcmp(type + len - 5, "audio", 5)) { if (len >= 5 && !SDL_memcmp(type + len - 5, "audio", 5)) {
audio_ports[channels++] = i; audio_ports[channels++] = i;
} }
@@ -335,7 +335,7 @@ static int JACK_OpenDevice(SDL_AudioDevice *device)
/* !!! FIXME: docs say about buffer size: "This size may change, clients that depend on it must register a bufsize_callback so they will be notified if it does." */ /* !!! FIXME: docs say about buffer size: "This size may change, clients that depend on it must register a bufsize_callback so they will be notified if it does." */
/* Jack pretty much demands what it wants. */ // Jack pretty much demands what it wants.
device->spec.format = SDL_AUDIO_F32; device->spec.format = SDL_AUDIO_F32;
device->spec.freq = JACK_jack_get_sample_rate(client); device->spec.freq = JACK_jack_get_sample_rate(client);
device->spec.channels = channels; device->spec.channels = channels;
@@ -351,7 +351,7 @@ static int JACK_OpenDevice(SDL_AudioDevice *device)
} }
} }
/* Build SDL's ports, which we will connect to the device ports. */ // Build SDL's ports, which we will connect to the device ports.
device->hidden->sdlports = (jack_port_t **)SDL_calloc(channels, sizeof(jack_port_t *)); device->hidden->sdlports = (jack_port_t **)SDL_calloc(channels, sizeof(jack_port_t *));
if (device->hidden->sdlports == NULL) { if (device->hidden->sdlports == NULL) {
SDL_free(audio_ports); SDL_free(audio_ports);
@@ -386,7 +386,7 @@ static int JACK_OpenDevice(SDL_AudioDevice *device)
return SDL_SetError("Failed to activate JACK client"); return SDL_SetError("Failed to activate JACK client");
} }
/* once activated, we can connect all the ports. */ // once activated, we can connect all the ports.
for (i = 0; i < channels; i++) { for (i = 0; i < channels; i++) {
const char *sdlport = JACK_jack_port_name(device->hidden->sdlports[i]); const char *sdlport = JACK_jack_port_name(device->hidden->sdlports[i]);
const char *srcport = iscapture ? devports[audio_ports[i]] : sdlport; const char *srcport = iscapture ? devports[audio_ports[i]] : sdlport;
@@ -397,11 +397,11 @@ static int JACK_OpenDevice(SDL_AudioDevice *device)
} }
} }
/* don't need these anymore. */ // don't need these anymore.
JACK_jack_free(devports); JACK_jack_free(devports);
SDL_free(audio_ports); SDL_free(audio_ports);
/* We're ready to rock and roll. :-) */ // We're ready to rock and roll. :-)
return 0; return 0;
} }
@@ -415,7 +415,7 @@ static SDL_bool JACK_Init(SDL_AudioDriverImpl *impl)
if (LoadJackLibrary() < 0) { if (LoadJackLibrary() < 0) {
return SDL_FALSE; return SDL_FALSE;
} else { } else {
/* Make sure a JACK server is running and available. */ // Make sure a JACK server is running and available.
jack_status_t status; jack_status_t status;
jack_client_t *client = JACK_jack_client_open("SDL", JackNoStartServer, &status, NULL); jack_client_t *client = JACK_jack_client_open("SDL", JackNoStartServer, &status, NULL);
if (client == NULL) { if (client == NULL) {
@@ -425,7 +425,6 @@ static SDL_bool JACK_Init(SDL_AudioDriverImpl *impl)
JACK_jack_client_close(client); JACK_jack_client_close(client);
} }
/* Set the function pointers */
impl->OpenDevice = JACK_OpenDevice; impl->OpenDevice = JACK_OpenDevice;
impl->GetDeviceBuf = JACK_GetDeviceBuf; impl->GetDeviceBuf = JACK_GetDeviceBuf;
impl->PlayDevice = JACK_PlayDevice; impl->PlayDevice = JACK_PlayDevice;
@@ -438,11 +437,11 @@ static SDL_bool JACK_Init(SDL_AudioDriverImpl *impl)
impl->HasCaptureSupport = SDL_TRUE; impl->HasCaptureSupport = SDL_TRUE;
impl->ProvidesOwnCallbackThread = SDL_TRUE; impl->ProvidesOwnCallbackThread = SDL_TRUE;
return SDL_TRUE; /* this audio target is available. */ return SDL_TRUE;
} }
AudioBootStrap JACK_bootstrap = { AudioBootStrap JACK_bootstrap = {
"jack", "JACK Audio Connection Kit", JACK_Init, SDL_FALSE "jack", "JACK Audio Connection Kit", JACK_Init, SDL_FALSE
}; };
#endif /* SDL_AUDIO_DRIVER_JACK */ #endif // SDL_AUDIO_DRIVER_JACK

View File

@@ -32,4 +32,4 @@ struct SDL_PrivateAudioData
float *iobuffer; float *iobuffer;
}; };
#endif /* SDL_jackaudio_h_ */ #endif // SDL_jackaudio_h_

View File

@@ -24,11 +24,11 @@
#include <3ds.h> #include <3ds.h>
#define NUM_BUFFERS 2 /* -- Don't lower this! */ #define NUM_BUFFERS 2 // -- Don't lower this!
struct SDL_PrivateAudioData struct SDL_PrivateAudioData
{ {
/* Speaker data */ // Speaker data
Uint8 *mixbuf; Uint8 *mixbuf;
Uint32 nextbuf; Uint32 nextbuf;
ndspWaveBuf waveBuf[NUM_BUFFERS]; ndspWaveBuf waveBuf[NUM_BUFFERS];
@@ -37,4 +37,4 @@ struct SDL_PrivateAudioData
SDL_bool isCancelled; SDL_bool isCancelled;
}; };
#endif /* SDL_n3dsaudio_h */ #endif // SDL_n3dsaudio_h

View File

@@ -135,7 +135,7 @@ static int NETBSDAUDIO_WaitDevice(SDL_AudioDevice *device)
} else if (iscapture && (remain < device->buffer_size)) { } else if (iscapture && (remain < device->buffer_size)) {
SDL_Delay(10); SDL_Delay(10);
} else { } else {
break; /* ready to go! */ break; // ready to go!
} }
} }

View File

@@ -27,18 +27,18 @@
struct SDL_PrivateAudioData struct SDL_PrivateAudioData
{ {
/* The file descriptor for the audio device */ // The file descriptor for the audio device
int audio_fd; int audio_fd;
/* Raw mixing buffer */ // Raw mixing buffer
Uint8 *mixbuf; Uint8 *mixbuf;
int mixlen; int mixlen;
/* Support for audio timing using a timer, in addition to SDL_IOReady() */ // Support for audio timing using a timer, in addition to SDL_IOReady()
float frame_ticks; float frame_ticks;
float next_frame; float next_frame;
}; };
#define FUDGE_TICKS 10 /* The scheduler overhead ticks per frame */ #define FUDGE_TICKS 10 // The scheduler overhead ticks per frame
#endif /* SDL_netbsdaudio_h_ */ #endif // SDL_netbsdaudio_h_

View File

@@ -35,4 +35,4 @@ static void OPENSLES_PauseDevices(void) {}
#endif #endif
#endif /* SDL_openslesaudio_h_ */ #endif // SDL_openslesaudio_h_

View File

@@ -63,7 +63,7 @@
* This seems to be a sane lower limit as Pipewire * This seems to be a sane lower limit as Pipewire
* uses it in several of it's own modules. * uses it in several of it's own modules.
*/ */
#define PW_MIN_SAMPLES 32 /* About 0.67ms at 48kHz */ #define PW_MIN_SAMPLES 32 // About 0.67ms at 48kHz
#define PW_BASE_CLOCK_RATE 48000 #define PW_BASE_CLOCK_RATE 48000
#define PW_POD_BUFFER_LENGTH 1024 #define PW_POD_BUFFER_LENGTH 1024
@@ -82,7 +82,7 @@ enum PW_READY_FLAGS
static SDL_bool pipewire_initialized = SDL_FALSE; static SDL_bool pipewire_initialized = SDL_FALSE;
/* Pipewire entry points */ // Pipewire entry points
static const char *(*PIPEWIRE_pw_get_library_version)(void); static const char *(*PIPEWIRE_pw_get_library_version)(void);
static void (*PIPEWIRE_pw_init)(int *, char ***); static void (*PIPEWIRE_pw_init)(int *, char ***);
static void (*PIPEWIRE_pw_deinit)(void); static void (*PIPEWIRE_pw_deinit)(void);
@@ -127,7 +127,7 @@ static int pipewire_dlsym(const char *fn, void **addr)
{ {
*addr = SDL_LoadFunction(pipewire_handle, fn); *addr = SDL_LoadFunction(pipewire_handle, fn);
if (*addr == NULL) { if (*addr == NULL) {
/* Don't call SDL_SetError(): SDL_LoadFunction already did. */ // Don't call SDL_SetError(): SDL_LoadFunction already did.
return 0; return 0;
} }
@@ -163,10 +163,11 @@ static int load_pipewire_library(void)
} }
static void unload_pipewire_library(void) static void unload_pipewire_library(void)
{ /* Nothing to do */ {
// Nothing to do
} }
#endif /* SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC */ #endif // SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC
static int load_pipewire_syms(void) static int load_pipewire_syms(void)
{ {
@@ -220,7 +221,7 @@ static int init_pipewire_library(void)
return -1; return -1;
} }
/* SDL can build against 0.3.20, but requires 0.3.24 */ // SDL can build against 0.3.20, but requires 0.3.24
if (pipewire_version_at_least(0, 3, 24)) { if (pipewire_version_at_least(0, 3, 24)) {
PIPEWIRE_pw_init(NULL, NULL); PIPEWIRE_pw_init(NULL, NULL);
return 0; return 0;
@@ -237,7 +238,7 @@ static void deinit_pipewire_library(void)
unload_pipewire_library(); unload_pipewire_library();
} }
/* A generic Pipewire node object used for enumeration. */ // A generic Pipewire node object used for enumeration.
struct node_object struct node_object
{ {
struct spa_list link; struct spa_list link;
@@ -260,7 +261,7 @@ struct node_object
struct spa_hook core_listener; struct spa_hook core_listener;
}; };
/* A sink/source node used for stream I/O. */ // A sink/source node used for stream I/O.
struct io_node struct io_node
{ {
struct spa_list link; struct spa_list link;
@@ -269,13 +270,13 @@ struct io_node
SDL_bool is_capture; SDL_bool is_capture;
SDL_AudioSpec spec; SDL_AudioSpec spec;
const char *name; /* Friendly name */ const char *name; // Friendly name
const char *path; /* OS identifier (i.e. ALSA endpoint) */ const char *path; // OS identifier (i.e. ALSA endpoint)
char buf[]; /* Buffer to hold the name and path strings. */ char buf[]; // Buffer to hold the name and path strings.
}; };
/* The global hotplug thread and associated objects. */ // The global hotplug thread and associated objects.
static struct pw_thread_loop *hotplug_loop; static struct pw_thread_loop *hotplug_loop;
static struct pw_core *hotplug_core; static struct pw_core *hotplug_core;
static struct pw_context *hotplug_context; static struct pw_context *hotplug_context;
@@ -291,13 +292,13 @@ static SDL_bool hotplug_events_enabled;
static char *pipewire_default_sink_id = NULL; static char *pipewire_default_sink_id = NULL;
static char *pipewire_default_source_id = NULL; static char *pipewire_default_source_id = NULL;
/* The active node list */ // The active node list
static SDL_bool io_list_check_add(struct io_node *node) static SDL_bool io_list_check_add(struct io_node *node)
{ {
struct io_node *n; struct io_node *n;
SDL_bool ret = SDL_TRUE; SDL_bool ret = SDL_TRUE;
/* See if the node is already in the list */ // See if the node is already in the list
spa_list_for_each (n, &hotplug_io_list, link) { spa_list_for_each (n, &hotplug_io_list, link) {
if (n->id == node->id) { if (n->id == node->id) {
ret = SDL_FALSE; ret = SDL_FALSE;
@@ -305,7 +306,7 @@ static SDL_bool io_list_check_add(struct io_node *node)
} }
} }
/* Add to the list if the node doesn't already exist */ // Add to the list if the node doesn't already exist
spa_list_append(&hotplug_io_list, &node->link); spa_list_append(&hotplug_io_list, &node->link);
if (hotplug_events_enabled) { if (hotplug_events_enabled) {
@@ -321,7 +322,7 @@ static void io_list_remove(Uint32 id)
{ {
struct io_node *n, *temp; struct io_node *n, *temp;
/* Find and remove the node from the list */ // Find and remove the node from the list
spa_list_for_each_safe (n, temp, &hotplug_io_list, link) { spa_list_for_each_safe (n, temp, &hotplug_io_list, link) {
if (n->id == id) { if (n->id == id) {
spa_list_remove(&n->link); spa_list_remove(&n->link);
@@ -369,7 +370,7 @@ static void node_object_destroy(struct node_object *node)
PIPEWIRE_pw_proxy_destroy(node->proxy); PIPEWIRE_pw_proxy_destroy(node->proxy);
} }
/* The pending node list */ // The pending node list
static void pending_list_add(struct node_object *node) static void pending_list_add(struct node_object *node)
{ {
SDL_assert(node); SDL_assert(node);
@@ -401,7 +402,7 @@ static void *node_object_new(Uint32 id, const char *type, Uint32 version, const
struct pw_proxy *proxy; struct pw_proxy *proxy;
struct node_object *node; struct node_object *node;
/* Create the proxy object */ // Create the proxy object
proxy = pw_registry_bind(hotplug_registry, id, type, version, sizeof(struct node_object)); proxy = pw_registry_bind(hotplug_registry, id, type, version, sizeof(struct node_object));
if (proxy == NULL) { if (proxy == NULL) {
SDL_SetError("Pipewire: Failed to create proxy object (%i)", errno); SDL_SetError("Pipewire: Failed to create proxy object (%i)", errno);
@@ -414,24 +415,24 @@ static void *node_object_new(Uint32 id, const char *type, Uint32 version, const
node->id = id; node->id = id;
node->proxy = proxy; node->proxy = proxy;
/* Add the callbacks */ // Add the callbacks
pw_core_add_listener(hotplug_core, &node->core_listener, core_events, node); pw_core_add_listener(hotplug_core, &node->core_listener, core_events, node);
PIPEWIRE_pw_proxy_add_object_listener(node->proxy, &node->node_listener, funcs, node); PIPEWIRE_pw_proxy_add_object_listener(node->proxy, &node->node_listener, funcs, node);
/* Add the node to the active list */ // Add the node to the active list
pending_list_add(node); pending_list_add(node);
return node; return node;
} }
/* Core sync points */ // Core sync points
static void core_events_hotplug_init_callback(void *object, uint32_t id, int seq) static void core_events_hotplug_init_callback(void *object, uint32_t id, int seq)
{ {
if (id == PW_ID_CORE && seq == hotplug_init_seq_val) { if (id == PW_ID_CORE && seq == hotplug_init_seq_val) {
/* This core listener is no longer needed. */ // This core listener is no longer needed.
spa_hook_remove(&hotplug_core_listener); spa_hook_remove(&hotplug_core_listener);
/* Signal that the initial I/O list is populated */ // Signal that the initial I/O list is populated
hotplug_init_complete = SDL_TRUE; hotplug_init_complete = SDL_TRUE;
PIPEWIRE_pw_thread_loop_signal(hotplug_loop, false); PIPEWIRE_pw_thread_loop_signal(hotplug_loop, false);
} }
@@ -483,7 +484,7 @@ static void hotplug_core_sync(struct node_object *node)
} }
} }
/* Helpers for retrieving values from params */ // Helpers for retrieving values from params
static SDL_bool get_range_param(const struct spa_pod *param, Uint32 key, int *def, int *min, int *max) static SDL_bool get_range_param(const struct spa_pod *param, Uint32 key, int *def, int *min, int *max)
{ {
const struct spa_pod_prop *prop; const struct spa_pod_prop *prop;
@@ -535,7 +536,7 @@ static SDL_bool get_int_param(const struct spa_pod *param, Uint32 key, int *val)
return SDL_FALSE; return SDL_FALSE;
} }
/* Interface node callbacks */ // Interface node callbacks
static void node_event_info(void *object, const struct pw_node_info *info) static void node_event_info(void *object, const struct pw_node_info *info)
{ {
struct node_object *node = object; struct node_object *node = object;
@@ -549,7 +550,7 @@ static void node_event_info(void *object, const struct pw_node_info *info)
io->spec.channels = (Uint8)SDL_atoi(prop_val); io->spec.channels = (Uint8)SDL_atoi(prop_val);
} }
/* Need to parse the parameters to get the sample rate */ // Need to parse the parameters to get the sample rate
for (i = 0; i < info->n_params; ++i) { for (i = 0; i < info->n_params; ++i) {
pw_node_enum_params(node->proxy, 0, info->params[i].id, 0, 0, NULL); pw_node_enum_params(node->proxy, 0, info->params[i].id, 0, 0, NULL);
} }
@@ -563,7 +564,7 @@ static void node_event_param(void *object, int seq, uint32_t id, uint32_t index,
struct node_object *node = object; struct node_object *node = object;
struct io_node *io = node->userdata; struct io_node *io = node->userdata;
/* Get the default frequency */ // Get the default frequency
if (io->spec.freq == 0) { if (io->spec.freq == 0) {
get_range_param(param, SPA_FORMAT_AUDIO_rate, &io->spec.freq, NULL, NULL); get_range_param(param, SPA_FORMAT_AUDIO_rate, &io->spec.freq, NULL, NULL);
} }
@@ -586,19 +587,19 @@ static const struct pw_node_events interface_node_events = { PW_VERSION_NODE_EVE
static char *get_name_from_json(const char *json) static char *get_name_from_json(const char *json)
{ {
struct spa_json parser[2]; struct spa_json parser[2];
char key[7]; /* "name" */ char key[7]; // "name"
char value[PW_MAX_IDENTIFIER_LENGTH]; char value[PW_MAX_IDENTIFIER_LENGTH];
spa_json_init(&parser[0], json, SDL_strlen(json)); spa_json_init(&parser[0], json, SDL_strlen(json));
if (spa_json_enter_object(&parser[0], &parser[1]) <= 0) { if (spa_json_enter_object(&parser[0], &parser[1]) <= 0) {
/* Not actually JSON */ // Not actually JSON
return NULL; return NULL;
} }
if (spa_json_get_string(&parser[1], key, sizeof(key)) <= 0) { if (spa_json_get_string(&parser[1], key, sizeof(key)) <= 0) {
/* Not actually a key/value pair */ // Not actually a key/value pair
return NULL; return NULL;
} }
if (spa_json_get_string(&parser[1], value, sizeof(value)) <= 0) { if (spa_json_get_string(&parser[1], value, sizeof(value)) <= 0) {
/* Somehow had a key with no value? */ // Somehow had a key with no value?
return NULL; return NULL;
} }
return SDL_strdup(value); return SDL_strdup(value);
@@ -617,7 +618,7 @@ static void change_default_device(const char *path)
} }
} }
/* Metadata node callback */ // Metadata node callback
static int metadata_property(void *object, Uint32 subject, const char *key, const char *type, const char *value) static int metadata_property(void *object, Uint32 subject, const char *key, const char *type, const char *value)
{ {
struct node_object *node = object; struct node_object *node = object;
@@ -645,13 +646,13 @@ static int metadata_property(void *object, Uint32 subject, const char *key, cons
static const struct pw_metadata_events metadata_node_events = { PW_VERSION_METADATA_EVENTS, .property = metadata_property }; static const struct pw_metadata_events metadata_node_events = { PW_VERSION_METADATA_EVENTS, .property = metadata_property };
/* Global registry callbacks */ // Global registry callbacks
static void registry_event_global_callback(void *object, uint32_t id, uint32_t permissions, const char *type, uint32_t version, static void registry_event_global_callback(void *object, uint32_t id, uint32_t permissions, const char *type, uint32_t version,
const struct spa_dict *props) const struct spa_dict *props)
{ {
struct node_object *node; struct node_object *node;
/* We're only interested in interface and metadata nodes. */ // We're only interested in interface and metadata nodes.
if (!SDL_strcmp(type, PW_TYPE_INTERFACE_Node)) { if (!SDL_strcmp(type, PW_TYPE_INTERFACE_Node)) {
const char *media_class = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS); const char *media_class = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS);
@@ -663,7 +664,7 @@ static void registry_event_global_callback(void *object, uint32_t id, uint32_t p
int desc_buffer_len; int desc_buffer_len;
int path_buffer_len; int path_buffer_len;
/* Just want sink and capture */ // Just want sink and capture
if (!SDL_strcasecmp(media_class, "Audio/Sink")) { if (!SDL_strcasecmp(media_class, "Audio/Sink")) {
is_capture = SDL_FALSE; is_capture = SDL_FALSE;
} else if (!SDL_strcasecmp(media_class, "Audio/Source")) { } else if (!SDL_strcasecmp(media_class, "Audio/Source")) {
@@ -682,7 +683,7 @@ static void registry_event_global_callback(void *object, uint32_t id, uint32_t p
return; return;
} }
/* Allocate and initialize the I/O node information struct */ // Allocate and initialize the I/O node information struct
desc_buffer_len = SDL_strlen(node_desc) + 1; desc_buffer_len = SDL_strlen(node_desc) + 1;
path_buffer_len = SDL_strlen(node_path) + 1; path_buffer_len = SDL_strlen(node_path) + 1;
node->userdata = io = SDL_calloc(1, sizeof(struct io_node) + desc_buffer_len + path_buffer_len); node->userdata = io = SDL_calloc(1, sizeof(struct io_node) + desc_buffer_len + path_buffer_len);
@@ -692,16 +693,16 @@ static void registry_event_global_callback(void *object, uint32_t id, uint32_t p
return; return;
} }
/* Begin setting the node properties */ // Begin setting the node properties
io->id = id; io->id = id;
io->is_capture = is_capture; io->is_capture = is_capture;
io->spec.format = SDL_AUDIO_F32; /* Pipewire uses floats internally, other formats require conversion. */ io->spec.format = SDL_AUDIO_F32; // Pipewire uses floats internally, other formats require conversion.
io->name = io->buf; io->name = io->buf;
io->path = io->buf + desc_buffer_len; io->path = io->buf + desc_buffer_len;
SDL_strlcpy(io->buf, node_desc, desc_buffer_len); SDL_strlcpy(io->buf, node_desc, desc_buffer_len);
SDL_strlcpy(io->buf + desc_buffer_len, node_path, path_buffer_len); SDL_strlcpy(io->buf + desc_buffer_len, node_path, path_buffer_len);
/* Update sync points */ // Update sync points
hotplug_core_sync(node); hotplug_core_sync(node);
} }
} }
@@ -712,7 +713,7 @@ static void registry_event_global_callback(void *object, uint32_t id, uint32_t p
return; return;
} }
/* Update sync points */ // Update sync points
hotplug_core_sync(node); hotplug_core_sync(node);
} }
} }
@@ -726,7 +727,7 @@ static void registry_event_remove_callback(void *object, uint32_t id)
static const struct pw_registry_events registry_events = { PW_VERSION_REGISTRY_EVENTS, .global = registry_event_global_callback, static const struct pw_registry_events registry_events = { PW_VERSION_REGISTRY_EVENTS, .global = registry_event_global_callback,
.global_remove = registry_event_remove_callback }; .global_remove = registry_event_remove_callback };
/* The hotplug thread */ // The hotplug thread
static int hotplug_loop_init(void) static int hotplug_loop_init(void)
{ {
int res; int res;
@@ -818,7 +819,7 @@ static void PIPEWIRE_DetectDevices(SDL_AudioDevice **default_output, SDL_AudioDe
PIPEWIRE_pw_thread_loop_lock(hotplug_loop); PIPEWIRE_pw_thread_loop_lock(hotplug_loop);
/* Wait until the initial registry enumeration is complete */ // Wait until the initial registry enumeration is complete
if (!hotplug_init_complete) { if (!hotplug_init_complete) {
PIPEWIRE_pw_thread_loop_wait(hotplug_loop); PIPEWIRE_pw_thread_loop_wait(hotplug_loop);
} }
@@ -839,7 +840,7 @@ static void PIPEWIRE_DetectDevices(SDL_AudioDevice **default_output, SDL_AudioDe
PIPEWIRE_pw_thread_loop_unlock(hotplug_loop); PIPEWIRE_pw_thread_loop_unlock(hotplug_loop);
} }
/* Channel maps that match the order in SDL_Audio.h */ // Channel maps that match the order in SDL_Audio.h
static const enum spa_audio_channel PIPEWIRE_channel_map_1[] = { SPA_AUDIO_CHANNEL_MONO }; static const enum spa_audio_channel PIPEWIRE_channel_map_1[] = { SPA_AUDIO_CHANNEL_MONO };
static const enum spa_audio_channel PIPEWIRE_channel_map_2[] = { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR }; static const enum spa_audio_channel PIPEWIRE_channel_map_2[] = { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR };
static const enum spa_audio_channel PIPEWIRE_channel_map_3[] = { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, SPA_AUDIO_CHANNEL_LFE }; static const enum spa_audio_channel PIPEWIRE_channel_map_3[] = { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, SPA_AUDIO_CHANNEL_LFE };
@@ -890,7 +891,7 @@ static void initialize_spa_info(const SDL_AudioSpec *spec, struct spa_audio_info
break; break;
} }
/* Pipewire natively supports all of SDL's sample formats */ // Pipewire natively supports all of SDL's sample formats
switch (spec->format) { switch (spec->format) {
case SDL_AUDIO_U8: case SDL_AUDIO_U8:
info->format = SPA_AUDIO_FORMAT_U8; info->format = SPA_AUDIO_FORMAT_U8;
@@ -1065,10 +1066,10 @@ static int PIPEWIRE_OpenDevice(SDL_AudioDevice *device)
const SDL_bool iscapture = device->iscapture; const SDL_bool iscapture = device->iscapture;
int res; int res;
/* Clamp the period size to sane values */ // Clamp the period size to sane values
const int min_period = PW_MIN_SAMPLES * SPA_MAX(device->spec.freq / PW_BASE_CLOCK_RATE, 1); const int min_period = PW_MIN_SAMPLES * SPA_MAX(device->spec.freq / PW_BASE_CLOCK_RATE, 1);
/* Get the hints for the application name, stream name and role */ // Get the hints for the application name, stream name and role
app_name = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_APP_NAME); app_name = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_APP_NAME);
if (app_name == NULL || *app_name == '\0') { if (app_name == NULL || *app_name == '\0') {
app_name = SDL_GetHint(SDL_HINT_APP_NAME); app_name = SDL_GetHint(SDL_HINT_APP_NAME);
@@ -1077,7 +1078,7 @@ static int PIPEWIRE_OpenDevice(SDL_AudioDevice *device)
} }
} }
/* App ID. Default to NULL if not available. */ // App ID. Default to NULL if not available.
app_id = SDL_GetHint(SDL_HINT_APP_ID); app_id = SDL_GetHint(SDL_HINT_APP_ID);
stream_name = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME); stream_name = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME);
@@ -1094,7 +1095,7 @@ static int PIPEWIRE_OpenDevice(SDL_AudioDevice *device)
stream_role = "Game"; stream_role = "Game";
} }
/* Initialize the Pipewire stream info from the SDL audio spec */ // Initialize the Pipewire stream info from the SDL audio spec
initialize_spa_info(&device->spec, &spa_info); initialize_spa_info(&device->spec, &spa_info);
params = spa_format_audio_raw_build(&b, SPA_PARAM_EnumFormat, &spa_info); params = spa_format_audio_raw_build(&b, SPA_PARAM_EnumFormat, &spa_info);
if (params == NULL) { if (params == NULL) {
@@ -1107,7 +1108,7 @@ static int PIPEWIRE_OpenDevice(SDL_AudioDevice *device)
return SDL_OutOfMemory(); return SDL_OutOfMemory();
} }
/* Size of a single audio frame in bytes */ // Size of a single audio frame in bytes
priv->stride = SDL_AUDIO_FRAMESIZE(device->spec); priv->stride = SDL_AUDIO_FRAMESIZE(device->spec);
if (device->sample_frames < min_period) { if (device->sample_frames < min_period) {
@@ -1122,7 +1123,7 @@ static int PIPEWIRE_OpenDevice(SDL_AudioDevice *device)
return SDL_SetError("Pipewire: Failed to create stream loop (%i)", errno); return SDL_SetError("Pipewire: Failed to create stream loop (%i)", errno);
} }
/* Load the realtime module so Pipewire can set the loop thread to the appropriate priority. */ // Load the realtime module so Pipewire can set the loop thread to the appropriate priority.
props = PIPEWIRE_pw_properties_new(PW_KEY_CONFIG_NAME, "client-rt.conf", NULL); props = PIPEWIRE_pw_properties_new(PW_KEY_CONFIG_NAME, "client-rt.conf", NULL);
if (props == NULL) { if (props == NULL) {
return SDL_SetError("Pipewire: Failed to create stream context properties (%i)", errno); return SDL_SetError("Pipewire: Failed to create stream context properties (%i)", errno);
@@ -1173,7 +1174,7 @@ static int PIPEWIRE_OpenDevice(SDL_AudioDevice *device)
} }
} }
/* Create the new stream */ // Create the new stream
priv->stream = PIPEWIRE_pw_stream_new_simple(PIPEWIRE_pw_thread_loop_get_loop(priv->loop), stream_name, props, priv->stream = PIPEWIRE_pw_stream_new_simple(PIPEWIRE_pw_thread_loop_get_loop(priv->loop), stream_name, props,
iscapture ? &stream_input_events : &stream_output_events, device); iscapture ? &stream_input_events : &stream_output_events, device);
if (priv->stream == NULL) { if (priv->stream == NULL) {
@@ -1191,7 +1192,7 @@ static int PIPEWIRE_OpenDevice(SDL_AudioDevice *device)
return SDL_SetError("Pipewire: Failed to start stream loop"); return SDL_SetError("Pipewire: Failed to start stream loop");
} }
/* Wait until all init flags are set or the stream has failed. */ // Wait until all init flags are set or the stream has failed.
PIPEWIRE_pw_thread_loop_lock(priv->loop); PIPEWIRE_pw_thread_loop_lock(priv->loop);
while (priv->stream_init_status != PW_READY_FLAG_ALL_BITS && while (priv->stream_init_status != PW_READY_FLAG_ALL_BITS &&
PIPEWIRE_pw_stream_get_state(priv->stream, NULL) != PW_STREAM_STATE_ERROR) { PIPEWIRE_pw_stream_get_state(priv->stream, NULL) != PW_STREAM_STATE_ERROR) {
@@ -1264,7 +1265,6 @@ static SDL_bool PIPEWIRE_Init(SDL_AudioDriverImpl *impl)
} }
} }
/* Set the function pointers */
impl->DetectDevices = PIPEWIRE_DetectDevices; impl->DetectDevices = PIPEWIRE_DetectDevices;
impl->OpenDevice = PIPEWIRE_OpenDevice; impl->OpenDevice = PIPEWIRE_OpenDevice;
impl->DeinitializeStart = PIPEWIRE_DeinitializeStart; impl->DeinitializeStart = PIPEWIRE_DeinitializeStart;
@@ -1283,4 +1283,4 @@ static SDL_bool PIPEWIRE_Init(SDL_AudioDriverImpl *impl)
AudioBootStrap PIPEWIRE_bootstrap = { "pipewire", "Pipewire", PIPEWIRE_Init, SDL_FALSE }; AudioBootStrap PIPEWIRE_bootstrap = { "pipewire", "Pipewire", PIPEWIRE_Init, SDL_FALSE };
#endif /* SDL_AUDIO_DRIVER_PIPEWIRE */ #endif // SDL_AUDIO_DRIVER_PIPEWIRE

View File

@@ -33,11 +33,11 @@ struct SDL_PrivateAudioData
struct pw_stream *stream; struct pw_stream *stream;
struct pw_context *context; struct pw_context *context;
Sint32 stride; /* Bytes-per-frame */ Sint32 stride; // Bytes-per-frame
int stream_init_status; int stream_init_status;
// Set in GetDeviceBuf, filled in AudioThreadIterate, queued in PlayDevice // Set in GetDeviceBuf, filled in AudioThreadIterate, queued in PlayDevice
struct pw_buffer *pw_buf; struct pw_buffer *pw_buf;
}; };
#endif /* SDL_pipewire_h_ */ #endif // SDL_pipewire_h_

View File

@@ -29,14 +29,14 @@
struct SDL_PrivateAudioData struct SDL_PrivateAudioData
{ {
/* The hardware output channel. */ // The hardware output channel.
int channel; int channel;
/* The raw allocated mixing buffer. */ // The raw allocated mixing buffer.
Uint8 *rawbuf; Uint8 *rawbuf;
/* Individual mixing buffers. */ // Individual mixing buffers.
Uint8 *mixbufs[NUM_BUFFERS]; Uint8 *mixbufs[NUM_BUFFERS];
/* Index of the next available mixing buffer. */ // Index of the next available mixing buffer.
int next_buffer; int next_buffer;
}; };
#endif /* SDL_ps2audio_h_ */ #endif // SDL_ps2audio_h_

View File

@@ -28,14 +28,14 @@
struct SDL_PrivateAudioData struct SDL_PrivateAudioData
{ {
/* The hardware output channel. */ // The hardware output channel.
int channel; int channel;
/* The raw allocated mixing buffer. */ // The raw allocated mixing buffer.
Uint8 *rawbuf; Uint8 *rawbuf;
/* Individual mixing buffers. */ // Individual mixing buffers.
Uint8 *mixbufs[NUM_BUFFERS]; Uint8 *mixbufs[NUM_BUFFERS];
/* Index of the next available mixing buffer. */ // Index of the next available mixing buffer.
int next_buffer; int next_buffer;
}; };
#endif /* SDL_pspaudio_h_ */ #endif // SDL_pspaudio_h_

View File

@@ -23,7 +23,7 @@
#ifdef SDL_AUDIO_DRIVER_PULSEAUDIO #ifdef SDL_AUDIO_DRIVER_PULSEAUDIO
/* Allow access to a raw mixing buffer */ // Allow access to a raw mixing buffer
#ifdef HAVE_SIGNAL_H #ifdef HAVE_SIGNAL_H
#include <signal.h> #include <signal.h>
@@ -39,7 +39,7 @@
typedef void (*pa_operation_notify_cb_t) (pa_operation *o, void *userdata); typedef void (*pa_operation_notify_cb_t) (pa_operation *o, void *userdata);
#endif #endif
/* should we include monitors in the device list? Set at SDL_Init time */ // should we include monitors in the device list? Set at SDL_Init time
static SDL_bool include_monitors = SDL_FALSE; static SDL_bool include_monitors = SDL_FALSE;
static pa_threaded_mainloop *pulseaudio_threaded_mainloop = NULL; static pa_threaded_mainloop *pulseaudio_threaded_mainloop = NULL;
@@ -128,14 +128,14 @@ static int load_pulseaudio_sym(const char *fn, void **addr)
{ {
*addr = SDL_LoadFunction(pulseaudio_handle, fn); *addr = SDL_LoadFunction(pulseaudio_handle, fn);
if (*addr == NULL) { if (*addr == NULL) {
/* Don't call SDL_SetError(): SDL_LoadFunction already did. */ // Don't call SDL_SetError(): SDL_LoadFunction already did.
return 0; return 0;
} }
return 1; return 1;
} }
/* cast funcs to char* first, to please GCC's strict aliasing rules. */ // cast funcs to char* first, to please GCC's strict aliasing rules.
#define SDL_PULSEAUDIO_SYM(x) \ #define SDL_PULSEAUDIO_SYM(x) \
if (!load_pulseaudio_sym(#x, (void **)(char *)&PULSEAUDIO_##x)) \ if (!load_pulseaudio_sym(#x, (void **)(char *)&PULSEAUDIO_##x)) \
return -1 return -1
@@ -155,7 +155,7 @@ static int LoadPulseAudioLibrary(void)
pulseaudio_handle = SDL_LoadObject(pulseaudio_library); pulseaudio_handle = SDL_LoadObject(pulseaudio_library);
if (pulseaudio_handle == NULL) { if (pulseaudio_handle == NULL) {
retval = -1; retval = -1;
/* Don't call SDL_SetError(): SDL_LoadObject already did. */ // Don't call SDL_SetError(): SDL_LoadObject already did.
} else { } else {
retval = load_pulseaudio_syms(); retval = load_pulseaudio_syms();
if (retval < 0) { if (retval < 0) {
@@ -180,7 +180,7 @@ static int LoadPulseAudioLibrary(void)
return 0; return 0;
} }
#endif /* SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC */ #endif // SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC
static int load_pulseaudio_syms(void) static int load_pulseaudio_syms(void)
{ {
@@ -231,7 +231,7 @@ static int load_pulseaudio_syms(void)
SDL_PULSEAUDIO_SYM(pa_stream_set_read_callback); SDL_PULSEAUDIO_SYM(pa_stream_set_read_callback);
SDL_PULSEAUDIO_SYM(pa_context_get_server_info); SDL_PULSEAUDIO_SYM(pa_context_get_server_info);
/* optional */ // optional
#ifdef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC #ifdef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC
load_pulseaudio_sym("pa_operation_set_state_callback", (void **)(char *)&PULSEAUDIO_pa_operation_set_state_callback); // needs pulseaudio 4.0 load_pulseaudio_sym("pa_operation_set_state_callback", (void **)(char *)&PULSEAUDIO_pa_operation_set_state_callback); // needs pulseaudio 4.0
load_pulseaudio_sym("pa_threaded_mainloop_set_name", (void **)(char *)&PULSEAUDIO_pa_threaded_mainloop_set_name); // needs pulseaudio 5.0 load_pulseaudio_sym("pa_threaded_mainloop_set_name", (void **)(char *)&PULSEAUDIO_pa_threaded_mainloop_set_name); // needs pulseaudio 5.0
@@ -254,7 +254,7 @@ static SDL_INLINE int squashVersion(const int major, const int minor, const int
return ((major & 0xFF) << 16) | ((minor & 0xFF) << 8) | (patch & 0xFF); return ((major & 0xFF) << 16) | ((minor & 0xFF) << 8) | (patch & 0xFF);
} }
/* Workaround for older pulse: pa_context_new() must have non-NULL appname */ // Workaround for older pulse: pa_context_new() must have non-NULL appname
static const char *getAppName(void) static const char *getAppName(void)
{ {
const char *retval = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_APP_NAME); const char *retval = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_APP_NAME);
@@ -266,12 +266,12 @@ static const char *getAppName(void)
return retval; return retval;
} else { } else {
const char *verstr = PULSEAUDIO_pa_get_library_version(); const char *verstr = PULSEAUDIO_pa_get_library_version();
retval = "SDL Application"; /* the "oh well" default. */ retval = "SDL Application"; // the "oh well" default.
if (verstr != NULL) { if (verstr != NULL) {
int maj, min, patch; int maj, min, patch;
if (SDL_sscanf(verstr, "%d.%d.%d", &maj, &min, &patch) == 3) { if (SDL_sscanf(verstr, "%d.%d.%d", &maj, &min, &patch) == 3) {
if (squashVersion(maj, min, patch) >= squashVersion(0, 9, 15)) { if (squashVersion(maj, min, patch) >= squashVersion(0, 9, 15)) {
retval = NULL; /* 0.9.15+ handles NULL correctly. */ retval = NULL; // 0.9.15+ handles NULL correctly.
} }
} }
} }
@@ -288,7 +288,7 @@ static void OperationStateChangeCallback(pa_operation *o, void *userdata)
you did the work in the callback and just want to know it's done, though. */ you did the work in the callback and just want to know it's done, though. */
static void WaitForPulseOperation(pa_operation *o) static void WaitForPulseOperation(pa_operation *o)
{ {
/* This checks for NO errors currently. Either fix that, check results elsewhere, or do things you don't care about. */ // This checks for NO errors currently. Either fix that, check results elsewhere, or do things you don't care about.
SDL_assert(pulseaudio_threaded_mainloop != NULL); SDL_assert(pulseaudio_threaded_mainloop != NULL);
if (o) { if (o) {
// note that if PULSEAUDIO_pa_operation_set_state_callback == NULL, then `o` must have a callback that will signal pulseaudio_threaded_mainloop. // note that if PULSEAUDIO_pa_operation_set_state_callback == NULL, then `o` must have a callback that will signal pulseaudio_threaded_mainloop.
@@ -299,7 +299,7 @@ static void WaitForPulseOperation(pa_operation *o)
PULSEAUDIO_pa_operation_set_state_callback(o, OperationStateChangeCallback, NULL); PULSEAUDIO_pa_operation_set_state_callback(o, OperationStateChangeCallback, NULL);
} }
while (PULSEAUDIO_pa_operation_get_state(o) == PA_OPERATION_RUNNING) { while (PULSEAUDIO_pa_operation_get_state(o) == PA_OPERATION_RUNNING) {
PULSEAUDIO_pa_threaded_mainloop_wait(pulseaudio_threaded_mainloop); /* this releases the lock and blocks on an internal condition variable. */ PULSEAUDIO_pa_threaded_mainloop_wait(pulseaudio_threaded_mainloop); // this releases the lock and blocks on an internal condition variable.
} }
PULSEAUDIO_pa_operation_unref(o); PULSEAUDIO_pa_operation_unref(o);
} }
@@ -323,7 +323,7 @@ static void DisconnectFromPulseServer(void)
static void PulseContextStateChangeCallback(pa_context *context, void *userdata) static void PulseContextStateChangeCallback(pa_context *context, void *userdata)
{ {
PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0); /* just signal any waiting code, it can look up the details. */ PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0); // just signal any waiting code, it can look up the details.
} }
static int ConnectToPulseServer(void) static int ConnectToPulseServer(void)
@@ -334,7 +334,7 @@ static int ConnectToPulseServer(void)
SDL_assert(pulseaudio_threaded_mainloop == NULL); SDL_assert(pulseaudio_threaded_mainloop == NULL);
SDL_assert(pulseaudio_context == NULL); SDL_assert(pulseaudio_context == NULL);
/* Set up a new main loop */ // Set up a new main loop
if (!(pulseaudio_threaded_mainloop = PULSEAUDIO_pa_threaded_mainloop_new())) { if (!(pulseaudio_threaded_mainloop = PULSEAUDIO_pa_threaded_mainloop_new())) {
return SDL_SetError("pa_threaded_mainloop_new() failed"); return SDL_SetError("pa_threaded_mainloop_new() failed");
} }
@@ -352,7 +352,7 @@ static int ConnectToPulseServer(void)
PULSEAUDIO_pa_threaded_mainloop_lock(pulseaudio_threaded_mainloop); PULSEAUDIO_pa_threaded_mainloop_lock(pulseaudio_threaded_mainloop);
mainloop_api = PULSEAUDIO_pa_threaded_mainloop_get_api(pulseaudio_threaded_mainloop); mainloop_api = PULSEAUDIO_pa_threaded_mainloop_get_api(pulseaudio_threaded_mainloop);
SDL_assert(mainloop_api); /* this never fails, right? */ SDL_assert(mainloop_api); // this never fails, right?
pulseaudio_context = PULSEAUDIO_pa_context_new(mainloop_api, getAppName()); pulseaudio_context = PULSEAUDIO_pa_context_new(mainloop_api, getAppName());
if (pulseaudio_context == NULL) { if (pulseaudio_context == NULL) {
@@ -362,7 +362,7 @@ static int ConnectToPulseServer(void)
PULSEAUDIO_pa_context_set_state_callback(pulseaudio_context, PulseContextStateChangeCallback, NULL); PULSEAUDIO_pa_context_set_state_callback(pulseaudio_context, PulseContextStateChangeCallback, NULL);
/* Connect to the PulseAudio server */ // Connect to the PulseAudio server
if (PULSEAUDIO_pa_context_connect(pulseaudio_context, NULL, 0, NULL) < 0) { if (PULSEAUDIO_pa_context_connect(pulseaudio_context, NULL, 0, NULL) < 0) {
SDL_SetError("Could not setup connection to PulseAudio"); SDL_SetError("Could not setup connection to PulseAudio");
goto failed; goto failed;
@@ -381,7 +381,7 @@ static int ConnectToPulseServer(void)
PULSEAUDIO_pa_threaded_mainloop_unlock(pulseaudio_threaded_mainloop); PULSEAUDIO_pa_threaded_mainloop_unlock(pulseaudio_threaded_mainloop);
return 0; /* connected and ready! */ return 0; // connected and ready!
failed: failed:
PULSEAUDIO_pa_threaded_mainloop_unlock(pulseaudio_threaded_mainloop); PULSEAUDIO_pa_threaded_mainloop_unlock(pulseaudio_threaded_mainloop);
@@ -392,27 +392,27 @@ failed:
static void WriteCallback(pa_stream *p, size_t nbytes, void *userdata) static void WriteCallback(pa_stream *p, size_t nbytes, void *userdata)
{ {
struct SDL_PrivateAudioData *h = (struct SDL_PrivateAudioData *)userdata; struct SDL_PrivateAudioData *h = (struct SDL_PrivateAudioData *)userdata;
/*printf("PULSEAUDIO WRITE CALLBACK! nbytes=%u\n", (unsigned int) nbytes);*/ //printf("PULSEAUDIO WRITE CALLBACK! nbytes=%u\n", (unsigned int) nbytes);
h->bytes_requested += nbytes; h->bytes_requested += nbytes;
PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0); PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0);
} }
/* This function waits until it is possible to write a full sound buffer */ // This function waits until it is possible to write a full sound buffer
static int PULSEAUDIO_WaitDevice(SDL_AudioDevice *device) static int PULSEAUDIO_WaitDevice(SDL_AudioDevice *device)
{ {
struct SDL_PrivateAudioData *h = device->hidden; struct SDL_PrivateAudioData *h = device->hidden;
int retval = 0; int retval = 0;
/*printf("PULSEAUDIO PLAYDEVICE START! mixlen=%d\n", available);*/ //printf("PULSEAUDIO PLAYDEVICE START! mixlen=%d\n", available);
PULSEAUDIO_pa_threaded_mainloop_lock(pulseaudio_threaded_mainloop); PULSEAUDIO_pa_threaded_mainloop_lock(pulseaudio_threaded_mainloop);
while (!SDL_AtomicGet(&device->shutdown) && (h->bytes_requested == 0)) { while (!SDL_AtomicGet(&device->shutdown) && (h->bytes_requested == 0)) {
/*printf("PULSEAUDIO WAIT IN WAITDEVICE!\n");*/ //printf("PULSEAUDIO WAIT IN WAITDEVICE!\n");
PULSEAUDIO_pa_threaded_mainloop_wait(pulseaudio_threaded_mainloop); PULSEAUDIO_pa_threaded_mainloop_wait(pulseaudio_threaded_mainloop);
if ((PULSEAUDIO_pa_context_get_state(pulseaudio_context) != PA_CONTEXT_READY) || (PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY)) { if ((PULSEAUDIO_pa_context_get_state(pulseaudio_context) != PA_CONTEXT_READY) || (PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY)) {
/*printf("PULSEAUDIO DEVICE FAILURE IN WAITDEVICE!\n");*/ //printf("PULSEAUDIO DEVICE FAILURE IN WAITDEVICE!\n");
retval = -1; retval = -1;
break; break;
} }
@@ -427,7 +427,7 @@ static int PULSEAUDIO_PlayDevice(SDL_AudioDevice *device, const Uint8 *buffer, i
{ {
struct SDL_PrivateAudioData *h = device->hidden; struct SDL_PrivateAudioData *h = device->hidden;
/*printf("PULSEAUDIO PLAYDEVICE START! mixlen=%d\n", available);*/ //printf("PULSEAUDIO PLAYDEVICE START! mixlen=%d\n", available);
SDL_assert(h->bytes_requested >= buffer_size); SDL_assert(h->bytes_requested >= buffer_size);
@@ -439,10 +439,10 @@ static int PULSEAUDIO_PlayDevice(SDL_AudioDevice *device, const Uint8 *buffer, i
return -1; return -1;
} }
/*printf("PULSEAUDIO FEED! nbytes=%d\n", buffer_size);*/ //printf("PULSEAUDIO FEED! nbytes=%d\n", buffer_size);
h->bytes_requested -= buffer_size; h->bytes_requested -= buffer_size;
/*printf("PULSEAUDIO PLAYDEVICE END! written=%d\n", written);*/ //printf("PULSEAUDIO PLAYDEVICE END! written=%d\n", written);
return 0; return 0;
} }
@@ -464,8 +464,8 @@ static Uint8 *PULSEAUDIO_GetDeviceBuf(SDL_AudioDevice *device, int *buffer_size)
static void ReadCallback(pa_stream *p, size_t nbytes, void *userdata) static void ReadCallback(pa_stream *p, size_t nbytes, void *userdata)
{ {
/*printf("PULSEAUDIO READ CALLBACK! nbytes=%u\n", (unsigned int) nbytes);*/ //printf("PULSEAUDIO READ CALLBACK! nbytes=%u\n", (unsigned int) nbytes);
PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0); /* the capture code queries what it needs, we just need to signal to end any wait */ PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0); // the capture code queries what it needs, we just need to signal to end any wait
} }
static int PULSEAUDIO_WaitCaptureDevice(SDL_AudioDevice *device) static int PULSEAUDIO_WaitCaptureDevice(SDL_AudioDevice *device)
@@ -527,7 +527,7 @@ static int PULSEAUDIO_CaptureFromDevice(SDL_AudioDevice *device, void *buffer, i
PULSEAUDIO_pa_stream_drop(h->stream); // done with this fragment. PULSEAUDIO_pa_stream_drop(h->stream); // done with this fragment.
PULSEAUDIO_pa_threaded_mainloop_unlock(pulseaudio_threaded_mainloop); PULSEAUDIO_pa_threaded_mainloop_unlock(pulseaudio_threaded_mainloop);
} }
return cpy; /* new data, return it. */ return cpy; // new data, return it.
} }
return 0; return 0;
@@ -550,15 +550,15 @@ static void PULSEAUDIO_FlushCapture(SDL_AudioDevice *device)
while (!SDL_AtomicGet(&device->shutdown) && (PULSEAUDIO_pa_stream_readable_size(h->stream) > 0)) { while (!SDL_AtomicGet(&device->shutdown) && (PULSEAUDIO_pa_stream_readable_size(h->stream) > 0)) {
PULSEAUDIO_pa_threaded_mainloop_wait(pulseaudio_threaded_mainloop); PULSEAUDIO_pa_threaded_mainloop_wait(pulseaudio_threaded_mainloop);
if ((PULSEAUDIO_pa_context_get_state(pulseaudio_context) != PA_CONTEXT_READY) || (PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY)) { if ((PULSEAUDIO_pa_context_get_state(pulseaudio_context) != PA_CONTEXT_READY) || (PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY)) {
/*printf("PULSEAUDIO DEVICE FAILURE IN FLUSHCAPTURE!\n");*/ //printf("PULSEAUDIO DEVICE FAILURE IN FLUSHCAPTURE!\n");
SDL_AudioDeviceDisconnected(device); SDL_AudioDeviceDisconnected(device);
break; break;
} }
if (PULSEAUDIO_pa_stream_readable_size(h->stream) > 0) { if (PULSEAUDIO_pa_stream_readable_size(h->stream) > 0) {
/* a new fragment is available! Just dump it. */ // a new fragment is available! Just dump it.
PULSEAUDIO_pa_stream_peek(h->stream, &data, &nbytes); PULSEAUDIO_pa_stream_peek(h->stream, &data, &nbytes);
PULSEAUDIO_pa_stream_drop(h->stream); /* drop this fragment. */ PULSEAUDIO_pa_stream_drop(h->stream); // drop this fragment.
} }
} }
@@ -619,7 +619,7 @@ static SDL_bool FindDeviceName(SDL_AudioDevice *device)
static void PulseStreamStateChangeCallback(pa_stream *stream, void *userdata) static void PulseStreamStateChangeCallback(pa_stream *stream, void *userdata)
{ {
PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0); /* just signal any waiting code, it can look up the details. */ PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0); // just signal any waiting code, it can look up the details.
} }
static int PULSEAUDIO_OpenDevice(SDL_AudioDevice *device) static int PULSEAUDIO_OpenDevice(SDL_AudioDevice *device)
@@ -638,13 +638,13 @@ static int PULSEAUDIO_OpenDevice(SDL_AudioDevice *device)
SDL_assert(pulseaudio_threaded_mainloop != NULL); SDL_assert(pulseaudio_threaded_mainloop != NULL);
SDL_assert(pulseaudio_context != NULL); SDL_assert(pulseaudio_context != NULL);
/* Initialize all variables that we clean on shutdown */ // Initialize all variables that we clean on shutdown
h = device->hidden = (struct SDL_PrivateAudioData *)SDL_calloc(1, sizeof(*device->hidden)); h = device->hidden = (struct SDL_PrivateAudioData *)SDL_calloc(1, sizeof(*device->hidden));
if (device->hidden == NULL) { if (device->hidden == NULL) {
return SDL_OutOfMemory(); return SDL_OutOfMemory();
} }
/* Try for a closest match on audio format */ // Try for a closest match on audio format
closefmts = SDL_ClosestAudioFormats(device->spec.format); closefmts = SDL_ClosestAudioFormats(device->spec.format);
while ((test_format = *(closefmts++)) != 0) { while ((test_format = *(closefmts++)) != 0) {
#ifdef DEBUG_AUDIO #ifdef DEBUG_AUDIO
@@ -683,10 +683,10 @@ static int PULSEAUDIO_OpenDevice(SDL_AudioDevice *device)
device->spec.format = test_format; device->spec.format = test_format;
paspec.format = format; paspec.format = format;
/* Calculate the final parameters for this audio specification */ // Calculate the final parameters for this audio specification
SDL_UpdatedAudioDeviceFormat(device); SDL_UpdatedAudioDeviceFormat(device);
/* Allocate mixing buffer */ // Allocate mixing buffer
if (!iscapture) { if (!iscapture) {
h->mixbuf = (Uint8 *)SDL_malloc(device->buffer_size); h->mixbuf = (Uint8 *)SDL_malloc(device->buffer_size);
if (h->mixbuf == NULL) { if (h->mixbuf == NULL) {
@@ -698,7 +698,7 @@ static int PULSEAUDIO_OpenDevice(SDL_AudioDevice *device)
paspec.channels = device->spec.channels; paspec.channels = device->spec.channels;
paspec.rate = device->spec.freq; paspec.rate = device->spec.freq;
/* Reduced prebuffering compared to the defaults. */ // Reduced prebuffering compared to the defaults.
paattr.fragsize = device->buffer_size; // despite the name, this is only used for capture devices, according to PulseAudio docs! paattr.fragsize = device->buffer_size; // despite the name, this is only used for capture devices, according to PulseAudio docs!
paattr.tlength = device->buffer_size; paattr.tlength = device->buffer_size;
paattr.prebuf = -1; paattr.prebuf = -1;
@@ -712,15 +712,15 @@ static int PULSEAUDIO_OpenDevice(SDL_AudioDevice *device)
retval = SDL_SetError("Requested PulseAudio sink/source missing?"); retval = SDL_SetError("Requested PulseAudio sink/source missing?");
} else { } else {
const char *name = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME); const char *name = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME);
/* The SDL ALSA output hints us that we use Windows' channel mapping */ // The SDL ALSA output hints us that we use Windows' channel mapping
/* https://bugzilla.libsdl.org/show_bug.cgi?id=110 */ // https://bugzilla.libsdl.org/show_bug.cgi?id=110
PULSEAUDIO_pa_channel_map_init_auto(&pacmap, device->spec.channels, PA_CHANNEL_MAP_WAVEEX); PULSEAUDIO_pa_channel_map_init_auto(&pacmap, device->spec.channels, PA_CHANNEL_MAP_WAVEEX);
h->stream = PULSEAUDIO_pa_stream_new( h->stream = PULSEAUDIO_pa_stream_new(
pulseaudio_context, pulseaudio_context,
(name && *name) ? name : "Audio Stream", /* stream description */ (name && *name) ? name : "Audio Stream", // stream description
&paspec, /* sample format spec */ &paspec, // sample format spec
&pacmap /* channel map */ &pacmap // channel map
); );
if (h->stream == NULL) { if (h->stream == NULL) {
@@ -767,11 +767,11 @@ static int PULSEAUDIO_OpenDevice(SDL_AudioDevice *device)
PULSEAUDIO_pa_threaded_mainloop_unlock(pulseaudio_threaded_mainloop); PULSEAUDIO_pa_threaded_mainloop_unlock(pulseaudio_threaded_mainloop);
/* We're (hopefully) ready to rock and roll. :-) */ // We're (hopefully) ready to rock and roll. :-)
return retval; return retval;
} }
/* device handles are device index + 1, cast to void*, so we never pass a NULL. */ // device handles are device index + 1, cast to void*, so we never pass a NULL.
static SDL_AudioFormat PulseFormatToSDLFormat(pa_sample_format_t format) static SDL_AudioFormat PulseFormatToSDLFormat(pa_sample_format_t format)
{ {
@@ -817,11 +817,11 @@ static void SinkInfoCallback(pa_context *c, const pa_sink_info *i, int is_last,
PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0); PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0);
} }
/* This is called when PulseAudio adds a capture ("source") device. */ // This is called when PulseAudio adds a capture ("source") device.
// !!! FIXME: this is almost identical to SinkInfoCallback, merge the two. // !!! FIXME: this is almost identical to SinkInfoCallback, merge the two.
static void SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *data) static void SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *data)
{ {
/* Maybe skip "monitor" sources. These are just output from other sinks. */ // Maybe skip "monitor" sources. These are just output from other sinks.
if (i && (include_monitors || (i->monitor_of_sink == PA_INVALID_INDEX))) { if (i && (include_monitors || (i->monitor_of_sink == PA_INVALID_INDEX))) {
const SDL_bool add = (SDL_bool) ((intptr_t)data); const SDL_bool add = (SDL_bool) ((intptr_t)data);
@@ -843,13 +843,13 @@ static void SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_la
static void ServerInfoCallback(pa_context *c, const pa_server_info *i, void *data) static void ServerInfoCallback(pa_context *c, const pa_server_info *i, void *data)
{ {
if (!default_sink_path || (SDL_strcmp(i->default_sink_name, default_sink_path) != 0)) { if (!default_sink_path || (SDL_strcmp(i->default_sink_name, default_sink_path) != 0)) {
/*printf("DEFAULT SINK PATH CHANGED TO '%s'\n", i->default_sink_name);*/ //printf("DEFAULT SINK PATH CHANGED TO '%s'\n", i->default_sink_name);
SDL_free(default_sink_path); SDL_free(default_sink_path);
default_sink_path = SDL_strdup(i->default_sink_name); default_sink_path = SDL_strdup(i->default_sink_name);
} }
if (!default_source_path || (SDL_strcmp(i->default_source_name, default_source_path) != 0)) { if (!default_source_path || (SDL_strcmp(i->default_source_name, default_source_path) != 0)) {
/*printf("DEFAULT SOURCE PATH CHANGED TO '%s'\n", i->default_source_name);*/ //printf("DEFAULT SOURCE PATH CHANGED TO '%s'\n", i->default_source_name);
SDL_free(default_source_path); SDL_free(default_source_path);
default_source_path = SDL_strdup(i->default_source_name); default_source_path = SDL_strdup(i->default_source_name);
} }
@@ -857,14 +857,14 @@ static void ServerInfoCallback(pa_context *c, const pa_server_info *i, void *dat
PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0); PULSEAUDIO_pa_threaded_mainloop_signal(pulseaudio_threaded_mainloop, 0);
} }
// This is called when PulseAudio has a device connected/removed/changed. */ // This is called when PulseAudio has a device connected/removed/changed.
static void HotplugCallback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *data) static void HotplugCallback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *data)
{ {
const SDL_bool added = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW); const SDL_bool added = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW);
const SDL_bool removed = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE); const SDL_bool removed = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE);
const SDL_bool changed = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE); const SDL_bool changed = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE);
if (added || removed || changed) { /* we only care about add/remove events. */ if (added || removed || changed) { // we only care about add/remove events.
const SDL_bool sink = ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK); const SDL_bool sink = ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK);
const SDL_bool source = ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE); const SDL_bool source = ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE);
@@ -909,7 +909,7 @@ static int SDLCALL HotplugThread(void *data)
PULSEAUDIO_pa_threaded_mainloop_lock(pulseaudio_threaded_mainloop); PULSEAUDIO_pa_threaded_mainloop_lock(pulseaudio_threaded_mainloop);
PULSEAUDIO_pa_context_set_subscribe_callback(pulseaudio_context, HotplugCallback, NULL); PULSEAUDIO_pa_context_set_subscribe_callback(pulseaudio_context, HotplugCallback, NULL);
/* don't WaitForPulseOperation on the subscription; when it's done we'll be able to get hotplug events, but waiting doesn't changing anything. */ // don't WaitForPulseOperation on the subscription; when it's done we'll be able to get hotplug events, but waiting doesn't changing anything.
op = PULSEAUDIO_pa_context_subscribe(pulseaudio_context, PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE | PA_SUBSCRIPTION_MASK_SERVER, NULL, NULL); op = PULSEAUDIO_pa_context_subscribe(pulseaudio_context, PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE | PA_SUBSCRIPTION_MASK_SERVER, NULL, NULL);
SDL_PostSemaphore((SDL_Semaphore *) data); SDL_PostSemaphore((SDL_Semaphore *) data);
@@ -961,7 +961,7 @@ static void PULSEAUDIO_DetectDevices(SDL_AudioDevice **default_output, SDL_Audio
*default_capture = device; *default_capture = device;
} }
/* ok, we have a sane list, let's set up hotplug notifications now... */ // ok, we have a sane list, let's set up hotplug notifications now...
SDL_AtomicSet(&pulseaudio_hotplug_thread_active, 1); SDL_AtomicSet(&pulseaudio_hotplug_thread_active, 1);
pulseaudio_hotplug_thread = SDL_CreateThreadInternal(HotplugThread, "PulseHotplug", 256 * 1024, ready_sem); // !!! FIXME: this can probably survive in significantly less stack space. pulseaudio_hotplug_thread = SDL_CreateThreadInternal(HotplugThread, "PulseHotplug", 256 * 1024, ready_sem); // !!! FIXME: this can probably survive in significantly less stack space.
SDL_WaitSemaphore(ready_sem); SDL_WaitSemaphore(ready_sem);
@@ -1006,7 +1006,6 @@ static SDL_bool PULSEAUDIO_Init(SDL_AudioDriverImpl *impl)
include_monitors = SDL_GetHintBoolean(SDL_HINT_AUDIO_INCLUDE_MONITORS, SDL_FALSE); include_monitors = SDL_GetHintBoolean(SDL_HINT_AUDIO_INCLUDE_MONITORS, SDL_FALSE);
/* Set the function pointers */
impl->DetectDevices = PULSEAUDIO_DetectDevices; impl->DetectDevices = PULSEAUDIO_DetectDevices;
impl->OpenDevice = PULSEAUDIO_OpenDevice; impl->OpenDevice = PULSEAUDIO_OpenDevice;
impl->PlayDevice = PULSEAUDIO_PlayDevice; impl->PlayDevice = PULSEAUDIO_PlayDevice;
@@ -1021,11 +1020,11 @@ static SDL_bool PULSEAUDIO_Init(SDL_AudioDriverImpl *impl)
impl->HasCaptureSupport = SDL_TRUE; impl->HasCaptureSupport = SDL_TRUE;
return SDL_TRUE; /* this audio target is available. */ return SDL_TRUE;
} }
AudioBootStrap PULSEAUDIO_bootstrap = { AudioBootStrap PULSEAUDIO_bootstrap = {
"pulseaudio", "PulseAudio", PULSEAUDIO_Init, SDL_FALSE "pulseaudio", "PulseAudio", PULSEAUDIO_Init, SDL_FALSE
}; };
#endif /* SDL_AUDIO_DRIVER_PULSEAUDIO */ #endif // SDL_AUDIO_DRIVER_PULSEAUDIO

View File

@@ -31,16 +31,16 @@ struct SDL_PrivateAudioData
{ {
char *device_name; char *device_name;
/* pulseaudio structures */ // pulseaudio structures
pa_stream *stream; pa_stream *stream;
/* Raw mixing buffer */ // Raw mixing buffer
Uint8 *mixbuf; Uint8 *mixbuf;
int bytes_requested; /* bytes of data the hardware wants _now_. */ int bytes_requested; // bytes of data the hardware wants _now_.
const Uint8 *capturebuf; const Uint8 *capturebuf;
int capturelen; int capturelen;
}; };
#endif /* SDL_pulseaudio_h_ */ #endif // SDL_pulseaudio_h_

View File

@@ -36,6 +36,5 @@ struct SDL_PrivateAudioData
Uint8 *pcm_buf; // Raw mixing buffer Uint8 *pcm_buf; // Raw mixing buffer
}; };
#endif /* __SDL_QSA_AUDIO_H__ */ #endif // __SDL_QSA_AUDIO_H__
/* vi: set ts=4 sw=4 expandtab: */

View File

@@ -35,4 +35,4 @@ struct SDL_PrivateAudioData
struct pollfd *pfd; // Polling structures for non-blocking sndio devices struct pollfd *pfd; // Polling structures for non-blocking sndio devices
}; };
#endif /* SDL_sndioaudio_h_ */ #endif // SDL_sndioaudio_h_

View File

@@ -28,14 +28,14 @@
struct SDL_PrivateAudioData struct SDL_PrivateAudioData
{ {
/* The hardware input/output port. */ // The hardware input/output port.
int port; int port;
/* The raw allocated mixing buffer. */ // The raw allocated mixing buffer.
Uint8 *rawbuf; Uint8 *rawbuf;
/* Individual mixing buffers. */ // Individual mixing buffers.
Uint8 *mixbufs[NUM_BUFFERS]; Uint8 *mixbufs[NUM_BUFFERS];
/* Index of the next available mixing buffer. */ // Index of the next available mixing buffer.
int next_buffer; int next_buffer;
}; };
#endif /* SDL_vitaaudio_h */ #endif // SDL_vitaaudio_h

View File

@@ -45,7 +45,7 @@ struct SDL_PrivateAudioData
void *activation_handler; void *activation_handler;
}; };
/* win32 and winrt implementations call into these. */ // win32 and winrt implementations call into these.
int WASAPI_PrepDevice(SDL_AudioDevice *device); int WASAPI_PrepDevice(SDL_AudioDevice *device);
void WASAPI_DisconnectDevice(SDL_AudioDevice *device); // don't hold the device lock when calling this! void WASAPI_DisconnectDevice(SDL_AudioDevice *device); // don't hold the device lock when calling this!
@@ -54,7 +54,7 @@ void WASAPI_DisconnectDevice(SDL_AudioDevice *device); // don't hold the device
typedef int (*ManagementThreadTask)(void *userdata); typedef int (*ManagementThreadTask)(void *userdata);
int WASAPI_ProxyToManagementThread(ManagementThreadTask task, void *userdata, int *wait_until_complete); int WASAPI_ProxyToManagementThread(ManagementThreadTask task, void *userdata, int *wait_until_complete);
/* These are functions that are implemented differently for Windows vs WinRT. */ // These are functions that are implemented differently for Windows vs WinRT.
// UNLESS OTHERWISE NOTED THESE ALL HAPPEN ON THE MANAGEMENT THREAD. // UNLESS OTHERWISE NOTED THESE ALL HAPPEN ON THE MANAGEMENT THREAD.
int WASAPI_PlatformInit(void); int WASAPI_PlatformInit(void);
void WASAPI_PlatformDeinit(void); void WASAPI_PlatformDeinit(void);
@@ -70,4 +70,4 @@ void WASAPI_PlatformFreeDeviceHandle(SDL_AudioDevice *device);
} }
#endif #endif
#endif /* SDL_wasapi_h_ */ #endif // SDL_wasapi_h_

View File

@@ -37,7 +37,7 @@
#include "SDL_wasapi.h" #include "SDL_wasapi.h"
/* handle to Avrt.dll--Vista and later!--for flagging the callback thread as "Pro Audio" (low latency). */ // handle to Avrt.dll--Vista and later!--for flagging the callback thread as "Pro Audio" (low latency).
static HMODULE libavrt = NULL; static HMODULE libavrt = NULL;
typedef HANDLE(WINAPI *pfnAvSetMmThreadCharacteristicsW)(LPCWSTR, LPDWORD); typedef HANDLE(WINAPI *pfnAvSetMmThreadCharacteristicsW)(LPCWSTR, LPDWORD);
typedef BOOL(WINAPI *pfnAvRevertMmThreadCharacteristics)(HANDLE); typedef BOOL(WINAPI *pfnAvRevertMmThreadCharacteristics)(HANDLE);
@@ -46,7 +46,7 @@ static pfnAvRevertMmThreadCharacteristics pAvRevertMmThreadCharacteristics = NUL
static SDL_bool immdevice_initialized = SDL_FALSE; static SDL_bool immdevice_initialized = SDL_FALSE;
/* Some GUIDs we need to know without linking to libraries that aren't available before Vista. */ // Some GUIDs we need to know without linking to libraries that aren't available before Vista.
static const IID SDL_IID_IAudioClient = { 0x1cb9ad4c, 0xdbfa, 0x4c32, { 0xb1, 0x78, 0xc2, 0xf5, 0x68, 0xa7, 0x03, 0xb2 } }; static const IID SDL_IID_IAudioClient = { 0x1cb9ad4c, 0xdbfa, 0x4c32, { 0xb1, 0x78, 0xc2, 0xf5, 0x68, 0xa7, 0x03, 0xb2 } };
int WASAPI_PlatformInit(void) int WASAPI_PlatformInit(void)
@@ -59,7 +59,7 @@ int WASAPI_PlatformInit(void)
immdevice_initialized = SDL_TRUE; immdevice_initialized = SDL_TRUE;
libavrt = LoadLibrary(TEXT("avrt.dll")); /* this library is available in Vista and later. No WinXP, so have to LoadLibrary to use it for now! */ libavrt = LoadLibrary(TEXT("avrt.dll")); // this library is available in Vista and later. No WinXP, so have to LoadLibrary to use it for now!
if (libavrt) { if (libavrt) {
pAvSetMmThreadCharacteristicsW = (pfnAvSetMmThreadCharacteristicsW)GetProcAddress(libavrt, "AvSetMmThreadCharacteristicsW"); pAvSetMmThreadCharacteristicsW = (pfnAvSetMmThreadCharacteristicsW)GetProcAddress(libavrt, "AvSetMmThreadCharacteristicsW");
pAvRevertMmThreadCharacteristics = (pfnAvRevertMmThreadCharacteristics)GetProcAddress(libavrt, "AvRevertMmThreadCharacteristics"); pAvRevertMmThreadCharacteristics = (pfnAvRevertMmThreadCharacteristics)GetProcAddress(libavrt, "AvRevertMmThreadCharacteristics");
@@ -98,12 +98,12 @@ void WASAPI_PlatformDeinitializeStart(void)
void WASAPI_PlatformThreadInit(SDL_AudioDevice *device) void WASAPI_PlatformThreadInit(SDL_AudioDevice *device)
{ {
/* this thread uses COM. */ // this thread uses COM.
if (SUCCEEDED(WIN_CoInitialize())) { /* can't report errors, hope it worked! */ if (SUCCEEDED(WIN_CoInitialize())) { // can't report errors, hope it worked!
device->hidden->coinitialized = SDL_TRUE; device->hidden->coinitialized = SDL_TRUE;
} }
/* Set this thread to very high "Pro Audio" priority. */ // Set this thread to very high "Pro Audio" priority.
if (pAvSetMmThreadCharacteristicsW) { if (pAvSetMmThreadCharacteristicsW) {
DWORD idx = 0; DWORD idx = 0;
device->hidden->task = pAvSetMmThreadCharacteristicsW(L"Pro Audio", &idx); device->hidden->task = pAvSetMmThreadCharacteristicsW(L"Pro Audio", &idx);
@@ -115,7 +115,7 @@ void WASAPI_PlatformThreadInit(SDL_AudioDevice *device)
void WASAPI_PlatformThreadDeinit(SDL_AudioDevice *device) void WASAPI_PlatformThreadDeinit(SDL_AudioDevice *device)
{ {
/* Set this thread back to normal priority. */ // Set this thread back to normal priority.
if (device->hidden->task && pAvRevertMmThreadCharacteristics) { if (device->hidden->task && pAvRevertMmThreadCharacteristics) {
pAvRevertMmThreadCharacteristics(device->hidden->task); pAvRevertMmThreadCharacteristics(device->hidden->task);
device->hidden->task = NULL; device->hidden->task = NULL;
@@ -132,10 +132,10 @@ int WASAPI_ActivateDevice(SDL_AudioDevice *device)
IMMDevice *immdevice = NULL; IMMDevice *immdevice = NULL;
if (SDL_IMMDevice_Get(device, &immdevice, device->iscapture) < 0) { if (SDL_IMMDevice_Get(device, &immdevice, device->iscapture) < 0) {
device->hidden->client = NULL; device->hidden->client = NULL;
return -1; /* This is already set by SDL_IMMDevice_Get */ return -1; // This is already set by SDL_IMMDevice_Get
} }
/* this is _not_ async in standard win32, yay! */ // this is _not_ async in standard win32, yay!
HRESULT ret = IMMDevice_Activate(immdevice, &SDL_IID_IAudioClient, CLSCTX_ALL, NULL, (void **)&device->hidden->client); HRESULT ret = IMMDevice_Activate(immdevice, &SDL_IID_IAudioClient, CLSCTX_ALL, NULL, (void **)&device->hidden->client);
IMMDevice_Release(immdevice); IMMDevice_Release(immdevice);
@@ -145,11 +145,11 @@ int WASAPI_ActivateDevice(SDL_AudioDevice *device)
} }
SDL_assert(device->hidden->client != NULL); SDL_assert(device->hidden->client != NULL);
if (WASAPI_PrepDevice(device) == -1) { /* not async, fire it right away. */ if (WASAPI_PrepDevice(device) == -1) { // not async, fire it right away.
return -1; return -1;
} }
return 0; /* good to go. */ return 0; // good to go.
} }
void WASAPI_EnumerateEndpoints(SDL_AudioDevice **default_output, SDL_AudioDevice **default_capture) void WASAPI_EnumerateEndpoints(SDL_AudioDevice **default_output, SDL_AudioDevice **default_capture)
@@ -159,7 +159,7 @@ void WASAPI_EnumerateEndpoints(SDL_AudioDevice **default_output, SDL_AudioDevice
void WASAPI_PlatformDeleteActivationHandler(void *handler) void WASAPI_PlatformDeleteActivationHandler(void *handler)
{ {
/* not asynchronous. */ // not asynchronous.
SDL_assert(!"This function should have only been called on WinRT."); SDL_assert(!"This function should have only been called on WinRT.");
} }
@@ -168,4 +168,4 @@ void WASAPI_PlatformFreeDeviceHandle(SDL_AudioDevice *device)
SDL_IMMDevice_FreeDeviceHandle(device); SDL_IMMDevice_FreeDeviceHandle(device);
} }
#endif /* SDL_AUDIO_DRIVER_WASAPI && !defined(__WINRT__) */ #endif // SDL_AUDIO_DRIVER_WASAPI && !defined(__WINRT__)