Update for SDL3 coding style (#6717)

I updated .clang-format and ran clang-format 14 over the src and test directories to standardize the code base.

In general I let clang-format have it's way, and added markup to prevent formatting of code that would break or be completely unreadable if formatted.

The script I ran for the src directory is added as build-scripts/clang-format-src.sh

This fixes:
#6592
#6593
#6594
This commit is contained in:
Sam Lantinga 2022-11-30 12:51:59 -08:00 committed by GitHub
parent 14b902faca
commit 5750bcb174
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
781 changed files with 51659 additions and 55763 deletions

View File

@ -16,8 +16,8 @@ AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: All AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: AllDefinitions AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine AlwaysBreakTemplateDeclarations: MultiLine
@ -35,7 +35,7 @@ BraceWrapping:
AfterUnion: true AfterUnion: true
AfterExternBlock: false AfterExternBlock: false
BeforeElse: false BeforeElse: false
BeforeWhile: true BeforeWhile: false
IndentBraces: false IndentBraces: false
SplitEmptyFunction: true SplitEmptyFunction: true
SplitEmptyRecord: true SplitEmptyRecord: true
@ -48,7 +48,7 @@ IncludeBlocks: Preserve
# clang-format version 4.0 through 12.0: # clang-format version 4.0 through 12.0:
#SortIncludes: false #SortIncludes: false
# clang-format version 13.0+: # clang-format version 13.0+:
#SortIncludes: Never SortIncludes: Never
# No length limit, in case it breaks macros, you can # No length limit, in case it breaks macros, you can
# disable it with /* clang-format off/on */ comments # disable it with /* clang-format off/on */ comments
@ -62,7 +62,8 @@ IndentGotoLabels: true
IndentPPDirectives: None IndentPPDirectives: None
IndentExternBlock: NoIndent IndentExternBlock: NoIndent
SpaceAfterCStyleCast: true PointerAlignment: Right
SpaceAfterCStyleCast: false
SpacesInCStyleCastParentheses: false SpacesInCStyleCastParentheses: false
SpacesInConditionalStatement: false SpacesInConditionalStatement: false
SpacesInContainerLiterals: true SpacesInContainerLiterals: true

View File

@ -0,0 +1,32 @@
#!/bin/sh
cd "$(dirname $0)/../src"
echo "Running clang-format in $(pwd)"
find . -regex '.*\.[chm]p*' -exec clang-format -i {} \;
# Revert third-party code
git checkout \
events/imKStoUCS.* \
hidapi \
joystick/controller_type.c \
joystick/controller_type.h \
joystick/hidapi/steam/controller_constants.h \
joystick/hidapi/steam/controller_structs.h \
libm \
stdlib/SDL_malloc.c \
stdlib/SDL_qsort.c \
stdlib/SDL_strtokr.c \
video/arm \
video/khronos \
video/x11/edid-parse.c \
video/yuv2rgb
clang-format -i hidapi/SDL_hidapi.c
# Revert generated code
git checkout dynapi/SDL_dynapi_overrides.h
git checkout dynapi/SDL_dynapi_procs.h
git checkout render/metal/SDL_shaders_metal_*.h
echo "clang-format complete!"

View File

@ -99,7 +99,6 @@ SDL_NORETURN void SDL_ExitProcess(int exitcode)
#endif #endif
} }
/* The initialized subsystems */ /* The initialized subsystems */
#ifdef SDL_MAIN_NEEDED #ifdef SDL_MAIN_NEEDED
static SDL_bool SDL_MainIsReady = SDL_FALSE; static SDL_bool SDL_MainIsReady = SDL_FALSE;
@ -110,8 +109,7 @@ static SDL_bool SDL_bInMainQuit = SDL_FALSE;
static Uint8 SDL_SubsystemRefCount[32]; static Uint8 SDL_SubsystemRefCount[32];
/* Private helper to increment a subsystem's ref counter. */ /* Private helper to increment a subsystem's ref counter. */
static void static void SDL_PrivateSubsystemRefCountIncr(Uint32 subsystem)
SDL_PrivateSubsystemRefCountIncr(Uint32 subsystem)
{ {
const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem);
SDL_assert((subsystem_index < 0) || (SDL_SubsystemRefCount[subsystem_index] < 255)); SDL_assert((subsystem_index < 0) || (SDL_SubsystemRefCount[subsystem_index] < 255));
@ -121,8 +119,7 @@ SDL_PrivateSubsystemRefCountIncr(Uint32 subsystem)
} }
/* Private helper to decrement a subsystem's ref counter. */ /* Private helper to decrement a subsystem's ref counter. */
static void static void SDL_PrivateSubsystemRefCountDecr(Uint32 subsystem)
SDL_PrivateSubsystemRefCountDecr(Uint32 subsystem)
{ {
const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem);
if ((subsystem_index >= 0) && (SDL_SubsystemRefCount[subsystem_index] > 0)) { if ((subsystem_index >= 0) && (SDL_SubsystemRefCount[subsystem_index] > 0)) {
@ -131,8 +128,7 @@ SDL_PrivateSubsystemRefCountDecr(Uint32 subsystem)
} }
/* Private helper to check if a system needs init. */ /* Private helper to check if a system needs init. */
static SDL_bool static SDL_bool SDL_PrivateShouldInitSubsystem(Uint32 subsystem)
SDL_PrivateShouldInitSubsystem(Uint32 subsystem)
{ {
const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem);
SDL_assert((subsystem_index < 0) || (SDL_SubsystemRefCount[subsystem_index] < 255)); SDL_assert((subsystem_index < 0) || (SDL_SubsystemRefCount[subsystem_index] < 255));
@ -140,8 +136,8 @@ SDL_PrivateShouldInitSubsystem(Uint32 subsystem)
} }
/* Private helper to check if a system needs to be quit. */ /* Private helper to check if a system needs to be quit. */
static SDL_bool static SDL_bool SDL_PrivateShouldQuitSubsystem(Uint32 subsystem)
SDL_PrivateShouldQuitSubsystem(Uint32 subsystem) { {
const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem);
if ((subsystem_index >= 0) && (SDL_SubsystemRefCount[subsystem_index] == 0)) { if ((subsystem_index >= 0) && (SDL_SubsystemRefCount[subsystem_index] == 0)) {
return SDL_FALSE; return SDL_FALSE;
@ -153,14 +149,12 @@ SDL_PrivateShouldQuitSubsystem(Uint32 subsystem) {
return (((subsystem_index >= 0) && (SDL_SubsystemRefCount[subsystem_index] == 1)) || SDL_bInMainQuit) ? SDL_TRUE : SDL_FALSE; return (((subsystem_index >= 0) && (SDL_SubsystemRefCount[subsystem_index] == 1)) || SDL_bInMainQuit) ? SDL_TRUE : SDL_FALSE;
} }
void void SDL_SetMainReady(void)
SDL_SetMainReady(void)
{ {
SDL_MainIsReady = SDL_TRUE; SDL_MainIsReady = SDL_TRUE;
} }
int int SDL_InitSubSystem(Uint32 flags)
SDL_InitSubSystem(Uint32 flags)
{ {
Uint32 flags_initialized = 0; Uint32 flags_initialized = 0;
@ -335,14 +329,12 @@ quit_and_error:
return -1; return -1;
} }
int int SDL_Init(Uint32 flags)
SDL_Init(Uint32 flags)
{ {
return SDL_InitSubSystem(flags); return SDL_InitSubSystem(flags);
} }
void void SDL_QuitSubSystem(Uint32 flags)
SDL_QuitSubSystem(Uint32 flags)
{ {
/* Shut down requested initialized subsystems */ /* Shut down requested initialized subsystems */
#if !SDL_SENSOR_DISABLED #if !SDL_SENSOR_DISABLED
@ -459,8 +451,7 @@ SDL_WasInit(Uint32 flags)
return initialized; return initialized;
} }
void void SDL_Quit(void)
SDL_Quit(void)
{ {
SDL_bInMainQuit = SDL_TRUE; SDL_bInMainQuit = SDL_TRUE;
@ -494,13 +485,13 @@ SDL_Quit(void)
} }
/* Get the library version number */ /* Get the library version number */
void void SDL_GetVersion(SDL_version *ver)
SDL_GetVersion(SDL_version * ver)
{ {
static SDL_bool check_hint = SDL_TRUE; static SDL_bool check_hint = SDL_TRUE;
static SDL_bool legacy_version = SDL_FALSE; static SDL_bool legacy_version = SDL_FALSE;
if (ver == NULL) { return; if (ver == NULL) {
return;
} }
SDL_VERSION(ver); SDL_VERSION(ver);

View File

@ -40,8 +40,7 @@
/* The size of the stack buffer to use for rendering assert messages. */ /* The size of the stack buffer to use for rendering assert messages. */
#define SDL_MAX_ASSERT_MESSAGE_STACK 256 #define SDL_MAX_ASSERT_MESSAGE_STACK 256
static SDL_assert_state SDLCALL static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data, void *userdata);
SDL_PromptAssertion(const SDL_assert_data *data, void *userdata);
/* /*
* We keep all triggered assertions in a singly-linked list so we can * We keep all triggered assertions in a singly-linked list so we can
@ -57,12 +56,10 @@ static SDL_AssertionHandler assertion_handler = SDL_PromptAssertion;
static void *assertion_userdata = NULL; static void *assertion_userdata = NULL;
#ifdef __GNUC__ #ifdef __GNUC__
static void static void debug_print(const char *fmt, ...) __attribute__((format(printf, 1, 2)));
debug_print(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
#endif #endif
static void static void debug_print(const char *fmt, ...)
debug_print(const char *fmt, ...)
{ {
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
@ -70,7 +67,6 @@ debug_print(const char *fmt, ...)
va_end(ap); va_end(ap);
} }
static void SDL_AddAssertionToReport(SDL_assert_data *data) static void SDL_AddAssertionToReport(SDL_assert_data *data)
{ {
/* (data) is always a static struct defined with the assert macros, so /* (data) is always a static struct defined with the assert macros, so
@ -88,13 +84,13 @@ static void SDL_AddAssertionToReport(SDL_assert_data *data)
#define ENDLINE "\n" #define ENDLINE "\n"
#endif #endif
static int SDL_RenderAssertMessage(char *buf, size_t buf_len, const SDL_assert_data *data) { static int SDL_RenderAssertMessage(char *buf, size_t buf_len, const SDL_assert_data *data)
{
return SDL_snprintf(buf, buf_len, return SDL_snprintf(buf, buf_len,
"Assertion failure at %s (%s:%d), triggered %u %s:" ENDLINE " '%s'", "Assertion failure at %s (%s:%d), triggered %u %s:" ENDLINE " '%s'",
data->function, data->filename, data->linenum, data->function, data->filename, data->linenum,
data->trigger_count, (data->trigger_count == 1) ? "time" : "times", data->trigger_count, (data->trigger_count == 1) ? "time" : "times",
data->condition data->condition);
);
} }
static void SDL_GenerateAssertionReport(void) static void SDL_GenerateAssertionReport(void)
@ -124,7 +120,6 @@ static void SDL_GenerateAssertionReport(void)
} }
} }
/* This is not declared in any header, although it is shared between some /* This is not declared in any header, although it is shared between some
parts of SDL, because we don't want anything calling it without an parts of SDL, because we don't want anything calling it without an
extremely good reason. */ extremely good reason. */
@ -134,7 +129,6 @@ extern void SDL_ExitProcess(int exitcode);
#endif #endif
extern SDL_NORETURN void SDL_ExitProcess(int exitcode); extern SDL_NORETURN void SDL_ExitProcess(int exitcode);
#if defined(__WATCOMC__) #if defined(__WATCOMC__)
static void SDL_AbortAssertion(void); static void SDL_AbortAssertion(void);
#pragma aux SDL_AbortAssertion aborts; #pragma aux SDL_AbortAssertion aborts;
@ -145,8 +139,7 @@ static SDL_NORETURN void SDL_AbortAssertion(void)
SDL_ExitProcess(42); SDL_ExitProcess(42);
} }
static SDL_assert_state SDLCALL static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
{ {
const char *envr; const char *envr;
SDL_assert_state state = SDL_ASSERTION_ABORT; SDL_assert_state state = SDL_ASSERTION_ABORT;
@ -249,6 +242,7 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
/* This is nasty, but we can't block on a custom UI. */ /* This is nasty, but we can't block on a custom UI. */
for (;;) { for (;;) {
SDL_bool okay = SDL_TRUE; SDL_bool okay = SDL_TRUE;
/* *INDENT-OFF* */ /* clang-format off */
char *buf = (char *) EM_ASM_INT({ char *buf = (char *) EM_ASM_INT({
var str = var str =
UTF8ToString($0) + '\n\n' + UTF8ToString($0) + '\n\n' +
@ -259,12 +253,14 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
} }
return allocate(intArrayFromString(reply), 'i8', ALLOC_NORMAL); return allocate(intArrayFromString(reply), 'i8', ALLOC_NORMAL);
}, message); }, message);
/* *INDENT-ON* */ /* clang-format on */
if (SDL_strcmp(buf, "a") == 0) { if (SDL_strcmp(buf, "a") == 0) {
state = SDL_ASSERTION_ABORT; state = SDL_ASSERTION_ABORT;
/* (currently) no break functionality on Emscripten #if 0 /* (currently) no break functionality on Emscripten */
} else if (SDL_strcmp(buf, "b") == 0) { } else if (SDL_strcmp(buf, "b") == 0) {
state = SDL_ASSERTION_BREAK; */ state = SDL_ASSERTION_BREAK;
#endif
} else if (SDL_strcmp(buf, "r") == 0) { } else if (SDL_strcmp(buf, "r") == 0) {
state = SDL_ASSERTION_RETRY; state = SDL_ASSERTION_RETRY;
} else if (SDL_strcmp(buf, "i") == 0) { } else if (SDL_strcmp(buf, "i") == 0) {
@ -322,7 +318,6 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
return state; return state;
} }
SDL_assert_state SDL_assert_state
SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file, SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file,
int line) int line)
@ -363,7 +358,8 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file,
} else if (assertion_running == 3) { /* Abort asserted! */ } else if (assertion_running == 3) { /* Abort asserted! */
SDL_ExitProcess(42); SDL_ExitProcess(42);
} else { } else {
while (1) { /* do nothing but spin; what else can you do?! */ } while (1) { /* do nothing but spin; what else can you do?! */
}
} }
} }
@ -371,8 +367,7 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file,
state = assertion_handler(data, assertion_userdata); state = assertion_handler(data, assertion_userdata);
} }
switch (state) switch (state) {
{
case SDL_ASSERTION_ALWAYS_IGNORE: case SDL_ASSERTION_ALWAYS_IGNORE:
state = SDL_ASSERTION_IGNORE; state = SDL_ASSERTION_IGNORE;
data->always_ignore = 1; data->always_ignore = 1;
@ -397,7 +392,6 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file,
return state; return state;
} }
void SDL_AssertionsQuit(void) void SDL_AssertionsQuit(void)
{ {
#if SDL_ASSERT_LEVEL > 0 #if SDL_ASSERT_LEVEL > 0

View File

@ -39,8 +39,7 @@ struct SDL_DataQueue
size_t queued_bytes; /* number of bytes of data in the queue. */ size_t queued_bytes; /* number of bytes of data in the queue. */
}; };
static void static void SDL_FreeDataQueueList(SDL_DataQueuePacket *packet)
SDL_FreeDataQueueList(SDL_DataQueuePacket *packet)
{ {
while (packet) { while (packet) {
SDL_DataQueuePacket *next = packet->next; SDL_DataQueuePacket *next = packet->next;
@ -49,7 +48,6 @@ SDL_FreeDataQueueList(SDL_DataQueuePacket *packet)
} }
} }
/* this all expects that you managed thread safety elsewhere. */ /* this all expects that you managed thread safety elsewhere. */
SDL_DataQueue * SDL_DataQueue *
@ -82,8 +80,7 @@ SDL_NewDataQueue(const size_t _packetlen, const size_t initialslack)
return queue; return queue;
} }
void void SDL_FreeDataQueue(SDL_DataQueue *queue)
SDL_FreeDataQueue(SDL_DataQueue *queue)
{ {
if (queue) { if (queue) {
SDL_FreeDataQueueList(queue->head); SDL_FreeDataQueueList(queue->head);
@ -92,8 +89,7 @@ SDL_FreeDataQueue(SDL_DataQueue *queue)
} }
} }
void void SDL_ClearDataQueue(SDL_DataQueue *queue, const size_t slack)
SDL_ClearDataQueue(SDL_DataQueue *queue, const size_t slack)
{ {
const size_t packet_size = queue ? queue->packet_size : 1; const size_t packet_size = queue ? queue->packet_size : 1;
const size_t slackpackets = (slack + (packet_size - 1)) / packet_size; const size_t slackpackets = (slack + (packet_size - 1)) / packet_size;
@ -135,8 +131,7 @@ SDL_ClearDataQueue(SDL_DataQueue *queue, const size_t slack)
SDL_FreeDataQueueList(packet); /* free extra packets */ SDL_FreeDataQueueList(packet); /* free extra packets */
} }
static SDL_DataQueuePacket * static SDL_DataQueuePacket *AllocateDataQueuePacket(SDL_DataQueue *queue)
AllocateDataQueuePacket(SDL_DataQueue *queue)
{ {
SDL_DataQueuePacket *packet; SDL_DataQueuePacket *packet;
@ -168,9 +163,7 @@ AllocateDataQueuePacket(SDL_DataQueue *queue)
return packet; return packet;
} }
int SDL_WriteToDataQueue(SDL_DataQueue *queue, const void *_data, const size_t _len)
int
SDL_WriteToDataQueue(SDL_DataQueue *queue, const void *_data, const size_t _len)
{ {
size_t len = _len; size_t len = _len;
const Uint8 *data = (const Uint8 *)_data; const Uint8 *data = (const Uint8 *)_data;
@ -334,4 +327,3 @@ SDL_ReserveSpaceInDataQueue(SDL_DataQueue *queue, const size_t len)
} }
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -52,4 +52,3 @@ void *SDL_ReserveSpaceInDataQueue(SDL_DataQueue *queue, const size_t len);
#endif /* SDL_dataqueue_h_ */ #endif /* SDL_dataqueue_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -24,8 +24,7 @@
#include "SDL_error_c.h" #include "SDL_error_c.h"
int int SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{ {
/* Ignore call if invalid format pointer was passed */ /* Ignore call if invalid format pointer was passed */
if (fmt != NULL) { if (fmt != NULL) {
@ -51,7 +50,6 @@ SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
} }
} }
if (SDL_LogGetPriority(SDL_LOG_CATEGORY_ERROR) <= SDL_LOG_PRIORITY_DEBUG) { if (SDL_LogGetPriority(SDL_LOG_CATEGORY_ERROR) <= SDL_LOG_PRIORITY_DEBUG) {
/* If we are in debug mode, print out the error message */ /* If we are in debug mode, print out the error message */
SDL_LogDebug(SDL_LOG_CATEGORY_ERROR, "%s", error->str); SDL_LogDebug(SDL_LOG_CATEGORY_ERROR, "%s", error->str);
@ -69,15 +67,13 @@ SDL_GetError(void)
return error->error ? error->str : ""; return error->error ? error->str : "";
} }
void void SDL_ClearError(void)
SDL_ClearError(void)
{ {
SDL_GetErrBuf()->error = 0; SDL_GetErrBuf()->error = 0;
} }
/* Very common errors go here */ /* Very common errors go here */
int int SDL_Error(SDL_errorcode code)
SDL_Error(SDL_errorcode code)
{ {
switch (code) { switch (code) {
case SDL_ENOMEM: case SDL_ENOMEM:
@ -96,8 +92,7 @@ SDL_Error(SDL_errorcode code)
} }
#ifdef TEST_ERROR #ifdef TEST_ERROR
int int main(int argc, char *argv[])
main(int argc, char *argv[])
{ {
char buffer[BUFSIZ + 1]; char buffer[BUFSIZ + 1];
@ -112,7 +107,6 @@ main(int argc, char *argv[])
} }
#endif #endif
char * char *
SDL_GetErrorMsg(char *errstr, int maxlen) SDL_GetErrorMsg(char *errstr, int maxlen)
{ {

View File

@ -20,8 +20,6 @@
*/ */
#include "SDL_internal.h" #include "SDL_internal.h"
/* convert the guid to a printable string */ /* convert the guid to a printable string */
void SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID) void SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID)
{ {

View File

@ -22,17 +22,18 @@
#include "SDL_hints_c.h" #include "SDL_hints_c.h"
/* Assuming there aren't many hints set and they aren't being queried in /* Assuming there aren't many hints set and they aren't being queried in
critical performance paths, we'll just use linked lists here. critical performance paths, we'll just use linked lists here.
*/ */
typedef struct SDL_HintWatch { typedef struct SDL_HintWatch
{
SDL_HintCallback callback; SDL_HintCallback callback;
void *userdata; void *userdata;
struct SDL_HintWatch *next; struct SDL_HintWatch *next;
} SDL_HintWatch; } SDL_HintWatch;
typedef struct SDL_Hint { typedef struct SDL_Hint
{
char *name; char *name;
char *value; char *value;
SDL_HintPriority priority; SDL_HintPriority priority;
@ -127,8 +128,7 @@ SDL_ResetHint(const char *name)
return SDL_FALSE; return SDL_FALSE;
} }
void void SDL_ResetHints(void)
SDL_ResetHints(void)
{ {
const char *env; const char *env;
SDL_Hint *hint; SDL_Hint *hint;
@ -195,8 +195,7 @@ SDL_GetHintBoolean(const char *name, SDL_bool default_value)
return SDL_GetStringBoolean(hint, default_value); return SDL_GetStringBoolean(hint, default_value);
} }
void void SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata)
SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata)
{ {
SDL_Hint *hint; SDL_Hint *hint;
SDL_HintWatch *entry; SDL_HintWatch *entry;
@ -257,8 +256,7 @@ SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata)
callback(userdata, name, value, value); callback(userdata, name, value, value);
} }
void void SDL_DelHintCallback(const char *name, SDL_HintCallback callback, void *userdata)
SDL_DelHintCallback(const char *name, SDL_HintCallback callback, void *userdata)
{ {
SDL_Hint *hint; SDL_Hint *hint;
SDL_HintWatch *entry, *prev; SDL_HintWatch *entry, *prev;

View File

@ -42,7 +42,12 @@
#define SDL_MAX_SMALL_ALLOC_STACKSIZE 128 #define SDL_MAX_SMALL_ALLOC_STACKSIZE 128
#define SDL_small_alloc(type, count, pisstack) ((*(pisstack) = ((sizeof(type) * (count)) < SDL_MAX_SMALL_ALLOC_STACKSIZE)), (*(pisstack) ? SDL_stack_alloc(type, count) : (type *)SDL_malloc(sizeof(type) * (count)))) #define SDL_small_alloc(type, count, pisstack) ((*(pisstack) = ((sizeof(type) * (count)) < SDL_MAX_SMALL_ALLOC_STACKSIZE)), (*(pisstack) ? SDL_stack_alloc(type, count) : (type *)SDL_malloc(sizeof(type) * (count))))
#define SDL_small_free(ptr, isstack) if ((isstack)) { SDL_stack_free(ptr); } else { SDL_free(ptr); } #define SDL_small_free(ptr, isstack) \
if ((isstack)) { \
SDL_stack_free(ptr); \
} else { \
SDL_free(ptr); \
}
#include "dynapi/SDL_dynapi.h" #include "dynapi/SDL_dynapi.h"
@ -105,7 +110,6 @@
#include <float.h> #include <float.h>
#endif #endif
/* If you run into a warning that O_CLOEXEC is redefined, update the SDL configuration header for your platform to add HAVE_O_CLOEXEC */ /* If you run into a warning that O_CLOEXEC is redefined, update the SDL configuration header for your platform to add HAVE_O_CLOEXEC */
#ifndef HAVE_O_CLOEXEC #ifndef HAVE_O_CLOEXEC
#define O_CLOEXEC 0 #define O_CLOEXEC 0

View File

@ -23,8 +23,7 @@
#include "./SDL_list.h" #include "./SDL_list.h"
/* Push */ /* Push */
int int SDL_ListAdd(SDL_ListNode **head, void *ent)
SDL_ListAdd(SDL_ListNode **head, void *ent)
{ {
SDL_ListNode *node = SDL_malloc(sizeof(*node)); SDL_ListNode *node = SDL_malloc(sizeof(*node));
@ -39,8 +38,7 @@ SDL_ListAdd(SDL_ListNode **head, void *ent)
} }
/* Pop from end as a FIFO (if add with SDL_ListAdd) */ /* Pop from end as a FIFO (if add with SDL_ListAdd) */
void void SDL_ListPop(SDL_ListNode **head, void **ent)
SDL_ListPop(SDL_ListNode **head, void **ent)
{ {
SDL_ListNode **ptr = head; SDL_ListNode **ptr = head;
@ -61,8 +59,7 @@ SDL_ListPop(SDL_ListNode **head, void **ent)
*ptr = NULL; *ptr = NULL;
} }
void void SDL_ListRemove(SDL_ListNode **head, void *ent)
SDL_ListRemove(SDL_ListNode **head, void *ent)
{ {
SDL_ListNode **ptr = head; SDL_ListNode **ptr = head;
@ -77,8 +74,7 @@ SDL_ListRemove(SDL_ListNode **head, void *ent)
} }
} }
void void SDL_ListClear(SDL_ListNode **head)
SDL_ListClear(SDL_ListNode **head)
{ {
SDL_ListNode *l = *head; SDL_ListNode *l = *head;
*head = NULL; *head = NULL;

View File

@ -28,7 +28,6 @@ typedef struct SDL_ListNode
struct SDL_ListNode *next; struct SDL_ListNode *next;
} SDL_ListNode; } SDL_ListNode;
int SDL_ListAdd(SDL_ListNode **head, void *ent); int SDL_ListAdd(SDL_ListNode **head, void *ent);
void SDL_ListPop(SDL_ListNode **head, void **ent); void SDL_ListPop(SDL_ListNode **head, void **ent);
void SDL_ListRemove(SDL_ListNode **head, void *ent); void SDL_ListRemove(SDL_ListNode **head, void *ent);

View File

@ -38,7 +38,6 @@
#include "stdlib/SDL_vacopy.h" #include "stdlib/SDL_vacopy.h"
/* The size of the stack buffer to use for rendering log messages. */ /* The size of the stack buffer to use for rendering log messages. */
#define SDL_MAX_LOG_MESSAGE_STACK 256 #define SDL_MAX_LOG_MESSAGE_STACK 256
@ -102,8 +101,7 @@ static int SDL_android_priority[SDL_NUM_LOG_PRIORITIES] = {
}; };
#endif /* __ANDROID__ */ #endif /* __ANDROID__ */
void void SDL_LogInit(void)
SDL_LogInit(void)
{ {
if (log_function_mutex == NULL) { if (log_function_mutex == NULL) {
/* if this fails we'll try to continue without it. */ /* if this fails we'll try to continue without it. */
@ -111,8 +109,7 @@ SDL_LogInit(void)
} }
} }
void void SDL_LogQuit(void)
SDL_LogQuit(void)
{ {
SDL_LogResetPriorities(); SDL_LogResetPriorities();
if (log_function_mutex) { if (log_function_mutex) {
@ -121,8 +118,7 @@ SDL_LogQuit(void)
} }
} }
void void SDL_LogSetAllPriority(SDL_LogPriority priority)
SDL_LogSetAllPriority(SDL_LogPriority priority)
{ {
SDL_LogLevel *entry; SDL_LogLevel *entry;
@ -134,8 +130,7 @@ SDL_LogSetAllPriority(SDL_LogPriority priority)
SDL_application_priority = priority; SDL_application_priority = priority;
} }
void void SDL_LogSetPriority(int category, SDL_LogPriority priority)
SDL_LogSetPriority(int category, SDL_LogPriority priority)
{ {
SDL_LogLevel *entry; SDL_LogLevel *entry;
@ -178,8 +173,7 @@ SDL_LogGetPriority(int category)
} }
} }
void void SDL_LogResetPriorities(void)
SDL_LogResetPriorities(void)
{ {
SDL_LogLevel *entry; SDL_LogLevel *entry;
@ -195,8 +189,7 @@ SDL_LogResetPriorities(void)
SDL_test_priority = DEFAULT_TEST_PRIORITY; SDL_test_priority = DEFAULT_TEST_PRIORITY;
} }
void void SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -205,8 +198,7 @@ SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
va_end(ap); va_end(ap);
} }
void void SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -215,8 +207,7 @@ SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
va_end(ap); va_end(ap);
} }
void void SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -225,8 +216,7 @@ SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
va_end(ap); va_end(ap);
} }
void void SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -235,8 +225,7 @@ SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
va_end(ap); va_end(ap);
} }
void void SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -245,8 +234,7 @@ SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
va_end(ap); va_end(ap);
} }
void void SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -255,8 +243,7 @@ SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
va_end(ap); va_end(ap);
} }
void void SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -265,8 +252,7 @@ SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
va_end(ap); va_end(ap);
} }
void void SDL_LogMessage(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
SDL_LogMessage(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -276,8 +262,7 @@ SDL_LogMessage(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING
} }
#ifdef __ANDROID__ #ifdef __ANDROID__
static const char * static const char *GetCategoryPrefix(int category)
GetCategoryPrefix(int category)
{ {
if (category < SDL_LOG_CATEGORY_RESERVED1) { if (category < SDL_LOG_CATEGORY_RESERVED1) {
return SDL_category_prefixes[category]; return SDL_category_prefixes[category];
@ -289,8 +274,7 @@ GetCategoryPrefix(int category)
} }
#endif /* __ANDROID__ */ #endif /* __ANDROID__ */
void void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
{ {
char *message = NULL; char *message = NULL;
char stack_buf[SDL_MAX_LOG_MESSAGE_STACK]; char stack_buf[SDL_MAX_LOG_MESSAGE_STACK];
@ -373,8 +357,7 @@ static int consoleAttached = 0;
static HANDLE stderrHandle = NULL; static HANDLE stderrHandle = NULL;
#endif #endif
static void SDLCALL static void SDLCALL SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
const char *message) const char *message)
{ {
#if defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__) #if defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__)
@ -503,8 +486,7 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
#endif #endif
} }
void void SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata)
SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata)
{ {
if (callback) { if (callback) {
*callback = SDL_log_function; *callback = SDL_log_function;
@ -514,8 +496,7 @@ SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata)
} }
} }
void void SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata)
SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata)
{ {
SDL_log_function = callback; SDL_log_function = callback;
SDL_log_userdata = userdata; SDL_log_userdata = userdata;

View File

@ -20,7 +20,6 @@
*/ */
#include "SDL_internal.h" #include "SDL_internal.h"
#if defined(_MSC_VER) && (_MSC_VER >= 1500) #if defined(_MSC_VER) && (_MSC_VER >= 1500)
#include <intrin.h> #include <intrin.h>
#define HAVE_MSC_ATOMICS 1 #define HAVE_MSC_ATOMICS 1
@ -49,6 +48,7 @@
#endif #endif
#endif #endif
/* *INDENT-OFF* */ /* clang-format off */
#if defined(__WATCOMC__) && defined(__386__) #if defined(__WATCOMC__) && defined(__386__)
SDL_COMPILE_TIME_ASSERT(intsize, 4==sizeof(int)); SDL_COMPILE_TIME_ASSERT(intsize, 4==sizeof(int));
#define HAVE_WATCOM_ATOMICS #define HAVE_WATCOM_ATOMICS
@ -73,7 +73,9 @@ extern __inline int _SDL_xadd_watcom(volatile int *a, int v);
parm [ecx] [eax] \ parm [ecx] [eax] \
value [eax] \ value [eax] \
modify exact [eax]; modify exact [eax];
#endif /* __WATCOMC__ && __386__ */ #endif /* __WATCOMC__ && __386__ */
/* *INDENT-ON* */ /* clang-format on */
/* /*
If any of the operations are not provided then we must emulate some If any of the operations are not provided then we must emulate some
@ -105,16 +107,14 @@ extern __inline int _SDL_xadd_watcom(volatile int *a, int v);
#if EMULATE_CAS #if EMULATE_CAS
static SDL_SpinLock locks[32]; static SDL_SpinLock locks[32];
static SDL_INLINE void static SDL_INLINE void enterLock(void *a)
enterLock(void *a)
{ {
uintptr_t index = ((((uintptr_t)a) >> 3) & 0x1f); uintptr_t index = ((((uintptr_t)a) >> 3) & 0x1f);
SDL_AtomicLock(&locks[index]); SDL_AtomicLock(&locks[index]);
} }
static SDL_INLINE void static SDL_INLINE void leaveLock(void *a)
leaveLock(void *a)
{ {
uintptr_t index = ((((uintptr_t)a) >> 3) & 0x1f); uintptr_t index = ((((uintptr_t)a) >> 3) & 0x1f);
@ -122,7 +122,6 @@ leaveLock(void *a)
} }
#endif #endif
SDL_bool SDL_bool
SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval) SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval)
{ {
@ -184,8 +183,7 @@ SDL_AtomicCASPtr(void **a, void *oldval, void *newval)
#endif #endif
} }
int int SDL_AtomicSet(SDL_atomic_t *a, int v)
SDL_AtomicSet(SDL_atomic_t *a, int v)
{ {
#ifdef HAVE_MSC_ATOMICS #ifdef HAVE_MSC_ATOMICS
SDL_COMPILE_TIME_ASSERT(atomic_set, sizeof(long) == sizeof(a->value)); SDL_COMPILE_TIME_ASSERT(atomic_set, sizeof(long) == sizeof(a->value));
@ -225,8 +223,7 @@ SDL_AtomicSetPtr(void **a, void *v)
#endif #endif
} }
int int SDL_AtomicAdd(SDL_atomic_t *a, int v)
SDL_AtomicAdd(SDL_atomic_t *a, int v)
{ {
#ifdef HAVE_MSC_ATOMICS #ifdef HAVE_MSC_ATOMICS
SDL_COMPILE_TIME_ASSERT(atomic_add, sizeof(long) == sizeof(a->value)); SDL_COMPILE_TIME_ASSERT(atomic_add, sizeof(long) == sizeof(a->value));
@ -249,8 +246,7 @@ SDL_AtomicAdd(SDL_atomic_t *a, int v)
#endif #endif
} }
int int SDL_AtomicGet(SDL_atomic_t *a)
SDL_AtomicGet(SDL_atomic_t *a)
{ {
#ifdef HAVE_ATOMIC_LOAD_N #ifdef HAVE_ATOMIC_LOAD_N
return __atomic_load_n(&a->value, __ATOMIC_SEQ_CST); return __atomic_load_n(&a->value, __ATOMIC_SEQ_CST);
@ -298,14 +294,12 @@ SDL_AtomicGetPtr(void **a)
#error This file should be built in arm mode so the mcr instruction is available for memory barriers #error This file should be built in arm mode so the mcr instruction is available for memory barriers
#endif #endif
void void SDL_MemoryBarrierReleaseFunction(void)
SDL_MemoryBarrierReleaseFunction(void)
{ {
SDL_MemoryBarrierRelease(); SDL_MemoryBarrierRelease();
} }
void void SDL_MemoryBarrierAcquireFunction(void)
SDL_MemoryBarrierAcquireFunction(void)
{ {
SDL_MemoryBarrierAcquire(); SDL_MemoryBarrierAcquire();
} }

View File

@ -24,7 +24,6 @@
#include "../core/windows/SDL_windows.h" #include "../core/windows/SDL_windows.h"
#endif #endif
#if !defined(HAVE_GCC_ATOMICS) && defined(__SOLARIS__) #if !defined(HAVE_GCC_ATOMICS) && defined(__SOLARIS__)
#include <atomic.h> #include <atomic.h>
#endif #endif
@ -45,6 +44,7 @@
#include <libkern/OSAtomic.h> #include <libkern/OSAtomic.h>
#endif #endif
/* *INDENT-OFF* */ /* clang-format off */
#if defined(__WATCOMC__) && defined(__386__) #if defined(__WATCOMC__) && defined(__386__)
SDL_COMPILE_TIME_ASSERT(locksize, 4==sizeof(SDL_SpinLock)); SDL_COMPILE_TIME_ASSERT(locksize, 4==sizeof(SDL_SpinLock));
extern __inline int _SDL_xchg_watcom(volatile int *a, int v); extern __inline int _SDL_xchg_watcom(volatile int *a, int v);
@ -54,6 +54,7 @@ extern __inline int _SDL_xchg_watcom(volatile int *a, int v);
value [eax] \ value [eax] \
modify exact [eax]; modify exact [eax];
#endif /* __WATCOMC__ && __386__ */ #endif /* __WATCOMC__ && __386__ */
/* *INDENT-ON* */ /* clang-format on */
/* This function is where all the magic happens... */ /* This function is where all the magic happens... */
SDL_bool SDL_bool
@ -101,28 +102,36 @@ SDL_AtomicTryLock(SDL_SpinLock *lock)
if (__cpucap_have_rex()) { if (__cpucap_have_rex()) {
__asm__ __volatile__( __asm__ __volatile__(
"ldrex %0, [%2]\nteq %0, #0\nstrexeq %0, %1, [%2]" "ldrex %0, [%2]\nteq %0, #0\nstrexeq %0, %1, [%2]"
: "=&r" (result) : "r" (1), "r" (lock) : "cc", "memory"); : "=&r"(result)
: "r"(1), "r"(lock)
: "cc", "memory");
return result == 0; return result == 0;
} }
#endif #endif
__asm__ __volatile__( __asm__ __volatile__(
"swp %0, %1, [%2]\n" "swp %0, %1, [%2]\n"
: "=&r,&r" (result) : "r,0" (1), "r,r" (lock) : "memory"); : "=&r,&r"(result)
: "r,0"(1), "r,r"(lock)
: "memory");
return result == 0; return result == 0;
#elif defined(__GNUC__) && defined(__arm__) #elif defined(__GNUC__) && defined(__arm__)
int result; int result;
__asm__ __volatile__( __asm__ __volatile__(
"ldrex %0, [%2]\nteq %0, #0\nstrexeq %0, %1, [%2]" "ldrex %0, [%2]\nteq %0, #0\nstrexeq %0, %1, [%2]"
: "=&r" (result) : "r" (1), "r" (lock) : "cc", "memory"); : "=&r"(result)
: "r"(1), "r"(lock)
: "cc", "memory");
return result == 0; return result == 0;
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
int result; int result;
__asm__ __volatile__( __asm__ __volatile__(
"lock ; xchgl %0, (%1)\n" "lock ; xchgl %0, (%1)\n"
: "=r" (result) : "r" (lock), "0" (1) : "cc", "memory"); : "=r"(result)
: "r"(lock), "0"(1)
: "cc", "memory");
return result == 0; return result == 0;
#elif defined(__MACOS__) || defined(__IOS__) || defined(__TVOS__) #elif defined(__MACOS__) || defined(__IOS__) || defined(__TVOS__)
@ -147,7 +156,9 @@ SDL_AtomicTryLock(SDL_SpinLock *lock)
res = SDL_TRUE; res = SDL_TRUE;
} }
// enable interuption // enable interuption
if (oldintr) { EIntr(); } if (oldintr) {
EIntr();
}
return res; return res;
#else #else
#error Please implement for your platform. #error Please implement for your platform.
@ -155,8 +166,7 @@ SDL_AtomicTryLock(SDL_SpinLock *lock)
#endif #endif
} }
void void SDL_AtomicLock(SDL_SpinLock *lock)
SDL_AtomicLock(SDL_SpinLock *lock)
{ {
int iterations = 0; int iterations = 0;
/* FIXME: Should we have an eventual timeout? */ /* FIXME: Should we have an eventual timeout? */
@ -171,8 +181,7 @@ SDL_AtomicLock(SDL_SpinLock *lock)
} }
} }
void void SDL_AtomicUnlock(SDL_SpinLock *lock)
SDL_AtomicUnlock(SDL_SpinLock *lock)
{ {
#if HAVE_GCC_ATOMICS || HAVE_GCC_SYNC_LOCK_TEST_AND_SET #if HAVE_GCC_ATOMICS || HAVE_GCC_SYNC_LOCK_TEST_AND_SET
__sync_lock_release(lock); __sync_lock_release(lock);

View File

@ -100,7 +100,6 @@ static const AudioBootStrap *const bootstrap[] = {
NULL NULL
}; };
#ifdef HAVE_LIBSAMPLERATE_H #ifdef HAVE_LIBSAMPLERATE_H
#ifdef SDL_LIBSAMPLERATE_DYNAMIC #ifdef SDL_LIBSAMPLERATE_DYNAMIC
static void *SRC_lib = NULL; static void *SRC_lib = NULL;
@ -114,8 +113,7 @@ SRC_STATE* (*SRC_src_delete)(SRC_STATE *state) = NULL;
const char *(*SRC_src_strerror)(int error) = NULL; const char *(*SRC_src_strerror)(int error) = NULL;
int (*SRC_src_simple)(SRC_DATA *data, int converter_type, int channels) = NULL; int (*SRC_src_simple)(SRC_DATA *data, int converter_type, int channels) = NULL;
static SDL_bool static SDL_bool LoadLibSampleRate(void)
LoadLibSampleRate(void)
{ {
const char *hint = SDL_GetHint(SDL_HINT_AUDIO_RESAMPLING_MODE); const char *hint = SDL_GetHint(SDL_HINT_AUDIO_RESAMPLING_MODE);
@ -142,12 +140,14 @@ LoadLibSampleRate(void)
return SDL_FALSE; return SDL_FALSE;
} }
/* *INDENT-OFF* */ /* clang-format off */
SRC_src_new = (SRC_STATE* (*)(int converter_type, int channels, int *error))SDL_LoadFunction(SRC_lib, "src_new"); SRC_src_new = (SRC_STATE* (*)(int converter_type, int channels, int *error))SDL_LoadFunction(SRC_lib, "src_new");
SRC_src_process = (int (*)(SRC_STATE *state, SRC_DATA *data))SDL_LoadFunction(SRC_lib, "src_process"); SRC_src_process = (int (*)(SRC_STATE *state, SRC_DATA *data))SDL_LoadFunction(SRC_lib, "src_process");
SRC_src_reset = (int(*)(SRC_STATE *state))SDL_LoadFunction(SRC_lib, "src_reset"); SRC_src_reset = (int(*)(SRC_STATE *state))SDL_LoadFunction(SRC_lib, "src_reset");
SRC_src_delete = (SRC_STATE* (*)(SRC_STATE *state))SDL_LoadFunction(SRC_lib, "src_delete"); SRC_src_delete = (SRC_STATE* (*)(SRC_STATE *state))SDL_LoadFunction(SRC_lib, "src_delete");
SRC_src_strerror = (const char* (*)(int error))SDL_LoadFunction(SRC_lib, "src_strerror"); SRC_src_strerror = (const char* (*)(int error))SDL_LoadFunction(SRC_lib, "src_strerror");
SRC_src_simple = (int(*)(SRC_DATA *data, int converter_type, int channels))SDL_LoadFunction(SRC_lib, "src_simple"); SRC_src_simple = (int(*)(SRC_DATA *data, int converter_type, int channels))SDL_LoadFunction(SRC_lib, "src_simple");
/* *INDENT-ON* */ /* clang-format on */
if (!SRC_src_new || !SRC_src_process || !SRC_src_reset || !SRC_src_delete || !SRC_src_strerror || !SRC_src_simple) { if (!SRC_src_new || !SRC_src_process || !SRC_src_reset || !SRC_src_delete || !SRC_src_strerror || !SRC_src_simple) {
SDL_UnloadObject(SRC_lib); SDL_UnloadObject(SRC_lib);
@ -167,8 +167,7 @@ LoadLibSampleRate(void)
return SDL_TRUE; return SDL_TRUE;
} }
static void static void UnloadLibSampleRate(void)
UnloadLibSampleRate(void)
{ {
#ifdef SDL_LIBSAMPLERATE_DYNAMIC #ifdef SDL_LIBSAMPLERATE_DYNAMIC
if (SRC_lib != NULL) { if (SRC_lib != NULL) {
@ -186,8 +185,7 @@ UnloadLibSampleRate(void)
} }
#endif #endif
static SDL_AudioDevice * static SDL_AudioDevice *get_audio_device(SDL_AudioDeviceID id)
get_audio_device(SDL_AudioDeviceID id)
{ {
id--; id--;
if ((id >= SDL_arraysize(open_devices)) || (open_devices[id] == NULL)) { if ((id >= SDL_arraysize(open_devices)) || (open_devices[id] == NULL)) {
@ -198,10 +196,8 @@ get_audio_device(SDL_AudioDeviceID id)
return open_devices[id]; return open_devices[id];
} }
/* stubs for audio drivers that don't need a specific entry point... */ /* stubs for audio drivers that don't need a specific entry point... */
static void static void SDL_AudioDetectDevices_Default(void)
SDL_AudioDetectDevices_Default(void)
{ {
/* you have to write your own implementation if these assertions fail. */ /* you have to write your own implementation if these assertions fail. */
SDL_assert(current_audio.impl.OnlyHasDefaultOutputDevice); SDL_assert(current_audio.impl.OnlyHasDefaultOutputDevice);
@ -213,67 +209,54 @@ SDL_AudioDetectDevices_Default(void)
} }
} }
static void static void SDL_AudioThreadInit_Default(_THIS)
SDL_AudioThreadInit_Default(_THIS)
{ /* no-op. */ { /* no-op. */
} }
static void static void SDL_AudioThreadDeinit_Default(_THIS)
SDL_AudioThreadDeinit_Default(_THIS)
{ /* no-op. */ { /* no-op. */
} }
static void static void SDL_AudioWaitDevice_Default(_THIS)
SDL_AudioWaitDevice_Default(_THIS)
{ /* no-op. */ { /* no-op. */
} }
static void static void SDL_AudioPlayDevice_Default(_THIS)
SDL_AudioPlayDevice_Default(_THIS)
{ /* no-op. */ { /* no-op. */
} }
static Uint8 * static Uint8 *SDL_AudioGetDeviceBuf_Default(_THIS)
SDL_AudioGetDeviceBuf_Default(_THIS)
{ {
return NULL; return NULL;
} }
static int static int SDL_AudioCaptureFromDevice_Default(_THIS, void *buffer, int buflen)
SDL_AudioCaptureFromDevice_Default(_THIS, void *buffer, int buflen)
{ {
return -1; /* just fail immediately. */ return -1; /* just fail immediately. */
} }
static void static void SDL_AudioFlushCapture_Default(_THIS)
SDL_AudioFlushCapture_Default(_THIS)
{ /* no-op. */ { /* no-op. */
} }
static void static void SDL_AudioCloseDevice_Default(_THIS)
SDL_AudioCloseDevice_Default(_THIS)
{ /* no-op. */ { /* no-op. */
} }
static void static void SDL_AudioDeinitialize_Default(void)
SDL_AudioDeinitialize_Default(void)
{ /* no-op. */ { /* no-op. */
} }
static void static void SDL_AudioFreeDeviceHandle_Default(void *handle)
SDL_AudioFreeDeviceHandle_Default(void *handle)
{ /* no-op. */ { /* no-op. */
} }
static int SDL_AudioOpenDevice_Default(_THIS, const char *devname)
static int
SDL_AudioOpenDevice_Default(_THIS, const char *devname)
{ {
return SDL_Unsupported(); return SDL_Unsupported();
} }
static SDL_INLINE SDL_bool static SDL_INLINE SDL_bool is_in_audio_device_thread(SDL_AudioDevice *device)
is_in_audio_device_thread(SDL_AudioDevice * device)
{ {
/* The device thread locks the same mutex, but not through the public API. /* The device thread locks the same mutex, but not through the public API.
This check is in case the application, in the audio callback, This check is in case the application, in the audio callback,
@ -286,31 +269,27 @@ is_in_audio_device_thread(SDL_AudioDevice * device)
return SDL_FALSE; return SDL_FALSE;
} }
static void static void SDL_AudioLockDevice_Default(SDL_AudioDevice *device)
SDL_AudioLockDevice_Default(SDL_AudioDevice * device)
{ {
if (!is_in_audio_device_thread(device)) { if (!is_in_audio_device_thread(device)) {
SDL_LockMutex(device->mixer_lock); SDL_LockMutex(device->mixer_lock);
} }
} }
static void static void SDL_AudioUnlockDevice_Default(SDL_AudioDevice *device)
SDL_AudioUnlockDevice_Default(SDL_AudioDevice * device)
{ {
if (!is_in_audio_device_thread(device)) { if (!is_in_audio_device_thread(device)) {
SDL_UnlockMutex(device->mixer_lock); SDL_UnlockMutex(device->mixer_lock);
} }
} }
static void static void finish_audio_entry_points_init(void)
finish_audio_entry_points_init(void)
{ {
/* /*
* Fill in stub functions for unused driver entry points. This lets us * Fill in stub functions for unused driver entry points. This lets us
* blindly call them without having to check for validity first. * blindly call them without having to check for validity first.
*/ */
#define FILL_STUB(x) \ #define FILL_STUB(x) \
if (current_audio.impl.x == NULL) { \ if (current_audio.impl.x == NULL) { \
current_audio.impl.x = SDL_Audio##x##_Default; \ current_audio.impl.x = SDL_Audio##x##_Default; \
@ -332,11 +311,9 @@ finish_audio_entry_points_init(void)
#undef FILL_STUB #undef FILL_STUB
} }
/* device hotplug support... */ /* device hotplug support... */
static int static int add_audio_device(const char *name, SDL_AudioSpec *spec, void *handle, SDL_AudioDeviceItem **devices, int *devCount)
add_audio_device(const char *name, SDL_AudioSpec *spec, void *handle, SDL_AudioDeviceItem **devices, int *devCount)
{ {
int retval = -1; int retval = -1;
SDL_AudioDeviceItem *item; SDL_AudioDeviceItem *item;
@ -399,21 +376,18 @@ add_audio_device(const char *name, SDL_AudioSpec *spec, void *handle, SDL_AudioD
return retval; return retval;
} }
static SDL_INLINE int static SDL_INLINE int add_capture_device(const char *name, SDL_AudioSpec *spec, void *handle)
add_capture_device(const char *name, SDL_AudioSpec *spec, void *handle)
{ {
SDL_assert(current_audio.impl.HasCaptureSupport); SDL_assert(current_audio.impl.HasCaptureSupport);
return add_audio_device(name, spec, handle, &current_audio.inputDevices, &current_audio.inputDeviceCount); return add_audio_device(name, spec, handle, &current_audio.inputDevices, &current_audio.inputDeviceCount);
} }
static SDL_INLINE int static SDL_INLINE int add_output_device(const char *name, SDL_AudioSpec *spec, void *handle)
add_output_device(const char *name, SDL_AudioSpec *spec, void *handle)
{ {
return add_audio_device(name, spec, handle, &current_audio.outputDevices, &current_audio.outputDeviceCount); return add_audio_device(name, spec, handle, &current_audio.outputDevices, &current_audio.outputDeviceCount);
} }
static void static void free_device_list(SDL_AudioDeviceItem **devices, int *devCount)
free_device_list(SDL_AudioDeviceItem **devices, int *devCount)
{ {
SDL_AudioDeviceItem *item, *next; SDL_AudioDeviceItem *item, *next;
for (item = *devices; item != NULL; item = next) { for (item = *devices; item != NULL; item = next) {
@ -432,10 +406,8 @@ free_device_list(SDL_AudioDeviceItem **devices, int *devCount)
*devCount = 0; *devCount = 0;
} }
/* The audio backends call this when a new device is plugged in. */ /* The audio backends call this when a new device is plugged in. */
void void SDL_AddAudioDevice(const SDL_bool iscapture, const char *name, SDL_AudioSpec *spec, void *handle)
SDL_AddAudioDevice(const SDL_bool iscapture, const char *name, SDL_AudioSpec *spec, void *handle)
{ {
const int device_index = iscapture ? add_capture_device(name, spec, handle) : add_output_device(name, spec, handle); const int device_index = iscapture ? add_capture_device(name, spec, handle) : add_output_device(name, spec, handle);
if (device_index != -1) { if (device_index != -1) {
@ -481,8 +453,7 @@ void SDL_OpenedAudioDeviceDisconnected(SDL_AudioDevice *device)
} }
} }
static void static void mark_device_removed(void *handle, SDL_AudioDeviceItem *devices, SDL_bool *removedFlag)
mark_device_removed(void *handle, SDL_AudioDeviceItem *devices, SDL_bool *removedFlag)
{ {
SDL_AudioDeviceItem *item; SDL_AudioDeviceItem *item;
SDL_assert(handle != NULL); SDL_assert(handle != NULL);
@ -496,8 +467,7 @@ mark_device_removed(void *handle, SDL_AudioDeviceItem *devices, SDL_bool *remove
} }
/* The audio backends call this when a device is removed from the system. */ /* The audio backends call this when a device is removed from the system. */
void void SDL_RemoveAudioDevice(const SDL_bool iscapture, void *handle)
SDL_RemoveAudioDevice(const SDL_bool iscapture, void *handle)
{ {
int device_index; int device_index;
SDL_AudioDevice *device = NULL; SDL_AudioDevice *device = NULL;
@ -540,12 +510,9 @@ SDL_RemoveAudioDevice(const SDL_bool iscapture, void *handle)
current_audio.impl.FreeDeviceHandle(handle); current_audio.impl.FreeDeviceHandle(handle);
} }
/* buffer queueing support... */ /* buffer queueing support... */
static void SDLCALL static void SDLCALL SDL_BufferQueueDrainCallback(void *userdata, Uint8 *stream, int len)
SDL_BufferQueueDrainCallback(void *userdata, Uint8 *stream, int len)
{ {
/* this function always holds the mixer lock before being called. */ /* this function always holds the mixer lock before being called. */
SDL_AudioDevice *device = (SDL_AudioDevice *)userdata; SDL_AudioDevice *device = (SDL_AudioDevice *)userdata;
@ -565,8 +532,7 @@ SDL_BufferQueueDrainCallback(void *userdata, Uint8 *stream, int len)
} }
} }
static void SDLCALL static void SDLCALL SDL_BufferQueueFillCallback(void *userdata, Uint8 *stream, int len)
SDL_BufferQueueFillCallback(void *userdata, Uint8 *stream, int len)
{ {
/* this function always holds the mixer lock before being called. */ /* this function always holds the mixer lock before being called. */
SDL_AudioDevice *device = (SDL_AudioDevice *)userdata; SDL_AudioDevice *device = (SDL_AudioDevice *)userdata;
@ -581,8 +547,7 @@ SDL_BufferQueueFillCallback(void *userdata, Uint8 *stream, int len)
SDL_WriteToDataQueue(device->buffer_queue, stream, len); SDL_WriteToDataQueue(device->buffer_queue, stream, len);
} }
int int SDL_QueueAudio(SDL_AudioDeviceID devid, const void *data, Uint32 len)
SDL_QueueAudio(SDL_AudioDeviceID devid, const void *data, Uint32 len)
{ {
SDL_AudioDevice *device = get_audio_device(devid); SDL_AudioDevice *device = get_audio_device(devid);
int rc = 0; int rc = 0;
@ -635,8 +600,7 @@ SDL_GetQueuedAudioSize(SDL_AudioDeviceID devid)
/* Nothing to do unless we're set up for queueing. */ /* Nothing to do unless we're set up for queueing. */
if (device->callbackspec.callback == SDL_BufferQueueDrainCallback || if (device->callbackspec.callback == SDL_BufferQueueDrainCallback ||
device->callbackspec.callback == SDL_BufferQueueFillCallback) device->callbackspec.callback == SDL_BufferQueueFillCallback) {
{
current_audio.impl.LockDevice(device); current_audio.impl.LockDevice(device);
retval = (Uint32)SDL_CountDataQueue(device->buffer_queue); retval = (Uint32)SDL_CountDataQueue(device->buffer_queue);
current_audio.impl.UnlockDevice(device); current_audio.impl.UnlockDevice(device);
@ -645,8 +609,7 @@ SDL_GetQueuedAudioSize(SDL_AudioDeviceID devid)
return retval; return retval;
} }
void void SDL_ClearQueuedAudio(SDL_AudioDeviceID devid)
SDL_ClearQueuedAudio(SDL_AudioDeviceID devid)
{ {
SDL_AudioDevice *device = get_audio_device(devid); SDL_AudioDevice *device = get_audio_device(devid);
@ -663,10 +626,8 @@ SDL_ClearQueuedAudio(SDL_AudioDeviceID devid)
current_audio.impl.UnlockDevice(device); current_audio.impl.UnlockDevice(device);
} }
/* The general mixing thread function */ /* The general mixing thread function */
static int SDLCALL static int SDLCALL SDL_RunAudio(void *devicep)
SDL_RunAudio(void *devicep)
{ {
SDL_AudioDevice *device = (SDL_AudioDevice *)devicep; SDL_AudioDevice *device = (SDL_AudioDevice *)devicep;
void *udata = device->callbackspec.userdata; void *udata = device->callbackspec.userdata;
@ -765,8 +726,7 @@ SDL_RunAudio(void *devicep)
/* !!! FIXME: this needs to deal with device spec changes. */ /* !!! FIXME: this needs to deal with device spec changes. */
/* The general capture thread function */ /* The general capture thread function */
static int SDLCALL static int SDLCALL SDL_CaptureAudio(void *devicep)
SDL_CaptureAudio(void *devicep)
{ {
SDL_AudioDevice *device = (SDL_AudioDevice *)devicep; SDL_AudioDevice *device = (SDL_AudioDevice *)devicep;
const int silence = (int)device->spec.silence; const int silence = (int)device->spec.silence;
@ -876,11 +836,11 @@ SDL_CaptureAudio(void *devicep)
return 0; return 0;
} }
static SDL_AudioFormat SDL_ParseAudioFormat(const char *string)
static SDL_AudioFormat
SDL_ParseAudioFormat(const char *string)
{ {
#define CHECK_FMT_STRING(x) if (SDL_strcmp(string, #x) == 0) return AUDIO_##x #define CHECK_FMT_STRING(x) \
if (SDL_strcmp(string, #x) == 0) \
return AUDIO_##x
CHECK_FMT_STRING(U8); CHECK_FMT_STRING(U8);
CHECK_FMT_STRING(S8); CHECK_FMT_STRING(S8);
CHECK_FMT_STRING(U16LSB); CHECK_FMT_STRING(U16LSB);
@ -903,8 +863,7 @@ SDL_ParseAudioFormat(const char *string)
return 0; return 0;
} }
int int SDL_GetNumAudioDrivers(void)
SDL_GetNumAudioDrivers(void)
{ {
return SDL_arraysize(bootstrap) - 1; return SDL_arraysize(bootstrap) - 1;
} }
@ -918,8 +877,7 @@ SDL_GetAudioDriver(int index)
return NULL; return NULL;
} }
int int SDL_AudioInit(const char *driver_name)
SDL_AudioInit(const char *driver_name)
{ {
int i; int i;
SDL_bool initialized = SDL_FALSE, tried_to_init = SDL_FALSE; SDL_bool initialized = SDL_FALSE, tried_to_init = SDL_FALSE;
@ -1025,8 +983,7 @@ SDL_GetCurrentAudioDriver()
} }
/* Clean out devices that we've removed but had to keep around for stability. */ /* Clean out devices that we've removed but had to keep around for stability. */
static void static void clean_out_device_list(SDL_AudioDeviceItem **devices, int *devCount, SDL_bool *removedFlag)
clean_out_device_list(SDL_AudioDeviceItem **devices, int *devCount, SDL_bool *removedFlag)
{ {
SDL_AudioDeviceItem *item = *devices; SDL_AudioDeviceItem *item = *devices;
SDL_AudioDeviceItem *prev = NULL; SDL_AudioDeviceItem *prev = NULL;
@ -1057,9 +1014,7 @@ clean_out_device_list(SDL_AudioDeviceItem **devices, int *devCount, SDL_bool *re
*removedFlag = SDL_FALSE; *removedFlag = SDL_FALSE;
} }
int SDL_GetNumAudioDevices(int iscapture)
int
SDL_GetNumAudioDevices(int iscapture)
{ {
int retval = 0; int retval = 0;
@ -1082,7 +1037,6 @@ SDL_GetNumAudioDevices(int iscapture)
return retval; return retval;
} }
const char * const char *
SDL_GetAudioDeviceName(int index, int iscapture) SDL_GetAudioDeviceName(int index, int iscapture)
{ {
@ -1113,9 +1067,7 @@ SDL_GetAudioDeviceName(int index, int iscapture)
return retval; return retval;
} }
int SDL_GetAudioDeviceSpec(int index, int iscapture, SDL_AudioSpec *spec)
int
SDL_GetAudioDeviceSpec(int index, int iscapture, SDL_AudioSpec *spec)
{ {
SDL_AudioDeviceItem *item; SDL_AudioDeviceItem *item;
int i, retval; int i, retval;
@ -1146,9 +1098,7 @@ SDL_GetAudioDeviceSpec(int index, int iscapture, SDL_AudioSpec *spec)
return retval; return retval;
} }
int SDL_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
int
SDL_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
{ {
if (spec == NULL) { if (spec == NULL) {
return SDL_InvalidParamError("spec"); return SDL_InvalidParamError("spec");
@ -1164,9 +1114,7 @@ SDL_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
return current_audio.impl.GetDefaultAudioInfo(name, spec, iscapture); return current_audio.impl.GetDefaultAudioInfo(name, spec, iscapture);
} }
static void close_audio_device(SDL_AudioDevice *device)
static void
close_audio_device(SDL_AudioDevice * device)
{ {
if (!device) { if (!device) {
return; return;
@ -1207,14 +1155,12 @@ close_audio_device(SDL_AudioDevice * device)
SDL_free(device); SDL_free(device);
} }
/* /*
* Sanity check desired AudioSpec for SDL_OpenAudio() in (orig). * Sanity check desired AudioSpec for SDL_OpenAudio() in (orig).
* Fills in a sanitized copy in (prepared). * Fills in a sanitized copy in (prepared).
* Returns non-zero if okay, zero on fatal parameters in (orig). * Returns non-zero if okay, zero on fatal parameters in (orig).
*/ */
static int static int prepare_audiospec(const SDL_AudioSpec *orig, SDL_AudioSpec *prepared)
prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared)
{ {
SDL_copyp(prepared, orig); SDL_copyp(prepared, orig);
@ -1262,8 +1208,7 @@ prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared)
return 1; return 1;
} }
static SDL_AudioDeviceID static SDL_AudioDeviceID open_audio_device(const char *devname, int iscapture,
open_audio_device(const char *devname, int iscapture,
const SDL_AudioSpec *desired, SDL_AudioSpec *obtained, const SDL_AudioSpec *desired, SDL_AudioSpec *obtained,
int allowed_changes, int min_id) int allowed_changes, int min_id)
{ {
@ -1526,9 +1471,7 @@ open_audio_device(const char *devname, int iscapture,
return device->id; return device->id;
} }
int SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained)
int
SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained)
{ {
SDL_AudioDeviceID id = 0; SDL_AudioDeviceID id = 0;
@ -1586,15 +1529,13 @@ SDL_GetAudioDeviceStatus(SDL_AudioDeviceID devid)
return status; return status;
} }
SDL_AudioStatus SDL_AudioStatus
SDL_GetAudioStatus(void) SDL_GetAudioStatus(void)
{ {
return SDL_GetAudioDeviceStatus(1); return SDL_GetAudioDeviceStatus(1);
} }
void void SDL_PauseAudioDevice(SDL_AudioDeviceID devid, int pause_on)
SDL_PauseAudioDevice(SDL_AudioDeviceID devid, int pause_on)
{ {
SDL_AudioDevice *device = get_audio_device(devid); SDL_AudioDevice *device = get_audio_device(devid);
if (device) { if (device) {
@ -1604,15 +1545,12 @@ SDL_PauseAudioDevice(SDL_AudioDeviceID devid, int pause_on)
} }
} }
void void SDL_PauseAudio(int pause_on)
SDL_PauseAudio(int pause_on)
{ {
SDL_PauseAudioDevice(1, pause_on); SDL_PauseAudioDevice(1, pause_on);
} }
void SDL_LockAudioDevice(SDL_AudioDeviceID devid)
void
SDL_LockAudioDevice(SDL_AudioDeviceID devid)
{ {
/* Obtain a lock on the mixing buffers */ /* Obtain a lock on the mixing buffers */
SDL_AudioDevice *device = get_audio_device(devid); SDL_AudioDevice *device = get_audio_device(devid);
@ -1621,14 +1559,12 @@ SDL_LockAudioDevice(SDL_AudioDeviceID devid)
} }
} }
void void SDL_LockAudio(void)
SDL_LockAudio(void)
{ {
SDL_LockAudioDevice(1); SDL_LockAudioDevice(1);
} }
void void SDL_UnlockAudioDevice(SDL_AudioDeviceID devid)
SDL_UnlockAudioDevice(SDL_AudioDeviceID devid)
{ {
/* Obtain a lock on the mixing buffers */ /* Obtain a lock on the mixing buffers */
SDL_AudioDevice *device = get_audio_device(devid); SDL_AudioDevice *device = get_audio_device(devid);
@ -1637,26 +1573,22 @@ SDL_UnlockAudioDevice(SDL_AudioDeviceID devid)
} }
} }
void void SDL_UnlockAudio(void)
SDL_UnlockAudio(void)
{ {
SDL_UnlockAudioDevice(1); SDL_UnlockAudioDevice(1);
} }
void void SDL_CloseAudioDevice(SDL_AudioDeviceID devid)
SDL_CloseAudioDevice(SDL_AudioDeviceID devid)
{ {
close_audio_device(get_audio_device(devid)); close_audio_device(get_audio_device(devid));
} }
void void SDL_CloseAudio(void)
SDL_CloseAudio(void)
{ {
SDL_CloseAudioDevice(1); SDL_CloseAudioDevice(1);
} }
void void SDL_AudioQuit(void)
SDL_AudioQuit(void)
{ {
SDL_AudioDeviceID i; SDL_AudioDeviceID i;
@ -1731,8 +1663,7 @@ SDL_NextAudioFormat(void)
return format_list[format_idx][format_idx_sub++]; return format_list[format_idx][format_idx_sub++];
} }
Uint8 Uint8 SDL_SilenceValueForFormat(const SDL_AudioFormat format)
SDL_SilenceValueForFormat(const SDL_AudioFormat format)
{ {
switch (format) { switch (format) {
/* !!! FIXME: 0x80 isn't perfect for U16, but we can't fit 0x8000 in a /* !!! FIXME: 0x80 isn't perfect for U16, but we can't fit 0x8000 in a
@ -1743,14 +1674,14 @@ SDL_SilenceValueForFormat(const SDL_AudioFormat format)
case AUDIO_U8: case AUDIO_U8:
return 0x80; return 0x80;
default: break; default:
break;
} }
return 0x00; return 0x00;
} }
void void SDL_CalculateAudioSpec(SDL_AudioSpec *spec)
SDL_CalculateAudioSpec(SDL_AudioSpec * spec)
{ {
spec->silence = SDL_SilenceValueForFormat(spec->format); spec->silence = SDL_SilenceValueForFormat(spec->format);
spec->size = SDL_AUDIO_BITSIZE(spec->format) / 8; spec->size = SDL_AUDIO_BITSIZE(spec->format) / 8;
@ -1758,13 +1689,11 @@ SDL_CalculateAudioSpec(SDL_AudioSpec * spec)
spec->size *= spec->samples; spec->size *= spec->samples;
} }
/* /*
* Moved here from SDL_mixer.c, since it relies on internals of an opened * Moved here from SDL_mixer.c, since it relies on internals of an opened
* audio device (and is deprecated, by the way!). * audio device (and is deprecated, by the way!).
*/ */
void void SDL_MixAudio(Uint8 *dst, const Uint8 *src, Uint32 len, int volume)
SDL_MixAudio(Uint8 * dst, const Uint8 * src, Uint32 len, int volume)
{ {
/* Mix the user-level audio format */ /* Mix the user-level audio format */
SDL_AudioDevice *device = get_audio_device(1); SDL_AudioDevice *device = get_audio_device(1);

View File

@ -21,8 +21,7 @@
/* 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 */
static void SDLCALL static void SDLCALL SDL_ConvertMonoToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertMonoToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 2))) - 2; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 2))) - 2;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1;
@ -44,8 +43,7 @@ SDL_ConvertMonoToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertMonoTo21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertMonoTo21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 3))) - 3; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 3))) - 3;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1;
@ -68,8 +66,7 @@ SDL_ConvertMonoTo21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertMonoToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertMonoToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 4))) - 4; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 4))) - 4;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1;
@ -93,8 +90,7 @@ SDL_ConvertMonoToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertMonoTo41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertMonoTo41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 5))) - 5; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 5))) - 5;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1;
@ -119,8 +115,7 @@ SDL_ConvertMonoTo41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertMonoTo51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertMonoTo51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 6))) - 6; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 6))) - 6;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1;
@ -146,8 +141,7 @@ SDL_ConvertMonoTo51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertMonoTo61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertMonoTo61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 7))) - 7; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 7))) - 7;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1;
@ -174,8 +168,7 @@ SDL_ConvertMonoTo61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertMonoTo71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertMonoTo71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 8))) - 8; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 1) * 8))) - 8;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 1;
@ -203,8 +196,7 @@ SDL_ConvertMonoTo71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertStereoToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertStereoToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -223,8 +215,7 @@ SDL_ConvertStereoToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertStereoTo21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertStereoTo21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 3))) - 3; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 3))) - 3;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2;
@ -246,8 +237,7 @@ SDL_ConvertStereoTo21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertStereoToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertStereoToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 4))) - 4; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 4))) - 4;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2;
@ -270,8 +260,7 @@ SDL_ConvertStereoToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertStereoTo41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertStereoTo41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 5))) - 5; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 5))) - 5;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2;
@ -295,8 +284,7 @@ SDL_ConvertStereoTo41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertStereoTo51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertStereoTo51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 6))) - 6; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 6))) - 6;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2;
@ -321,8 +309,7 @@ SDL_ConvertStereoTo51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertStereoTo61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertStereoTo61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 7))) - 7; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 7))) - 7;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2;
@ -348,8 +335,7 @@ SDL_ConvertStereoTo61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertStereoTo71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertStereoTo71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 8))) - 8; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 2) * 8))) - 8;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 2;
@ -376,8 +362,7 @@ SDL_ConvertStereoTo71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert21ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert21ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -396,8 +381,7 @@ SDL_Convert21ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert21ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert21ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -418,8 +402,7 @@ SDL_Convert21ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert21ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert21ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 4))) - 4; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 4))) - 4;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3;
@ -443,8 +426,7 @@ SDL_Convert21ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert21To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert21To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 5))) - 5; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 5))) - 5;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3;
@ -468,8 +450,7 @@ SDL_Convert21To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert21To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert21To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 6))) - 6; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 6))) - 6;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3;
@ -494,8 +475,7 @@ SDL_Convert21To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert21To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert21To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 7))) - 7; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 7))) - 7;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3;
@ -521,8 +501,7 @@ SDL_Convert21To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert21To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert21To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 8))) - 8; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 3) * 8))) - 8;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 3;
@ -549,8 +528,7 @@ SDL_Convert21To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertQuadToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertQuadToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -569,8 +547,7 @@ SDL_ConvertQuadToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertQuadToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertQuadToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -592,8 +569,7 @@ SDL_ConvertQuadToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertQuadTo21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertQuadTo21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -616,8 +592,7 @@ SDL_ConvertQuadTo21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertQuadTo41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertQuadTo41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 4) * 5))) - 5; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 4) * 5))) - 5;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4;
@ -641,8 +616,7 @@ SDL_ConvertQuadTo41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertQuadTo51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertQuadTo51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 4) * 6))) - 6; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 4) * 6))) - 6;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4;
@ -667,8 +641,7 @@ SDL_ConvertQuadTo51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertQuadTo61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertQuadTo61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 4) * 7))) - 7; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 4) * 7))) - 7;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4;
@ -696,8 +669,7 @@ SDL_ConvertQuadTo61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_ConvertQuadTo71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertQuadTo71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 4) * 8))) - 8; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 4) * 8))) - 8;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4;
@ -724,8 +696,7 @@ SDL_ConvertQuadTo71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert41ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert41ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -744,8 +715,7 @@ SDL_Convert41ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert41ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert41ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -768,8 +738,7 @@ SDL_Convert41ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert41To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert41To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -792,8 +761,7 @@ SDL_Convert41To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert41ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert41ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -816,8 +784,7 @@ SDL_Convert41ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert41To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert41To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 5) * 6))) - 6; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 5) * 6))) - 6;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 5; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 5;
@ -842,8 +809,7 @@ SDL_Convert41To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert41To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert41To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 5) * 7))) - 7; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 5) * 7))) - 7;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 5; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 5;
@ -871,8 +837,7 @@ SDL_Convert41To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert41To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert41To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 5) * 8))) - 8; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 5) * 8))) - 8;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 5; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 5;
@ -899,8 +864,7 @@ SDL_Convert41To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert51ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert51ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -919,8 +883,7 @@ SDL_Convert51ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert51ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert51ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -944,8 +907,7 @@ SDL_Convert51ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert51To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert51To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -969,8 +931,7 @@ SDL_Convert51To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert51ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert51ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -994,8 +955,7 @@ SDL_Convert51ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert51To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert51To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1019,8 +979,7 @@ SDL_Convert51To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert51To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert51To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 6) * 7))) - 7; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 6) * 7))) - 7;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 6; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 6;
@ -1048,8 +1007,7 @@ SDL_Convert51To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert51To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert51To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 6) * 8))) - 8; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 6) * 8))) - 8;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 6; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 6;
@ -1076,8 +1034,7 @@ SDL_Convert51To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert61ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert61ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1096,8 +1053,7 @@ SDL_Convert61ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert61ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert61ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1122,8 +1078,7 @@ SDL_Convert61ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert61To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert61To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1148,8 +1103,7 @@ SDL_Convert61To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert61ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert61ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1176,8 +1130,7 @@ SDL_Convert61ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert61To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert61To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1204,8 +1157,7 @@ SDL_Convert61To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert61To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert61To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1232,8 +1184,7 @@ SDL_Convert61To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert61To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert61To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 7) * 8))) - 8; float *dst = ((float *)(cvt->buf + ((cvt->len_cvt / 7) * 8))) - 8;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 7; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 7;
@ -1261,8 +1212,7 @@ SDL_Convert61To71(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert71ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert71ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1281,8 +1231,7 @@ SDL_Convert71ToMono(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert71ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert71ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1308,8 +1257,7 @@ SDL_Convert71ToStereo(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert71To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert71To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1335,8 +1283,7 @@ SDL_Convert71To21(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert71ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert71ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1362,8 +1309,7 @@ SDL_Convert71ToQuad(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert71To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert71To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1389,8 +1335,7 @@ SDL_Convert71To41(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert71To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert71To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1416,8 +1361,7 @@ SDL_Convert71To51(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert71To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert71To61(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
const float *src = dst; const float *src = dst;
@ -1456,4 +1400,3 @@ static const SDL_AudioFilter channel_converters[8][8] = { /* [from][to] */
}; };
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1059,4 +1059,3 @@ static const float ResamplerFilterDifference[RESAMPLER_FILTER_SIZE] = {
}; };
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -91,8 +91,7 @@
#if HAVE_SSE3_INTRINSICS #if HAVE_SSE3_INTRINSICS
/* Convert from stereo to mono. Average left and right. */ /* Convert from stereo to mono. Average left and right. */
static void SDLCALL static void SDLCALL SDL_ConvertStereoToMono_SSE3(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertStereoToMono_SSE3(SDL_AudioCVT * cvt, SDL_AudioFormat format)
{ {
const __m128 divby2 = _mm_set1_ps(0.5f); const __m128 divby2 = _mm_set1_ps(0.5f);
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
@ -107,13 +106,17 @@ SDL_ConvertStereoToMono_SSE3(SDL_AudioCVT * cvt, SDL_AudioFormat format)
aligned it'll be just as fast on modern processors */ aligned it'll be just as fast on modern processors */
while (i >= 4) { /* 4 * float32 */ while (i >= 4) { /* 4 * float32 */
_mm_storeu_ps(dst, _mm_mul_ps(_mm_hadd_ps(_mm_loadu_ps(src), _mm_loadu_ps(src + 4)), divby2)); _mm_storeu_ps(dst, _mm_mul_ps(_mm_hadd_ps(_mm_loadu_ps(src), _mm_loadu_ps(src + 4)), divby2));
i -= 4; src += 8; dst += 4; i -= 4;
src += 8;
dst += 4;
} }
/* Finish off any leftovers with scalar operations. */ /* Finish off any leftovers with scalar operations. */
while (i) { while (i) {
*dst = (src[0] + src[1]) * 0.5f; *dst = (src[0] + src[1]) * 0.5f;
dst++; i--; src += 2; dst++;
i--;
src += 2;
} }
cvt->len_cvt /= 2; cvt->len_cvt /= 2;
@ -125,8 +128,7 @@ SDL_ConvertStereoToMono_SSE3(SDL_AudioCVT * cvt, SDL_AudioFormat format)
#if HAVE_SSE_INTRINSICS #if HAVE_SSE_INTRINSICS
/* Convert from mono to stereo. Duplicate to stereo left and right. */ /* Convert from mono to stereo. Duplicate to stereo left and right. */
static void SDLCALL static void SDLCALL SDL_ConvertMonoToStereo_SSE(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_ConvertMonoToStereo_SSE(SDL_AudioCVT * cvt, SDL_AudioFormat format)
{ {
float *dst = ((float *)(cvt->buf + (cvt->len_cvt * 2))) - 8; float *dst = ((float *)(cvt->buf + (cvt->len_cvt * 2))) - 8;
const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4; const float *src = ((const float *)(cvt->buf + cvt->len_cvt)) - 4;
@ -143,16 +145,21 @@ SDL_ConvertMonoToStereo_SSE(SDL_AudioCVT * cvt, SDL_AudioFormat format)
const __m128 input = _mm_loadu_ps(src); /* A B C D */ const __m128 input = _mm_loadu_ps(src); /* A B C D */
_mm_storeu_ps(dst, _mm_unpacklo_ps(input, input)); /* A A B B */ _mm_storeu_ps(dst, _mm_unpacklo_ps(input, input)); /* A A B B */
_mm_storeu_ps(dst + 4, _mm_unpackhi_ps(input, input)); /* C C D D */ _mm_storeu_ps(dst + 4, _mm_unpackhi_ps(input, input)); /* C C D D */
i -= 4; src -= 4; dst -= 8; i -= 4;
src -= 4;
dst -= 8;
} }
/* Finish off any leftovers with scalar operations. */ /* Finish off any leftovers with scalar operations. */
src += 3; dst += 6; /* adjust for smaller buffers. */ src += 3;
dst += 6; /* adjust for smaller buffers. */
while (i) { /* convert backwards, since output is growing in-place. */ while (i) { /* convert backwards, since output is growing in-place. */
const float srcFC = src[0]; const float srcFC = src[0];
dst[1] /* FR */ = srcFC; dst[1] /* FR */ = srcFC;
dst[0] /* FL */ = srcFC; dst[0] /* FL */ = srcFC;
i--; src--; dst -= 2; i--;
src--;
dst -= 2;
} }
cvt->len_cvt *= 2; cvt->len_cvt *= 2;
@ -162,19 +169,15 @@ SDL_ConvertMonoToStereo_SSE(SDL_AudioCVT * cvt, SDL_AudioFormat format)
} }
#endif #endif
/* Include the autogenerated channel converters... */ /* Include the autogenerated channel converters... */
#include "SDL_audio_channel_converters.h" #include "SDL_audio_channel_converters.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"
static int static int ResamplerPadding(const int inrate, const int outrate)
ResamplerPadding(const int inrate, const int outrate)
{ {
if (inrate == outrate) { if (inrate == outrate) {
return 0; return 0;
@ -186,8 +189,7 @@ ResamplerPadding(const int inrate, const int outrate)
} }
/* lpadding and rpadding are expected to be buffers of (ResamplePadding(inrate, outrate) * chans * sizeof (float)) bytes. */ /* lpadding and rpadding are expected to be buffers of (ResamplePadding(inrate, outrate) * chans * sizeof (float)) bytes. */
static int static int SDL_ResampleAudio(const int chans, const int inrate, const int outrate,
SDL_ResampleAudio(const int chans, const int inrate, const int outrate,
const float *lpadding, const float *rpadding, const float *lpadding, const float *rpadding,
const float *inbuf, const int inbuflen, const float *inbuf, const int inbuflen,
float *outbuf, const int outbuflen) float *outbuf, const int outbuflen)
@ -248,8 +250,7 @@ SDL_ResampleAudio(const int chans, const int inrate, const int outrate,
return outframes * chans * sizeof(float); return outframes * chans * sizeof(float);
} }
int int SDL_ConvertAudio(SDL_AudioCVT *cvt)
SDL_ConvertAudio(SDL_AudioCVT * cvt)
{ {
/* !!! FIXME: (cvt) should be const; stack-copy it here. */ /* !!! FIXME: (cvt) should be const; stack-copy it here. */
/* !!! FIXME: (actually, we can't...len_cvt needs to be updated. Grr.) */ /* !!! FIXME: (actually, we can't...len_cvt needs to be updated. Grr.) */
@ -271,8 +272,7 @@ SDL_ConvertAudio(SDL_AudioCVT * cvt)
return 0; return 0;
} }
static void SDLCALL static void SDLCALL SDL_Convert_Byteswap(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_Byteswap(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
#if DEBUG_CONVERT #if DEBUG_CONVERT
SDL_Log("SDL_AUDIO_CONVERT: Converting byte order\n"); SDL_Log("SDL_AUDIO_CONVERT: Converting byte order\n");
@ -280,7 +280,8 @@ SDL_Convert_Byteswap(SDL_AudioCVT *cvt, SDL_AudioFormat format)
switch (SDL_AUDIO_BITSIZE(format)) { switch (SDL_AUDIO_BITSIZE(format)) {
#define CASESWAP(b) \ #define CASESWAP(b) \
case b: { \ case b: \
{ \
Uint##b *ptr = (Uint##b *)cvt->buf; \ Uint##b *ptr = (Uint##b *)cvt->buf; \
int i; \ int i; \
for (i = cvt->len_cvt / sizeof(*ptr); i; --i, ++ptr) { \ for (i = cvt->len_cvt / sizeof(*ptr); i; --i, ++ptr) { \
@ -295,7 +296,9 @@ SDL_Convert_Byteswap(SDL_AudioCVT *cvt, SDL_AudioFormat format)
#undef CASESWAP #undef CASESWAP
default: SDL_assert(!"unhandled byteswap datatype!"); break; default:
SDL_assert(!"unhandled byteswap datatype!");
break;
} }
if (cvt->filters[++cvt->filter_index]) { if (cvt->filters[++cvt->filter_index]) {
@ -309,8 +312,7 @@ SDL_Convert_Byteswap(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static int static int SDL_AddAudioCVTFilter(SDL_AudioCVT *cvt, const SDL_AudioFilter filter)
SDL_AddAudioCVTFilter(SDL_AudioCVT *cvt, const SDL_AudioFilter filter)
{ {
if (cvt->filter_index >= SDL_AUDIOCVT_MAX_FILTERS) { if (cvt->filter_index >= SDL_AUDIOCVT_MAX_FILTERS) {
return SDL_SetError("Too many filters needed for conversion, exceeded maximum of %d", SDL_AUDIOCVT_MAX_FILTERS); return SDL_SetError("Too many filters needed for conversion, exceeded maximum of %d", SDL_AUDIOCVT_MAX_FILTERS);
@ -321,8 +323,7 @@ SDL_AddAudioCVTFilter(SDL_AudioCVT *cvt, const SDL_AudioFilter filter)
return 0; return 0;
} }
static int static int SDL_BuildAudioTypeCVTToFloat(SDL_AudioCVT *cvt, const SDL_AudioFormat src_fmt)
SDL_BuildAudioTypeCVTToFloat(SDL_AudioCVT *cvt, const SDL_AudioFormat src_fmt)
{ {
int retval = 0; /* 0 == no conversion necessary. */ int retval = 0; /* 0 == no conversion necessary. */
@ -339,12 +340,24 @@ SDL_BuildAudioTypeCVTToFloat(SDL_AudioCVT *cvt, const SDL_AudioFormat src_fmt)
SDL_AudioFilter filter = NULL; SDL_AudioFilter filter = NULL;
switch (src_fmt & ~SDL_AUDIO_MASK_ENDIAN) { switch (src_fmt & ~SDL_AUDIO_MASK_ENDIAN) {
case AUDIO_S8: filter = SDL_Convert_S8_to_F32; break; case AUDIO_S8:
case AUDIO_U8: filter = SDL_Convert_U8_to_F32; break; filter = SDL_Convert_S8_to_F32;
case AUDIO_S16: filter = SDL_Convert_S16_to_F32; break; break;
case AUDIO_U16: filter = SDL_Convert_U16_to_F32; break; case AUDIO_U8:
case AUDIO_S32: filter = SDL_Convert_S32_to_F32; break; filter = SDL_Convert_U8_to_F32;
default: SDL_assert(!"Unexpected audio format!"); break; break;
case AUDIO_S16:
filter = SDL_Convert_S16_to_F32;
break;
case AUDIO_U16:
filter = SDL_Convert_U16_to_F32;
break;
case AUDIO_S32:
filter = SDL_Convert_S32_to_F32;
break;
default:
SDL_assert(!"Unexpected audio format!");
break;
} }
if (!filter) { if (!filter) {
@ -368,8 +381,7 @@ SDL_BuildAudioTypeCVTToFloat(SDL_AudioCVT *cvt, const SDL_AudioFormat src_fmt)
return retval; return retval;
} }
static int static int SDL_BuildAudioTypeCVTFromFloat(SDL_AudioCVT *cvt, const SDL_AudioFormat dst_fmt)
SDL_BuildAudioTypeCVTFromFloat(SDL_AudioCVT *cvt, const SDL_AudioFormat dst_fmt)
{ {
int retval = 0; /* 0 == no conversion necessary. */ int retval = 0; /* 0 == no conversion necessary. */
@ -378,12 +390,24 @@ SDL_BuildAudioTypeCVTFromFloat(SDL_AudioCVT *cvt, const SDL_AudioFormat dst_fmt)
const Uint16 src_bitsize = 32; const Uint16 src_bitsize = 32;
SDL_AudioFilter filter = NULL; SDL_AudioFilter filter = NULL;
switch (dst_fmt & ~SDL_AUDIO_MASK_ENDIAN) { switch (dst_fmt & ~SDL_AUDIO_MASK_ENDIAN) {
case AUDIO_S8: filter = SDL_Convert_F32_to_S8; break; case AUDIO_S8:
case AUDIO_U8: filter = SDL_Convert_F32_to_U8; break; filter = SDL_Convert_F32_to_S8;
case AUDIO_S16: filter = SDL_Convert_F32_to_S16; break; break;
case AUDIO_U16: filter = SDL_Convert_F32_to_U16; break; case AUDIO_U8:
case AUDIO_S32: filter = SDL_Convert_F32_to_S32; break; filter = SDL_Convert_F32_to_U8;
default: SDL_assert(!"Unexpected audio format!"); break; break;
case AUDIO_S16:
filter = SDL_Convert_F32_to_S16;
break;
case AUDIO_U16:
filter = SDL_Convert_F32_to_U16;
break;
case AUDIO_S32:
filter = SDL_Convert_F32_to_S32;
break;
default:
SDL_assert(!"Unexpected audio format!");
break;
} }
if (!filter) { if (!filter) {
@ -416,8 +440,7 @@ SDL_BuildAudioTypeCVTFromFloat(SDL_AudioCVT *cvt, const SDL_AudioFormat dst_fmt)
#ifdef HAVE_LIBSAMPLERATE_H #ifdef HAVE_LIBSAMPLERATE_H
static void static void SDL_ResampleCVT_SRC(SDL_AudioCVT *cvt, const int chans, const SDL_AudioFormat format)
SDL_ResampleCVT_SRC(SDL_AudioCVT *cvt, const int chans, const SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
const int srclen = cvt->len_cvt; const int srclen = cvt->len_cvt;
@ -456,8 +479,7 @@ SDL_ResampleCVT_SRC(SDL_AudioCVT *cvt, const int chans, const SDL_AudioFormat fo
#endif /* HAVE_LIBSAMPLERATE_H */ #endif /* HAVE_LIBSAMPLERATE_H */
static void static void SDL_ResampleCVT(SDL_AudioCVT *cvt, const int chans, const SDL_AudioFormat format)
SDL_ResampleCVT(SDL_AudioCVT *cvt, const int chans, const SDL_AudioFormat format)
{ {
/* !!! FIXME in 2.1: there are ten slots in the filter list, and the theoretical maximum we use is six (seven with NULL terminator). /* !!! FIXME in 2.1: there are ten slots in the filter list, and the theoretical maximum we use is six (seven with NULL terminator).
!!! FIXME in 2.1: We need to store data for this resampler, because the cvt structure doesn't store the original sample rates, !!! FIXME in 2.1: We need to store data for this resampler, because the cvt structure doesn't store the original sample rates,
@ -506,7 +528,8 @@ SDL_ResampleCVT(SDL_AudioCVT *cvt, const int chans, const SDL_AudioFormat format
!!! FIXME: vs arbitrary. When we rev the ABI, clean this up. */ !!! FIXME: vs arbitrary. When we rev the ABI, clean this up. */
#define RESAMPLER_FUNCS(chans) \ #define RESAMPLER_FUNCS(chans) \
static void SDLCALL \ static void SDLCALL \
SDL_ResampleCVT_c##chans(SDL_AudioCVT *cvt, SDL_AudioFormat format) { \ SDL_ResampleCVT_c##chans(SDL_AudioCVT *cvt, SDL_AudioFormat format) \
{ \
SDL_ResampleCVT(cvt, chans, format); \ SDL_ResampleCVT(cvt, chans, format); \
} }
RESAMPLER_FUNCS(1) RESAMPLER_FUNCS(1)
@ -519,7 +542,8 @@ RESAMPLER_FUNCS(8)
#ifdef HAVE_LIBSAMPLERATE_H #ifdef HAVE_LIBSAMPLERATE_H
#define RESAMPLER_FUNCS(chans) \ #define RESAMPLER_FUNCS(chans) \
static void SDLCALL \ static void SDLCALL \
SDL_ResampleCVT_SRC_c##chans(SDL_AudioCVT *cvt, SDL_AudioFormat format) { \ SDL_ResampleCVT_SRC_c##chans(SDL_AudioCVT *cvt, SDL_AudioFormat format) \
{ \
SDL_ResampleCVT_SRC(cvt, chans, format); \ SDL_ResampleCVT_SRC(cvt, chans, format); \
} }
RESAMPLER_FUNCS(1) RESAMPLER_FUNCS(1)
@ -530,36 +554,46 @@ RESAMPLER_FUNCS(8)
#undef RESAMPLER_FUNCS #undef RESAMPLER_FUNCS
#endif /* HAVE_LIBSAMPLERATE_H */ #endif /* HAVE_LIBSAMPLERATE_H */
static SDL_AudioFilter static SDL_AudioFilter ChooseCVTResampler(const int dst_channels)
ChooseCVTResampler(const int dst_channels)
{ {
#ifdef HAVE_LIBSAMPLERATE_H #ifdef HAVE_LIBSAMPLERATE_H
if (SRC_available) { if (SRC_available) {
switch (dst_channels) { switch (dst_channels) {
case 1: return SDL_ResampleCVT_SRC_c1; case 1:
case 2: return SDL_ResampleCVT_SRC_c2; return SDL_ResampleCVT_SRC_c1;
case 4: return SDL_ResampleCVT_SRC_c4; case 2:
case 6: return SDL_ResampleCVT_SRC_c6; return SDL_ResampleCVT_SRC_c2;
case 8: return SDL_ResampleCVT_SRC_c8; case 4:
default: break; return SDL_ResampleCVT_SRC_c4;
case 6:
return SDL_ResampleCVT_SRC_c6;
case 8:
return SDL_ResampleCVT_SRC_c8;
default:
break;
} }
} }
#endif /* HAVE_LIBSAMPLERATE_H */ #endif /* HAVE_LIBSAMPLERATE_H */
switch (dst_channels) { switch (dst_channels) {
case 1: return SDL_ResampleCVT_c1; case 1:
case 2: return SDL_ResampleCVT_c2; return SDL_ResampleCVT_c1;
case 4: return SDL_ResampleCVT_c4; case 2:
case 6: return SDL_ResampleCVT_c6; return SDL_ResampleCVT_c2;
case 8: return SDL_ResampleCVT_c8; case 4:
default: break; return SDL_ResampleCVT_c4;
case 6:
return SDL_ResampleCVT_c6;
case 8:
return SDL_ResampleCVT_c8;
default:
break;
} }
return NULL; return NULL;
} }
static int static int SDL_BuildAudioResampleCVT(SDL_AudioCVT *cvt, const int dst_channels,
SDL_BuildAudioResampleCVT(SDL_AudioCVT * cvt, const int dst_channels,
const int src_rate, const int dst_rate) const int src_rate, const int dst_rate)
{ {
SDL_AudioFilter filter; SDL_AudioFilter filter;
@ -603,8 +637,7 @@ SDL_BuildAudioResampleCVT(SDL_AudioCVT * cvt, const int dst_channels,
return 1; /* added a converter. */ return 1; /* added a converter. */
} }
static SDL_bool static SDL_bool SDL_SupportedAudioFormat(const SDL_AudioFormat fmt)
SDL_SupportedAudioFormat(const SDL_AudioFormat fmt)
{ {
switch (fmt) { switch (fmt) {
case AUDIO_U8: case AUDIO_U8:
@ -626,20 +659,17 @@ SDL_SupportedAudioFormat(const SDL_AudioFormat fmt)
return SDL_FALSE; /* unsupported. */ return SDL_FALSE; /* unsupported. */
} }
static SDL_bool static SDL_bool SDL_SupportedChannelCount(const int channels)
SDL_SupportedChannelCount(const int channels)
{ {
return ((channels >= 1) && (channels <= 8)) ? SDL_TRUE : SDL_FALSE; return ((channels >= 1) && (channels <= 8)) ? SDL_TRUE : SDL_FALSE;
} }
/* Creates a set of audio filters to convert from one format to another. /* Creates a set of audio filters to convert from one format to another.
Returns 0 if no conversion is needed, 1 if the audio filter is set up, Returns 0 if no conversion is needed, 1 if the audio filter is set up,
or -1 if an error like invalid parameter, unsupported format, etc. occurred. or -1 if an error like invalid parameter, unsupported format, etc. occurred.
*/ */
int int SDL_BuildAudioCVT(SDL_AudioCVT *cvt,
SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
SDL_AudioFormat src_fmt, Uint8 src_channels, int src_rate, SDL_AudioFormat src_fmt, Uint8 src_channels, int src_rate,
SDL_AudioFormat dst_fmt, Uint8 dst_channels, int dst_rate) SDL_AudioFormat dst_fmt, Uint8 dst_channels, int dst_rate)
{ {
@ -734,7 +764,6 @@ SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
return -1; /* shouldn't happen, but just in case... */ return -1; /* shouldn't happen, but just in case... */
} }
/* Channel conversion */ /* Channel conversion */
/* SDL_SupportedChannelCount should have caught these asserts, or we added a new format and forgot to update the table. */ /* SDL_SupportedChannelCount should have caught these asserts, or we added a new format and forgot to update the table. */
@ -750,15 +779,23 @@ SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
if (channel_converter == SDL_ConvertStereoToMono) { if (channel_converter == SDL_ConvertStereoToMono) {
SDL_AudioFilter filter = NULL; SDL_AudioFilter filter = NULL;
#if HAVE_SSE3_INTRINSICS #if HAVE_SSE3_INTRINSICS
if (!filter && SDL_HasSSE3()) { filter = SDL_ConvertStereoToMono_SSE3; } if (!filter && SDL_HasSSE3()) {
filter = SDL_ConvertStereoToMono_SSE3;
}
#endif #endif
if (filter) { channel_converter = filter; } if (filter) {
channel_converter = filter;
}
} else if (channel_converter == SDL_ConvertMonoToStereo) { } else if (channel_converter == SDL_ConvertMonoToStereo) {
SDL_AudioFilter filter = NULL; SDL_AudioFilter filter = NULL;
#if HAVE_SSE_INTRINSICS #if HAVE_SSE_INTRINSICS
if (!filter && SDL_HasSSE()) { filter = SDL_ConvertMonoToStereo_SSE; } if (!filter && SDL_HasSSE()) {
filter = SDL_ConvertMonoToStereo_SSE;
}
#endif #endif
if (filter) { channel_converter = filter; } if (filter) {
channel_converter = filter;
}
} }
if (SDL_AddAudioCVTFilter(cvt, channel_converter) < 0) { if (SDL_AddAudioCVTFilter(cvt, channel_converter) < 0) {
@ -821,8 +858,7 @@ struct _SDL_AudioStream
SDL_CleanupAudioStreamResamplerFunc cleanup_resampler_func; SDL_CleanupAudioStreamResamplerFunc cleanup_resampler_func;
}; };
static Uint8 * static Uint8 *EnsureStreamBufferSize(SDL_AudioStream *stream, const int newlen)
EnsureStreamBufferSize(SDL_AudioStream *stream, const int newlen)
{ {
Uint8 *ptr; Uint8 *ptr;
size_t offset; size_t offset;
@ -845,8 +881,7 @@ EnsureStreamBufferSize(SDL_AudioStream *stream, const int newlen)
} }
#ifdef HAVE_LIBSAMPLERATE_H #ifdef HAVE_LIBSAMPLERATE_H
static int static int SDL_ResampleAudioStream_SRC(SDL_AudioStream *stream, const void *_inbuf, const int inbuflen, void *_outbuf, const int outbuflen)
SDL_ResampleAudioStream_SRC(SDL_AudioStream *stream, const void *_inbuf, const int inbuflen, void *_outbuf, const int outbuflen)
{ {
const float *inbuf = (const float *)_inbuf; const float *inbuf = (const float *)_inbuf;
float *outbuf = (float *)_outbuf; float *outbuf = (float *)_outbuf;
@ -879,14 +914,12 @@ SDL_ResampleAudioStream_SRC(SDL_AudioStream *stream, const void *_inbuf, const i
return data.output_frames_gen * (sizeof(float) * stream->pre_resample_channels); return data.output_frames_gen * (sizeof(float) * stream->pre_resample_channels);
} }
static void static void SDL_ResetAudioStreamResampler_SRC(SDL_AudioStream *stream)
SDL_ResetAudioStreamResampler_SRC(SDL_AudioStream *stream)
{ {
SRC_src_reset((SRC_STATE *)stream->resampler_state); SRC_src_reset((SRC_STATE *)stream->resampler_state);
} }
static void static void SDL_CleanupAudioStreamResampler_SRC(SDL_AudioStream *stream)
SDL_CleanupAudioStreamResampler_SRC(SDL_AudioStream *stream)
{ {
SRC_STATE *state = (SRC_STATE *)stream->resampler_state; SRC_STATE *state = (SRC_STATE *)stream->resampler_state;
if (state) { if (state) {
@ -899,8 +932,7 @@ SDL_CleanupAudioStreamResampler_SRC(SDL_AudioStream *stream)
stream->cleanup_resampler_func = NULL; stream->cleanup_resampler_func = NULL;
} }
static SDL_bool static SDL_bool SetupLibSampleRateResampling(SDL_AudioStream *stream)
SetupLibSampleRateResampling(SDL_AudioStream *stream)
{ {
int result = 0; int result = 0;
SRC_STATE *state = NULL; SRC_STATE *state = NULL;
@ -926,9 +958,7 @@ SetupLibSampleRateResampling(SDL_AudioStream *stream)
} }
#endif /* HAVE_LIBSAMPLERATE_H */ #endif /* HAVE_LIBSAMPLERATE_H */
static int SDL_ResampleAudioStream(SDL_AudioStream *stream, const void *_inbuf, const int inbuflen, void *_outbuf, const int outbuflen)
static int
SDL_ResampleAudioStream(SDL_AudioStream *stream, const void *_inbuf, const int inbuflen, void *_outbuf, const int outbuflen)
{ {
const Uint8 *inbufend = ((const Uint8 *)_inbuf) + inbuflen; const Uint8 *inbufend = ((const Uint8 *)_inbuf) + inbuflen;
const float *inbuf = (const float *)_inbuf; const float *inbuf = (const float *)_inbuf;
@ -952,16 +982,14 @@ SDL_ResampleAudioStream(SDL_AudioStream *stream, const void *_inbuf, const int i
return retval; return retval;
} }
static void static void SDL_ResetAudioStreamResampler(SDL_AudioStream *stream)
SDL_ResetAudioStreamResampler(SDL_AudioStream *stream)
{ {
/* set all the padding to silence. */ /* set all the padding to silence. */
const int len = stream->resampler_padding_samples; const int len = stream->resampler_padding_samples;
SDL_memset(stream->resampler_state, '\0', len * sizeof(float)); SDL_memset(stream->resampler_state, '\0', len * sizeof(float));
} }
static void static void SDL_CleanupAudioStreamResampler(SDL_AudioStream *stream)
SDL_CleanupAudioStreamResampler(SDL_AudioStream *stream)
{ {
SDL_free(stream->resampler_state); SDL_free(stream->resampler_state);
} }
@ -1069,8 +1097,7 @@ SDL_NewAudioStream(const SDL_AudioFormat src_format,
return retval; return retval;
} }
static int static int SDL_AudioStreamPutInternal(SDL_AudioStream *stream, const void *buf, int len, int *maxputbytes)
SDL_AudioStreamPutInternal(SDL_AudioStream *stream, const void *buf, int len, int *maxputbytes)
{ {
int buflen = len; int buflen = len;
int workbuflen; int workbuflen;
@ -1199,8 +1226,7 @@ SDL_AudioStreamPutInternal(SDL_AudioStream *stream, const void *buf, int len, in
return buflen ? SDL_WriteToDataQueue(stream->queue, resamplebuf, buflen) : 0; return buflen ? SDL_WriteToDataQueue(stream->queue, resamplebuf, buflen) : 0;
} }
int int SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len)
SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len)
{ {
/* !!! FIXME: several converters can take advantage of SIMD, but only /* !!! FIXME: several converters can take advantage of SIMD, but only
!!! FIXME: if the data is aligned to 16 bytes. EnsureStreamBufferSize() !!! FIXME: if the data is aligned to 16 bytes. EnsureStreamBufferSize()
@ -1321,8 +1347,7 @@ int SDL_AudioStreamFlush(SDL_AudioStream *stream)
} }
/* get converted/resampled data from the stream */ /* get converted/resampled data from the stream */
int int SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len)
SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len)
{ {
#if DEBUG_AUDIOSTREAM #if DEBUG_AUDIOSTREAM
SDL_Log("AUDIOSTREAM: want to get %d converted bytes\n", len); SDL_Log("AUDIOSTREAM: want to get %d converted bytes\n", len);
@ -1345,14 +1370,12 @@ SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len)
} }
/* number of converted/resampled bytes available */ /* number of converted/resampled bytes available */
int int SDL_AudioStreamAvailable(SDL_AudioStream *stream)
SDL_AudioStreamAvailable(SDL_AudioStream *stream)
{ {
return stream ? (int)SDL_CountDataQueue(stream->queue) : 0; return stream ? (int)SDL_CountDataQueue(stream->queue) : 0;
} }
void void SDL_AudioStreamClear(SDL_AudioStream *stream)
SDL_AudioStreamClear(SDL_AudioStream *stream)
{ {
if (stream == NULL) { if (stream == NULL) {
SDL_InvalidParamError("stream"); SDL_InvalidParamError("stream");
@ -1367,8 +1390,7 @@ SDL_AudioStreamClear(SDL_AudioStream *stream)
} }
/* dispose of a stream */ /* dispose of a stream */
void void SDL_FreeAudioStream(SDL_AudioStream *stream)
SDL_FreeAudioStream(SDL_AudioStream *stream)
{ {
if (stream) { if (stream) {
if (stream->cleanup_resampler_func) { if (stream->cleanup_resampler_func) {

View File

@ -45,8 +45,7 @@
#define _PATH_DEV_AUDIO "/dev/audio" #define _PATH_DEV_AUDIO "/dev/audio"
#endif #endif
static void static void test_device(const int iscapture, const char *fname, int flags, int (*test)(int fd))
test_device(const int iscapture, const char *fname, int flags, int (*test) (int fd))
{ {
struct stat sb; struct stat sb;
if ((stat(fname, &sb) == 0) && (S_ISCHR(sb.st_mode))) { if ((stat(fname, &sb) == 0) && (S_ISCHR(sb.st_mode))) {
@ -70,14 +69,12 @@ test_device(const int iscapture, const char *fname, int flags, int (*test) (int
} }
} }
static int static int test_stub(int fd)
test_stub(int fd)
{ {
return 1; return 1;
} }
static void static void SDL_EnumUnixAudioDevices_Internal(const int iscapture, const int classic, int (*test)(int))
SDL_EnumUnixAudioDevices_Internal(const int iscapture, const int classic, int (*test)(int))
{ {
const int flags = iscapture ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT; const int flags = iscapture ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT;
const char *audiodev; const char *audiodev;
@ -96,9 +93,7 @@ SDL_EnumUnixAudioDevices_Internal(const int iscapture, const int classic, int (*
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)) if (((stat("/dev/sound", &sb) == 0) && S_ISDIR(sb.st_mode)) && ((stat(_PATH_DEV_DSP24, &sb) == 0) && S_ISCHR(sb.st_mode))) {
&& ((stat(_PATH_DEV_DSP24, &sb) == 0)
&& S_ISCHR(sb.st_mode))) {
audiodev = _PATH_DEV_DSP24; audiodev = _PATH_DEV_DSP24;
} else { } else {
audiodev = _PATH_DEV_DSP; audiodev = _PATH_DEV_DSP;
@ -118,8 +113,7 @@ SDL_EnumUnixAudioDevices_Internal(const int iscapture, const int classic, int (*
} }
} }
void void SDL_EnumUnixAudioDevices(const int classic, int (*test)(int))
SDL_EnumUnixAudioDevices(const int classic, int (*test)(int))
{ {
SDL_EnumUnixAudioDevices_Internal(SDL_TRUE, classic, test); SDL_EnumUnixAudioDevices_Internal(SDL_TRUE, classic, test);
SDL_EnumUnixAudioDevices_Internal(SDL_FALSE, classic, test); SDL_EnumUnixAudioDevices_Internal(SDL_FALSE, classic, test);

View File

@ -57,15 +57,12 @@ SDL_AudioFilter SDL_Convert_F32_to_S16 = NULL;
SDL_AudioFilter SDL_Convert_F32_to_U16 = NULL; SDL_AudioFilter SDL_Convert_F32_to_U16 = NULL;
SDL_AudioFilter SDL_Convert_F32_to_S32 = NULL; SDL_AudioFilter SDL_Convert_F32_to_S32 = NULL;
#define DIVBY128 0.0078125f #define DIVBY128 0.0078125f
#define DIVBY32768 0.000030517578125f #define DIVBY32768 0.000030517578125f
#define DIVBY8388607 0.00000011920930376163766f #define DIVBY8388607 0.00000011920930376163766f
#if NEED_SCALAR_CONVERTER_FALLBACKS #if NEED_SCALAR_CONVERTER_FALLBACKS
static void SDLCALL static void SDLCALL SDL_Convert_S8_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_S8_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Sint8 *src = ((const Sint8 *)(cvt->buf + cvt->len_cvt)) - 1; const Sint8 *src = ((const Sint8 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1;
@ -83,8 +80,7 @@ SDL_Convert_S8_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_U8_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_U8_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Uint8 *src = ((const Uint8 *)(cvt->buf + cvt->len_cvt)) - 1; const Uint8 *src = ((const Uint8 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1;
@ -102,8 +98,7 @@ SDL_Convert_U8_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_S16_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_S16_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Sint16 *src = ((const Sint16 *)(cvt->buf + cvt->len_cvt)) - 1; const Sint16 *src = ((const Sint16 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1;
@ -121,8 +116,7 @@ SDL_Convert_S16_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_U16_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_U16_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Uint16 *src = ((const Uint16 *)(cvt->buf + cvt->len_cvt)) - 1; const Uint16 *src = ((const Uint16 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1;
@ -140,8 +134,7 @@ SDL_Convert_U16_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_S32_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_S32_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Sint32 *src = (const Sint32 *)cvt->buf; const Sint32 *src = (const Sint32 *)cvt->buf;
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
@ -158,8 +151,7 @@ SDL_Convert_S32_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_S8_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_S8_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Sint8 *dst = (Sint8 *)cvt->buf; Sint8 *dst = (Sint8 *)cvt->buf;
@ -184,8 +176,7 @@ SDL_Convert_F32_to_S8_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_U8_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_U8_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Uint8 *dst = (Uint8 *)cvt->buf; Uint8 *dst = (Uint8 *)cvt->buf;
@ -210,8 +201,7 @@ SDL_Convert_F32_to_U8_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_S16_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_S16_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Sint16 *dst = (Sint16 *)cvt->buf; Sint16 *dst = (Sint16 *)cvt->buf;
@ -236,8 +226,7 @@ SDL_Convert_F32_to_S16_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_U16_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_U16_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Uint16 *dst = (Uint16 *)cvt->buf; Uint16 *dst = (Uint16 *)cvt->buf;
@ -262,8 +251,7 @@ SDL_Convert_F32_to_U16_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_S32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_S32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Sint32 *dst = (Sint32 *)cvt->buf; Sint32 *dst = (Sint32 *)cvt->buf;
@ -288,10 +276,8 @@ SDL_Convert_F32_to_S32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
#endif #endif
#if HAVE_SSE2_INTRINSICS #if HAVE_SSE2_INTRINSICS
static void SDLCALL static void SDLCALL SDL_Convert_S8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_S8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Sint8 *src = ((const Sint8 *)(cvt->buf + cvt->len_cvt)) - 1; const Sint8 *src = ((const Sint8 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1;
@ -304,7 +290,8 @@ SDL_Convert_S8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
*dst = ((float)*src) * DIVBY128; *dst = ((float)*src) * DIVBY128;
} }
src -= 15; dst -= 15; /* adjust to read SSE blocks from the start. */ src -= 15;
dst -= 15; /* adjust to read SSE blocks from the start. */
SDL_assert(!i || ((((size_t)dst) & 15) == 0)); SDL_assert(!i || ((((size_t)dst) & 15) == 0));
/* Make sure src is aligned too. */ /* Make sure src is aligned too. */
@ -329,18 +316,23 @@ SDL_Convert_S8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
_mm_store_ps(dst + 4, _mm_unpackhi_ps(floats1, floats2)); _mm_store_ps(dst + 4, _mm_unpackhi_ps(floats1, floats2));
_mm_store_ps(dst + 8, _mm_unpacklo_ps(floats3, floats4)); _mm_store_ps(dst + 8, _mm_unpacklo_ps(floats3, floats4));
_mm_store_ps(dst + 12, _mm_unpackhi_ps(floats3, floats4)); _mm_store_ps(dst + 12, _mm_unpackhi_ps(floats3, floats4));
i -= 16; mmsrc--; dst -= 16; i -= 16;
mmsrc--;
dst -= 16;
} }
src = (const Sint8 *)mmsrc; src = (const Sint8 *)mmsrc;
} }
src += 15; dst += 15; /* adjust for any scalar finishing. */ src += 15;
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--; src--; dst--; i--;
src--;
dst--;
} }
cvt->len_cvt *= 4; cvt->len_cvt *= 4;
@ -349,8 +341,7 @@ SDL_Convert_S8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_U8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_U8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Uint8 *src = ((const Uint8 *)(cvt->buf + cvt->len_cvt)) - 1; const Uint8 *src = ((const Uint8 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1;
@ -363,7 +354,8 @@ SDL_Convert_U8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
*dst = (((float)*src) * DIVBY128) - 1.0f; *dst = (((float)*src) * DIVBY128) - 1.0f;
} }
src -= 15; dst -= 15; /* adjust to read SSE blocks from the start. */ src -= 15;
dst -= 15; /* adjust to read SSE blocks from the start. */
SDL_assert(!i || ((((size_t)dst) & 15) == 0)); SDL_assert(!i || ((((size_t)dst) & 15) == 0));
/* Make sure src is aligned too. */ /* Make sure src is aligned too. */
@ -390,18 +382,23 @@ SDL_Convert_U8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
_mm_store_ps(dst + 4, _mm_unpackhi_ps(floats1, floats2)); _mm_store_ps(dst + 4, _mm_unpackhi_ps(floats1, floats2));
_mm_store_ps(dst + 8, _mm_unpacklo_ps(floats3, floats4)); _mm_store_ps(dst + 8, _mm_unpacklo_ps(floats3, floats4));
_mm_store_ps(dst + 12, _mm_unpackhi_ps(floats3, floats4)); _mm_store_ps(dst + 12, _mm_unpackhi_ps(floats3, floats4));
i -= 16; mmsrc--; dst -= 16; i -= 16;
mmsrc--;
dst -= 16;
} }
src = (const Uint8 *)mmsrc; src = (const Uint8 *)mmsrc;
} }
src += 15; dst += 15; /* adjust for any scalar finishing. */ src += 15;
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--; src--; dst--; i--;
src--;
dst--;
} }
cvt->len_cvt *= 4; cvt->len_cvt *= 4;
@ -410,8 +407,7 @@ SDL_Convert_U8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_S16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_S16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Sint16 *src = ((const Sint16 *)(cvt->buf + cvt->len_cvt)) - 1; const Sint16 *src = ((const Sint16 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1;
@ -424,7 +420,8 @@ SDL_Convert_S16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
*dst = ((float)*src) * DIVBY32768; *dst = ((float)*src) * DIVBY32768;
} }
src -= 7; dst -= 7; /* adjust to read SSE blocks from the start. */ src -= 7;
dst -= 7; /* adjust to read SSE blocks from the start. */
SDL_assert(!i || ((((size_t)dst) & 15) == 0)); SDL_assert(!i || ((((size_t)dst) & 15) == 0));
/* Make sure src is aligned too. */ /* Make sure src is aligned too. */
@ -440,16 +437,21 @@ SDL_Convert_S16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
/* Interleave these back into the right order, convert to float, multiply, store. */ /* Interleave these back into the right order, convert to float, multiply, store. */
_mm_store_ps(dst, _mm_mul_ps(_mm_cvtepi32_ps(_mm_unpacklo_epi32(a, b)), divby32768)); _mm_store_ps(dst, _mm_mul_ps(_mm_cvtepi32_ps(_mm_unpacklo_epi32(a, b)), divby32768));
_mm_store_ps(dst + 4, _mm_mul_ps(_mm_cvtepi32_ps(_mm_unpackhi_epi32(a, b)), divby32768)); _mm_store_ps(dst + 4, _mm_mul_ps(_mm_cvtepi32_ps(_mm_unpackhi_epi32(a, b)), divby32768));
i -= 8; src -= 8; dst -= 8; i -= 8;
src -= 8;
dst -= 8;
} }
} }
src += 7; dst += 7; /* adjust for any scalar finishing. */ src += 7;
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--; src--; dst--; i--;
src--;
dst--;
} }
cvt->len_cvt *= 2; cvt->len_cvt *= 2;
@ -458,8 +460,7 @@ SDL_Convert_S16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_U16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_U16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Uint16 *src = ((const Uint16 *)(cvt->buf + cvt->len_cvt)) - 1; const Uint16 *src = ((const Uint16 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1;
@ -472,7 +473,8 @@ SDL_Convert_U16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
*dst = (((float)*src) * DIVBY32768) - 1.0f; *dst = (((float)*src) * DIVBY32768) - 1.0f;
} }
src -= 7; dst -= 7; /* adjust to read SSE blocks from the start. */ src -= 7;
dst -= 7; /* adjust to read SSE blocks from the start. */
SDL_assert(!i || ((((size_t)dst) & 15) == 0)); SDL_assert(!i || ((((size_t)dst) & 15) == 0));
/* Make sure src is aligned too. */ /* Make sure src is aligned too. */
@ -489,16 +491,21 @@ SDL_Convert_U16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
/* Interleave these back into the right order, convert to float, multiply, store. */ /* Interleave these back into the right order, convert to float, multiply, store. */
_mm_store_ps(dst, _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpacklo_epi32(a, b)), divby32768), minus1)); _mm_store_ps(dst, _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpacklo_epi32(a, b)), divby32768), minus1));
_mm_store_ps(dst + 4, _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpackhi_epi32(a, b)), divby32768), minus1)); _mm_store_ps(dst + 4, _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpackhi_epi32(a, b)), divby32768), minus1));
i -= 8; src -= 8; dst -= 8; i -= 8;
src -= 8;
dst -= 8;
} }
} }
src += 7; dst += 7; /* adjust for any scalar finishing. */ src += 7;
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) - 1.0f; *dst = (((float)*src) * DIVBY32768) - 1.0f;
i--; src--; dst--; i--;
src--;
dst--;
} }
cvt->len_cvt *= 2; cvt->len_cvt *= 2;
@ -507,8 +514,7 @@ SDL_Convert_U16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_S32_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_S32_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Sint32 *src = (const Sint32 *)cvt->buf; const Sint32 *src = (const Sint32 *)cvt->buf;
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
@ -531,7 +537,9 @@ SDL_Convert_S32_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
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. */
_mm_store_ps(dst, _mm_mul_ps(_mm_cvtepi32_ps(_mm_srai_epi32(_mm_load_si128(mmsrc), 8)), divby8388607)); _mm_store_ps(dst, _mm_mul_ps(_mm_cvtepi32_ps(_mm_srai_epi32(_mm_load_si128(mmsrc), 8)), divby8388607));
i -= 4; mmsrc++; dst += 4; i -= 4;
mmsrc++;
dst += 4;
} }
src = (const Sint32 *)mmsrc; src = (const Sint32 *)mmsrc;
} }
@ -539,7 +547,9 @@ SDL_Convert_S32_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
/* 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--; src++; dst++; i--;
src++;
dst++;
} }
if (cvt->filters[++cvt->filter_index]) { if (cvt->filters[++cvt->filter_index]) {
@ -547,8 +557,7 @@ SDL_Convert_S32_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_S8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_S8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Sint8 *dst = (Sint8 *)cvt->buf; Sint8 *dst = (Sint8 *)cvt->buf;
@ -583,7 +592,9 @@ SDL_Convert_F32_to_S8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
const __m128i ints3 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 8)), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */ const __m128i ints3 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 8)), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */
const __m128i ints4 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 12)), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */ const __m128i ints4 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 12)), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */
_mm_store_si128(mmdst, _mm_packs_epi16(_mm_packs_epi32(ints1, ints2), _mm_packs_epi32(ints3, ints4))); /* pack down, store out. */ _mm_store_si128(mmdst, _mm_packs_epi16(_mm_packs_epi32(ints1, ints2), _mm_packs_epi32(ints3, ints4))); /* pack down, store out. */
i -= 16; src += 16; mmdst++; i -= 16;
src += 16;
mmdst++;
} }
dst = (Sint8 *)mmdst; dst = (Sint8 *)mmdst;
} }
@ -598,7 +609,9 @@ SDL_Convert_F32_to_S8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = (Sint8)(sample * 127.0f); *dst = (Sint8)(sample * 127.0f);
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
cvt->len_cvt /= 4; cvt->len_cvt /= 4;
@ -607,8 +620,7 @@ SDL_Convert_F32_to_S8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_U8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_U8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Uint8 *dst = cvt->buf; Uint8 *dst = cvt->buf;
@ -643,7 +655,9 @@ SDL_Convert_F32_to_U8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
const __m128i ints3 = _mm_cvtps_epi32(_mm_mul_ps(_mm_add_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 8)), one), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */ const __m128i ints3 = _mm_cvtps_epi32(_mm_mul_ps(_mm_add_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 8)), one), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */
const __m128i ints4 = _mm_cvtps_epi32(_mm_mul_ps(_mm_add_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 12)), one), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */ const __m128i ints4 = _mm_cvtps_epi32(_mm_mul_ps(_mm_add_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 12)), one), one), mulby127)); /* load 4 floats, clamp, convert to sint32 */
_mm_store_si128(mmdst, _mm_packus_epi16(_mm_packs_epi32(ints1, ints2), _mm_packs_epi32(ints3, ints4))); /* pack down, store out. */ _mm_store_si128(mmdst, _mm_packus_epi16(_mm_packs_epi32(ints1, ints2), _mm_packs_epi32(ints3, ints4))); /* pack down, store out. */
i -= 16; src += 16; mmdst++; i -= 16;
src += 16;
mmdst++;
} }
dst = (Uint8 *)mmdst; dst = (Uint8 *)mmdst;
} }
@ -658,7 +672,9 @@ SDL_Convert_F32_to_U8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = (Uint8)((sample + 1.0f) * 127.0f); *dst = (Uint8)((sample + 1.0f) * 127.0f);
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
cvt->len_cvt /= 4; cvt->len_cvt /= 4;
@ -667,8 +683,7 @@ SDL_Convert_F32_to_U8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_S16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_S16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Sint16 *dst = (Sint16 *)cvt->buf; Sint16 *dst = (Sint16 *)cvt->buf;
@ -701,7 +716,9 @@ SDL_Convert_F32_to_S16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
const __m128i ints1 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */ const __m128i ints1 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */
const __m128i ints2 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 4)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */ const __m128i ints2 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 4)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */
_mm_store_si128(mmdst, _mm_packs_epi32(ints1, ints2)); /* pack to sint16, store out. */ _mm_store_si128(mmdst, _mm_packs_epi32(ints1, ints2)); /* pack to sint16, store out. */
i -= 8; src += 8; mmdst++; i -= 8;
src += 8;
mmdst++;
} }
dst = (Sint16 *)mmdst; dst = (Sint16 *)mmdst;
} }
@ -716,7 +733,9 @@ SDL_Convert_F32_to_S16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = (Sint16)(sample * 32767.0f); *dst = (Sint16)(sample * 32767.0f);
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
cvt->len_cvt /= 2; cvt->len_cvt /= 2;
@ -725,8 +744,7 @@ SDL_Convert_F32_to_S16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_U16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_U16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Uint16 *dst = (Uint16 *)cvt->buf; Uint16 *dst = (Uint16 *)cvt->buf;
@ -767,7 +785,9 @@ SDL_Convert_F32_to_U16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
const __m128i ints1 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */ const __m128i ints1 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */
const __m128i ints2 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 4)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */ const __m128i ints2 = _mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src + 4)), one), mulby32767)); /* load 4 floats, clamp, convert to sint32 */
_mm_store_si128(mmdst, _mm_xor_si128(_mm_packs_epi32(ints1, ints2), topbit)); /* pack to sint16, xor top bit, store out. */ _mm_store_si128(mmdst, _mm_xor_si128(_mm_packs_epi32(ints1, ints2), topbit)); /* pack to sint16, xor top bit, store out. */
i -= 8; src += 8; mmdst++; i -= 8;
src += 8;
mmdst++;
} }
dst = (Uint16 *)mmdst; dst = (Uint16 *)mmdst;
} }
@ -782,7 +802,9 @@ SDL_Convert_F32_to_U16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = (Uint16)((sample + 1.0f) * 32767.0f); *dst = (Uint16)((sample + 1.0f) * 32767.0f);
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
cvt->len_cvt /= 2; cvt->len_cvt /= 2;
@ -791,8 +813,7 @@ SDL_Convert_F32_to_U16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_S32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_S32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Sint32 *dst = (Sint32 *)cvt->buf; Sint32 *dst = (Sint32 *)cvt->buf;
@ -823,7 +844,9 @@ SDL_Convert_F32_to_S32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
__m128i *mmdst = (__m128i *)dst; __m128i *mmdst = (__m128i *)dst;
while (i >= 4) { /* 4 * float32 */ while (i >= 4) { /* 4 * float32 */
_mm_store_si128(mmdst, _mm_slli_epi32(_mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src)), one), mulby8388607)), 8)); /* load 4 floats, clamp, convert to sint32 */ _mm_store_si128(mmdst, _mm_slli_epi32(_mm_cvtps_epi32(_mm_mul_ps(_mm_min_ps(_mm_max_ps(negone, _mm_load_ps(src)), one), mulby8388607)), 8)); /* load 4 floats, clamp, convert to sint32 */
i -= 4; src += 4; mmdst++; i -= 4;
src += 4;
mmdst++;
} }
dst = (Sint32 *)mmdst; dst = (Sint32 *)mmdst;
} }
@ -838,7 +861,9 @@ SDL_Convert_F32_to_S32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = ((Sint32)(sample * 8388607.0f)) << 8; *dst = ((Sint32)(sample * 8388607.0f)) << 8;
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
if (cvt->filters[++cvt->filter_index]) { if (cvt->filters[++cvt->filter_index]) {
@ -847,10 +872,8 @@ SDL_Convert_F32_to_S32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
#endif #endif
#if HAVE_NEON_INTRINSICS #if HAVE_NEON_INTRINSICS
static void SDLCALL static void SDLCALL SDL_Convert_S8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_S8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Sint8 *src = ((const Sint8 *)(cvt->buf + cvt->len_cvt)) - 1; const Sint8 *src = ((const Sint8 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1;
@ -863,7 +886,8 @@ SDL_Convert_S8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
*dst = ((float)*src) * DIVBY128; *dst = ((float)*src) * DIVBY128;
} }
src -= 15; dst -= 15; /* adjust to read NEON blocks from the start. */ src -= 15;
dst -= 15; /* adjust to read NEON blocks from the start. */
SDL_assert(!i || ((((size_t)dst) & 15) == 0)); SDL_assert(!i || ((((size_t)dst) & 15) == 0));
/* Make sure src is aligned too. */ /* Make sure src is aligned too. */
@ -880,18 +904,23 @@ SDL_Convert_S8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
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));
vst1q_f32(dst + 12, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(int16hi))), divby128)); vst1q_f32(dst + 12, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(int16hi))), divby128));
i -= 16; mmsrc -= 16; dst -= 16; i -= 16;
mmsrc -= 16;
dst -= 16;
} }
src = (const Sint8 *)mmsrc; src = (const Sint8 *)mmsrc;
} }
src += 15; dst += 15; /* adjust for any scalar finishing. */ src += 15;
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--; src--; dst--; i--;
src--;
dst--;
} }
cvt->len_cvt *= 4; cvt->len_cvt *= 4;
@ -900,8 +929,7 @@ SDL_Convert_S8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_U8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_U8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Uint8 *src = ((const Uint8 *)(cvt->buf + cvt->len_cvt)) - 1; const Uint8 *src = ((const Uint8 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 4)) - 1;
@ -914,7 +942,8 @@ SDL_Convert_U8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
*dst = (((float)*src) * DIVBY128) - 1.0f; *dst = (((float)*src) * DIVBY128) - 1.0f;
} }
src -= 15; dst -= 15; /* adjust to read NEON blocks from the start. */ src -= 15;
dst -= 15; /* adjust to read NEON blocks from the start. */
SDL_assert(!i || ((((size_t)dst) & 15) == 0)); SDL_assert(!i || ((((size_t)dst) & 15) == 0));
/* Make sure src is aligned too. */ /* Make sure src is aligned too. */
@ -932,18 +961,23 @@ SDL_Convert_U8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
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));
vst1q_f32(dst + 12, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uint16hi))), divby128)); vst1q_f32(dst + 12, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uint16hi))), divby128));
i -= 16; mmsrc -= 16; dst -= 16; i -= 16;
mmsrc -= 16;
dst -= 16;
} }
src = (const Uint8 *)mmsrc; src = (const Uint8 *)mmsrc;
} }
src += 15; dst += 15; /* adjust for any scalar finishing. */ src += 15;
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--; src--; dst--; i--;
src--;
dst--;
} }
cvt->len_cvt *= 4; cvt->len_cvt *= 4;
@ -952,8 +986,7 @@ SDL_Convert_U8_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_S16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_S16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Sint16 *src = ((const Sint16 *)(cvt->buf + cvt->len_cvt)) - 1; const Sint16 *src = ((const Sint16 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1;
@ -966,7 +999,8 @@ SDL_Convert_S16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
*dst = ((float)*src) * DIVBY32768; *dst = ((float)*src) * DIVBY32768;
} }
src -= 7; dst -= 7; /* adjust to read NEON blocks from the start. */ src -= 7;
dst -= 7; /* adjust to read NEON blocks from the start. */
SDL_assert(!i || ((((size_t)dst) & 15) == 0)); SDL_assert(!i || ((((size_t)dst) & 15) == 0));
/* Make sure src is aligned too. */ /* Make sure src is aligned too. */
@ -978,16 +1012,21 @@ SDL_Convert_S16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
/* 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; src -= 8; dst -= 8; i -= 8;
src -= 8;
dst -= 8;
} }
} }
src += 7; dst += 7; /* adjust for any scalar finishing. */ src += 7;
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--; src--; dst--; i--;
src--;
dst--;
} }
cvt->len_cvt *= 2; cvt->len_cvt *= 2;
@ -996,8 +1035,7 @@ SDL_Convert_S16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_U16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_U16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Uint16 *src = ((const Uint16 *)(cvt->buf + cvt->len_cvt)) - 1; const Uint16 *src = ((const Uint16 *)(cvt->buf + cvt->len_cvt)) - 1;
float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1; float *dst = ((float *)(cvt->buf + cvt->len_cvt * 2)) - 1;
@ -1010,7 +1048,8 @@ SDL_Convert_U16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
*dst = (((float)*src) * DIVBY32768) - 1.0f; *dst = (((float)*src) * DIVBY32768) - 1.0f;
} }
src -= 7; dst -= 7; /* adjust to read NEON blocks from the start. */ src -= 7;
dst -= 7; /* adjust to read NEON blocks from the start. */
SDL_assert(!i || ((((size_t)dst) & 15) == 0)); SDL_assert(!i || ((((size_t)dst) & 15) == 0));
/* Make sure src is aligned too. */ /* Make sure src is aligned too. */
@ -1023,16 +1062,21 @@ SDL_Convert_U16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
/* split uint16 to two int32, then convert to float, then multiply to normalize, subtract for sign, store. */ /* split uint16 to two int32, then convert to float, then multiply to normalize, subtract for sign, store. */
vst1q_f32(dst, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uints))), divby32768)); vst1q_f32(dst, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uints))), divby32768));
vst1q_f32(dst + 4, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uints))), divby32768)); vst1q_f32(dst + 4, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uints))), divby32768));
i -= 8; src -= 8; dst -= 8; i -= 8;
src -= 8;
dst -= 8;
} }
} }
src += 7; dst += 7; /* adjust for any scalar finishing. */ src += 7;
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) - 1.0f; *dst = (((float)*src) * DIVBY32768) - 1.0f;
i--; src--; dst--; i--;
src--;
dst--;
} }
cvt->len_cvt *= 2; cvt->len_cvt *= 2;
@ -1041,8 +1085,7 @@ SDL_Convert_U16_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_S32_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_S32_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const Sint32 *src = (const Sint32 *)cvt->buf; const Sint32 *src = (const Sint32 *)cvt->buf;
float *dst = (float *)cvt->buf; float *dst = (float *)cvt->buf;
@ -1065,7 +1108,9 @@ SDL_Convert_S32_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
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; mmsrc += 4; dst += 4; i -= 4;
mmsrc += 4;
dst += 4;
} }
src = (const Sint32 *)mmsrc; src = (const Sint32 *)mmsrc;
} }
@ -1073,7 +1118,9 @@ SDL_Convert_S32_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
/* 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--; src++; dst++; i--;
src++;
dst++;
} }
if (cvt->filters[++cvt->filter_index]) { if (cvt->filters[++cvt->filter_index]) {
@ -1081,8 +1128,7 @@ SDL_Convert_S32_to_F32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_S8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_S8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Sint8 *dst = (Sint8 *)cvt->buf; Sint8 *dst = (Sint8 *)cvt->buf;
@ -1119,7 +1165,9 @@ SDL_Convert_F32_to_S8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
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; src += 16; mmdst += 16; i -= 16;
src += 16;
mmdst += 16;
} }
dst = (Sint8 *)mmdst; dst = (Sint8 *)mmdst;
} }
@ -1134,7 +1182,9 @@ SDL_Convert_F32_to_S8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = (Sint8)(sample * 127.0f); *dst = (Sint8)(sample * 127.0f);
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
cvt->len_cvt /= 4; cvt->len_cvt /= 4;
@ -1143,8 +1193,7 @@ SDL_Convert_F32_to_S8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_U8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_U8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Uint8 *dst = (Uint8 *)cvt->buf; Uint8 *dst = (Uint8 *)cvt->buf;
@ -1181,7 +1230,9 @@ SDL_Convert_F32_to_U8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
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; src += 16; mmdst += 16; i -= 16;
src += 16;
mmdst += 16;
} }
dst = (Uint8 *)mmdst; dst = (Uint8 *)mmdst;
@ -1197,7 +1248,9 @@ SDL_Convert_F32_to_U8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = (Uint8)((sample + 1.0f) * 127.0f); *dst = (Uint8)((sample + 1.0f) * 127.0f);
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
cvt->len_cvt /= 4; cvt->len_cvt /= 4;
@ -1206,8 +1259,7 @@ SDL_Convert_F32_to_U8_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_S16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_S16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Sint16 *dst = (Sint16 *)cvt->buf; Sint16 *dst = (Sint16 *)cvt->buf;
@ -1240,7 +1292,9 @@ SDL_Convert_F32_to_S16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
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; src += 8; mmdst += 8; i -= 8;
src += 8;
mmdst += 8;
} }
dst = (Sint16 *)mmdst; dst = (Sint16 *)mmdst;
} }
@ -1255,7 +1309,9 @@ SDL_Convert_F32_to_S16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = (Sint16)(sample * 32767.0f); *dst = (Sint16)(sample * 32767.0f);
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
cvt->len_cvt /= 2; cvt->len_cvt /= 2;
@ -1264,8 +1320,7 @@ SDL_Convert_F32_to_S16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_U16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_U16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Uint16 *dst = (Uint16 *)cvt->buf; Uint16 *dst = (Uint16 *)cvt->buf;
@ -1298,7 +1353,9 @@ SDL_Convert_F32_to_U16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
const uint32x4_t uints1 = vcvtq_u32_f32(vmulq_f32(vaddq_f32(vminq_f32(vmaxq_f32(negone, vld1q_f32(src)), one), one), mulby32767)); /* 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), mulby32767)); /* 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), mulby32767)); /* 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), mulby32767)); /* load 4 floats, clamp, convert to uint32 */
vst1q_u16(mmdst, vcombine_u16(vmovn_u32(uints1), vmovn_u32(uints2))); /* narrow to uint16, combine, store out. */ vst1q_u16(mmdst, vcombine_u16(vmovn_u32(uints1), vmovn_u32(uints2))); /* narrow to uint16, combine, store out. */
i -= 8; src += 8; mmdst += 8; i -= 8;
src += 8;
mmdst += 8;
} }
dst = (Uint16 *)mmdst; dst = (Uint16 *)mmdst;
} }
@ -1313,7 +1370,9 @@ SDL_Convert_F32_to_U16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = (Uint16)((sample + 1.0f) * 32767.0f); *dst = (Uint16)((sample + 1.0f) * 32767.0f);
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
cvt->len_cvt /= 2; cvt->len_cvt /= 2;
@ -1322,8 +1381,7 @@ SDL_Convert_F32_to_U16_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
} }
static void SDLCALL static void SDLCALL SDL_Convert_F32_to_S32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
SDL_Convert_F32_to_S32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{ {
const float *src = (const float *)cvt->buf; const float *src = (const float *)cvt->buf;
Sint32 *dst = (Sint32 *)cvt->buf; Sint32 *dst = (Sint32 *)cvt->buf;
@ -1354,7 +1412,9 @@ SDL_Convert_F32_to_S32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
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; src += 4; mmdst += 4; i -= 4;
src += 4;
mmdst += 4;
} }
dst = (Sint32 *)mmdst; dst = (Sint32 *)mmdst;
} }
@ -1369,7 +1429,9 @@ SDL_Convert_F32_to_S32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} else { } else {
*dst = ((Sint32)(sample * 8388607.0f)) << 8; *dst = ((Sint32)(sample * 8388607.0f)) << 8;
} }
i--; src++; dst++; i--;
src++;
dst++;
} }
if (cvt->filters[++cvt->filter_index]) { if (cvt->filters[++cvt->filter_index]) {
@ -1378,8 +1440,6 @@ SDL_Convert_F32_to_S32_NEON(SDL_AudioCVT *cvt, SDL_AudioFormat format)
} }
#endif #endif
void SDL_ChooseAudioConverters(void) void SDL_ChooseAudioConverters(void)
{ {
static SDL_bool converters_chosen = SDL_FALSE; static SDL_bool converters_chosen = SDL_FALSE;

View File

@ -82,9 +82,7 @@ static const Uint8 mix8[] = {
#define ADJUST_VOLUME_U8(s, v) (s = (((s - 128) * v) / SDL_MIX_MAXVOLUME) + 128) #define ADJUST_VOLUME_U8(s, v) (s = (((s - 128) * v) / SDL_MIX_MAXVOLUME) + 128)
#define ADJUST_VOLUME_U16(s, v) (s = (((s - 32768) * v) / SDL_MIX_MAXVOLUME) + 32768) #define ADJUST_VOLUME_U16(s, v) (s = (((s - 32768) * v) / SDL_MIX_MAXVOLUME) + 32768)
void SDL_MixAudioFormat(Uint8 *dst, const Uint8 *src, SDL_AudioFormat format,
void
SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
Uint32 len, int volume) Uint32 len, int volume)
{ {
if (volume == 0) { if (volume == 0) {
@ -104,8 +102,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
++dst; ++dst;
++src; ++src;
} }
} } break;
break;
case AUDIO_S8: case AUDIO_S8:
{ {
@ -130,8 +127,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
++dst8; ++dst8;
++src8; ++src8;
} }
} } break;
break;
case AUDIO_S16LSB: case AUDIO_S16LSB:
{ {
@ -155,8 +151,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
*(Sint16 *)dst = SDL_SwapLE16(dst_sample); *(Sint16 *)dst = SDL_SwapLE16(dst_sample);
dst += 2; dst += 2;
} }
} } break;
break;
case AUDIO_S16MSB: case AUDIO_S16MSB:
{ {
@ -180,8 +175,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
*(Sint16 *)dst = SDL_SwapBE16(dst_sample); *(Sint16 *)dst = SDL_SwapBE16(dst_sample);
dst += 2; dst += 2;
} }
} } break;
break;
case AUDIO_U16LSB: case AUDIO_U16LSB:
{ {
@ -206,8 +200,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
*(Uint16 *)dst = SDL_SwapLE16(dst_sample); *(Uint16 *)dst = SDL_SwapLE16(dst_sample);
dst += 2; dst += 2;
} }
} } break;
break;
case AUDIO_U16MSB: case AUDIO_U16MSB:
{ {
@ -232,8 +225,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
*(Uint16 *)dst = SDL_SwapBE16(dst_sample); *(Uint16 *)dst = SDL_SwapBE16(dst_sample);
dst += 2; dst += 2;
} }
} } break;
break;
case AUDIO_S32LSB: case AUDIO_S32LSB:
{ {
@ -258,8 +250,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
} }
*(dst32++) = SDL_SwapLE32((Uint32)((Sint32)dst_sample)); *(dst32++) = SDL_SwapLE32((Uint32)((Sint32)dst_sample));
} }
} } break;
break;
case AUDIO_S32MSB: case AUDIO_S32MSB:
{ {
@ -284,8 +275,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
} }
*(dst32++) = SDL_SwapBE32((Uint32)((Sint32)dst_sample)); *(dst32++) = SDL_SwapBE32((Uint32)((Sint32)dst_sample));
} }
} } break;
break;
case AUDIO_F32LSB: case AUDIO_F32LSB:
{ {
@ -313,8 +303,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
} }
*(dst32++) = SDL_SwapFloatLE((float)dst_sample); *(dst32++) = SDL_SwapFloatLE((float)dst_sample);
} }
} } break;
break;
case AUDIO_F32MSB: case AUDIO_F32MSB:
{ {
@ -342,8 +331,7 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
} }
*(dst32++) = SDL_SwapFloatBE((float)dst_sample); *(dst32++) = SDL_SwapFloatBE((float)dst_sample);
} }
} } break;
break;
default: /* If this happens... FIXME! */ default: /* If this happens... FIXME! */
SDL_SetError("SDL_MixAudioFormat(): unknown audio format"); SDL_SetError("SDL_MixAudioFormat(): unknown audio format");

View File

@ -89,7 +89,6 @@ typedef struct SDL_AudioDriverImpl
SDL_bool SupportsNonPow2Samples; SDL_bool SupportsNonPow2Samples;
} SDL_AudioDriverImpl; } SDL_AudioDriverImpl;
typedef struct SDL_AudioDeviceItem typedef struct SDL_AudioDeviceItem
{ {
void *handle; void *handle;
@ -100,7 +99,6 @@ typedef struct SDL_AudioDeviceItem
struct SDL_AudioDeviceItem *next; struct SDL_AudioDeviceItem *next;
} SDL_AudioDeviceItem; } SDL_AudioDeviceItem;
typedef struct SDL_AudioDriver typedef struct SDL_AudioDriver
{ {
/* * * */ /* * * */
@ -123,7 +121,6 @@ typedef struct SDL_AudioDriver
SDL_AudioDeviceItem *inputDevices; SDL_AudioDeviceItem *inputDevices;
} SDL_AudioDriver; } SDL_AudioDriver;
/* Define the SDL audio driver structure */ /* Define the SDL audio driver structure */
struct SDL_AudioDevice struct SDL_AudioDevice
{ {

View File

@ -41,8 +41,7 @@
* Returns 0 on success, or -1 if the multiplication overflows, in which case f1 * Returns 0 on success, or -1 if the multiplication overflows, in which case f1
* does not get modified. * does not get modified.
*/ */
static int static int SafeMult(size_t *f1, size_t f2)
SafeMult(size_t *f1, size_t f2)
{ {
if (*f1 > 0 && SIZE_MAX / *f1 <= f2) { if (*f1 > 0 && SIZE_MAX / *f1 <= f2) {
return -1; return -1;
@ -64,21 +63,24 @@ typedef struct ADPCM_DecoderState
void *cstate; /* Decoding state for each channel. */ void *cstate; /* Decoding state for each channel. */
/* ADPCM data. */ /* ADPCM data. */
struct { struct
{
Uint8 *data; Uint8 *data;
size_t size; size_t size;
size_t pos; size_t pos;
} input; } input;
/* Current ADPCM block in the ADPCM data above. */ /* Current ADPCM block in the ADPCM data above. */
struct { struct
{
Uint8 *data; Uint8 *data;
size_t size; size_t size;
size_t pos; size_t pos;
} block; } block;
/* Decoded 16-bit PCM data. */ /* Decoded 16-bit PCM data. */
struct { struct
{
Sint16 *data; Sint16 *data;
size_t size; size_t size;
size_t pos; size_t pos;
@ -100,8 +102,7 @@ typedef struct MS_ADPCM_ChannelState
} MS_ADPCM_ChannelState; } MS_ADPCM_ChannelState;
#ifdef SDL_WAVE_DEBUG_LOG_FORMAT #ifdef SDL_WAVE_DEBUG_LOG_FORMAT
static void static void WaveDebugLogFormat(WaveFile *file)
WaveDebugLogFormat(WaveFile *file)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
const char *fmtstr = "WAVE file: %s, %u Hz, %s, %u bits, %u %s/s"; const char *fmtstr = "WAVE file: %s, %u Hz, %s, %u bits, %u %s/s";
@ -135,9 +136,14 @@ WaveDebugLogFormat(WaveFile *file)
break; break;
} }
#define SDL_WAVE_DEBUG_CHANNELCFG(STR, CODE) case CODE: wavechannel = STR; break; #define SDL_WAVE_DEBUG_CHANNELCFG(STR, CODE) \
#define SDL_WAVE_DEBUG_CHANNELSTR(STR, CODE) if (format->channelmask & CODE) { \ case CODE: \
SDL_strlcat(channelstr, channelstr[0] ? "-" STR : STR, sizeof(channelstr));} wavechannel = STR; \
break;
#define SDL_WAVE_DEBUG_CHANNELSTR(STR, CODE) \
if (format->channelmask & CODE) { \
SDL_strlcat(channelstr, channelstr[0] ? "-" STR : STR, sizeof(channelstr)); \
}
if (format->formattag == EXTENSIBLE_CODE && format->channelmask > 0) { if (format->formattag == EXTENSIBLE_CODE && format->channelmask > 0) {
switch (format->channelmask) { switch (format->channelmask) {
@ -224,8 +230,7 @@ WaveDebugLogFormat(WaveFile *file)
#endif #endif
#ifdef SDL_WAVE_DEBUG_DUMP_FORMAT #ifdef SDL_WAVE_DEBUG_DUMP_FORMAT
static void static void WaveDebugDumpFormat(WaveFile *file, Uint32 rifflen, Uint32 fmtlen, Uint32 datalen)
WaveDebugDumpFormat(WaveFile *file, Uint32 rifflen, Uint32 fmtlen, Uint32 datalen)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
const char *fmtstr1 = "WAVE chunk dump:\n" const char *fmtstr1 = "WAVE chunk dump:\n"
@ -315,8 +320,7 @@ WaveDebugDumpFormat(WaveFile *file, Uint32 rifflen, Uint32 fmtlen, Uint32 datale
} }
#endif #endif
static Sint64 static Sint64 WaveAdjustToFactValue(WaveFile *file, Sint64 sampleframes)
WaveAdjustToFactValue(WaveFile *file, Sint64 sampleframes)
{ {
if (file->fact.status == 2) { if (file->fact.status == 2) {
if (file->facthint == FactStrict && sampleframes < file->fact.samplelength) { if (file->facthint == FactStrict && sampleframes < file->fact.samplelength) {
@ -329,8 +333,7 @@ WaveAdjustToFactValue(WaveFile *file, Sint64 sampleframes)
return sampleframes; return sampleframes;
} }
static int static int MS_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength)
MS_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
const size_t blockheadersize = (size_t)file->format.channels * 7; const size_t blockheadersize = (size_t)file->format.channels * 7;
@ -369,8 +372,7 @@ MS_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength)
return 0; return 0;
} }
static int static int MS_ADPCM_Init(WaveFile *file, size_t datalength)
MS_ADPCM_Init(WaveFile *file, size_t datalength)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
WaveChunk *chunk = &file->chunk; WaveChunk *chunk = &file->chunk;
@ -488,8 +490,7 @@ MS_ADPCM_Init(WaveFile *file, size_t datalength)
return 0; return 0;
} }
static Sint16 static Sint16 MS_ADPCM_ProcessNibble(MS_ADPCM_ChannelState *cstate, Sint32 sample1, Sint32 sample2, Uint8 nybble)
MS_ADPCM_ProcessNibble(MS_ADPCM_ChannelState *cstate, Sint32 sample1, Sint32 sample2, Uint8 nybble)
{ {
const Sint32 max_audioval = 32767; const Sint32 max_audioval = 32767;
const Sint32 min_audioval = -32768; const Sint32 min_audioval = -32768;
@ -525,8 +526,7 @@ MS_ADPCM_ProcessNibble(MS_ADPCM_ChannelState *cstate, Sint32 sample1, Sint32 sam
return (Sint16)new_sample; return (Sint16)new_sample;
} }
static int static int MS_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state)
MS_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state)
{ {
Uint8 coeffindex; Uint8 coeffindex;
const Uint32 channels = state->channels; const Uint32 channels = state->channels;
@ -586,8 +586,7 @@ MS_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state)
* will always contain full sample frames (same sample count for each channel). * will always contain full sample frames (same sample count for each channel).
* Incomplete sample frames are discarded. * Incomplete sample frames are discarded.
*/ */
static int static int MS_ADPCM_DecodeBlockData(ADPCM_DecoderState *state)
MS_ADPCM_DecodeBlockData(ADPCM_DecoderState *state)
{ {
Uint16 nybble = 0; Uint16 nybble = 0;
Sint16 sample1, sample2; Sint16 sample1, sample2;
@ -634,8 +633,7 @@ MS_ADPCM_DecodeBlockData(ADPCM_DecoderState *state)
return 0; return 0;
} }
static int static int MS_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
MS_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
{ {
int result; int result;
size_t bytesleft, outputsize; size_t bytesleft, outputsize;
@ -734,8 +732,7 @@ MS_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
return 0; return 0;
} }
static int static int IMA_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength)
IMA_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
const size_t blockheadersize = (size_t)format->channels * 4; const size_t blockheadersize = (size_t)format->channels * 4;
@ -788,8 +785,7 @@ IMA_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength)
return 0; return 0;
} }
static int static int IMA_ADPCM_Init(WaveFile *file, size_t datalength)
IMA_ADPCM_Init(WaveFile *file, size_t datalength)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
WaveChunk *chunk = &file->chunk; WaveChunk *chunk = &file->chunk;
@ -854,8 +850,7 @@ IMA_ADPCM_Init(WaveFile *file, size_t datalength)
return 0; return 0;
} }
static Sint16 static Sint16 IMA_ADPCM_ProcessNibble(Sint8 *cindex, Sint16 lastsample, Uint8 nybble)
IMA_ADPCM_ProcessNibble(Sint8 *cindex, Sint16 lastsample, Uint8 nybble)
{ {
const Sint32 max_audioval = 32767; const Sint32 max_audioval = 32767;
const Sint32 min_audioval = -32768; const Sint32 min_audioval = -32768;
@ -924,8 +919,7 @@ IMA_ADPCM_ProcessNibble(Sint8 *cindex, Sint16 lastsample, Uint8 nybble)
return (Sint16)sample; return (Sint16)sample;
} }
static int static int IMA_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state)
IMA_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state)
{ {
Sint16 step; Sint16 step;
Uint32 c; Uint32 c;
@ -964,8 +958,7 @@ IMA_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state)
* contains full sample frames (same sample count for each channel). * contains full sample frames (same sample count for each channel).
* Incomplete sample frames are discarded. * Incomplete sample frames are discarded.
*/ */
static int static int IMA_ADPCM_DecodeBlockData(ADPCM_DecoderState *state)
IMA_ADPCM_DecodeBlockData(ADPCM_DecoderState *state)
{ {
size_t i; size_t i;
int retval = 0; int retval = 0;
@ -1034,8 +1027,7 @@ IMA_ADPCM_DecodeBlockData(ADPCM_DecoderState *state)
return retval; return retval;
} }
static int static int IMA_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
IMA_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
{ {
int result; int result;
size_t bytesleft, outputsize; size_t bytesleft, outputsize;
@ -1138,8 +1130,7 @@ IMA_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
return 0; return 0;
} }
static int static int LAW_Init(WaveFile *file, size_t datalength)
LAW_Init(WaveFile *file, size_t datalength)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
@ -1167,8 +1158,7 @@ LAW_Init(WaveFile *file, size_t datalength)
return 0; return 0;
} }
static int static int LAW_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
LAW_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
{ {
#ifdef SDL_WAVE_LAW_LUT #ifdef SDL_WAVE_LAW_LUT
const Sint16 alaw_lut[256] = { const Sint16 alaw_lut[256] = {
@ -1310,8 +1300,7 @@ LAW_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
return 0; return 0;
} }
static int static int PCM_Init(WaveFile *file, size_t datalength)
PCM_Init(WaveFile *file, size_t datalength)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
@ -1354,8 +1343,7 @@ PCM_Init(WaveFile *file, size_t datalength)
return 0; return 0;
} }
static int static int PCM_ConvertSint24ToSint32(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
PCM_ConvertSint24ToSint32(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
WaveChunk *chunk = &file->chunk; WaveChunk *chunk = &file->chunk;
@ -1406,8 +1394,7 @@ PCM_ConvertSint24ToSint32(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
return 0; return 0;
} }
static int static int PCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
PCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
WaveChunk *chunk = &file->chunk; WaveChunk *chunk = &file->chunk;
@ -1449,8 +1436,7 @@ PCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len)
return 0; return 0;
} }
static WaveRiffSizeHint static WaveRiffSizeHint WaveGetRiffSizeHint()
WaveGetRiffSizeHint()
{ {
const char *hint = SDL_GetHint(SDL_HINT_WAVE_RIFF_CHUNK_SIZE); const char *hint = SDL_GetHint(SDL_HINT_WAVE_RIFF_CHUNK_SIZE);
@ -1469,8 +1455,7 @@ WaveGetRiffSizeHint()
return RiffSizeNoHint; return RiffSizeNoHint;
} }
static WaveTruncationHint static WaveTruncationHint WaveGetTruncationHint()
WaveGetTruncationHint()
{ {
const char *hint = SDL_GetHint(SDL_HINT_WAVE_TRUNCATION); const char *hint = SDL_GetHint(SDL_HINT_WAVE_TRUNCATION);
@ -1489,8 +1474,7 @@ WaveGetTruncationHint()
return TruncNoHint; return TruncNoHint;
} }
static WaveFactChunkHint static WaveFactChunkHint WaveGetFactChunkHint()
WaveGetFactChunkHint()
{ {
const char *hint = SDL_GetHint(SDL_HINT_WAVE_FACT_CHUNK); const char *hint = SDL_GetHint(SDL_HINT_WAVE_FACT_CHUNK);
@ -1509,8 +1493,7 @@ WaveGetFactChunkHint()
return FactNoHint; return FactNoHint;
} }
static void static void WaveFreeChunkData(WaveChunk *chunk)
WaveFreeChunkData(WaveChunk *chunk)
{ {
if (chunk->data != NULL) { if (chunk->data != NULL) {
SDL_free(chunk->data); SDL_free(chunk->data);
@ -1519,8 +1502,7 @@ WaveFreeChunkData(WaveChunk *chunk)
chunk->size = 0; chunk->size = 0;
} }
static int static int WaveNextChunk(SDL_RWops *src, WaveChunk *chunk)
WaveNextChunk(SDL_RWops *src, WaveChunk *chunk)
{ {
Uint32 chunkheader[2]; Uint32 chunkheader[2];
Sint64 nextposition = chunk->position + chunk->length; Sint64 nextposition = chunk->position + chunk->length;
@ -1552,8 +1534,7 @@ WaveNextChunk(SDL_RWops *src, WaveChunk *chunk)
return 0; return 0;
} }
static int static int WaveReadPartialChunkData(SDL_RWops *src, WaveChunk *chunk, size_t length)
WaveReadPartialChunkData(SDL_RWops *src, WaveChunk *chunk, size_t length)
{ {
WaveFreeChunkData(chunk); WaveFreeChunkData(chunk);
@ -1581,19 +1562,22 @@ WaveReadPartialChunkData(SDL_RWops *src, WaveChunk *chunk, size_t length)
return 0; return 0;
} }
static int static int WaveReadChunkData(SDL_RWops *src, WaveChunk *chunk)
WaveReadChunkData(SDL_RWops *src, WaveChunk *chunk)
{ {
return WaveReadPartialChunkData(src, chunk, chunk->length); return WaveReadPartialChunkData(src, chunk, chunk->length);
} }
typedef struct WaveExtensibleGUID { typedef struct WaveExtensibleGUID
{
Uint16 encoding; Uint16 encoding;
Uint8 guid[16]; Uint8 guid[16];
} WaveExtensibleGUID; } WaveExtensibleGUID;
/* Some of the GUIDs that are used by WAVEFORMATEXTENSIBLE. */ /* Some of the GUIDs that are used by WAVEFORMATEXTENSIBLE. */
#define WAVE_FORMATTAG_GUID(tag) {(tag) & 0xff, (tag) >> 8, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113} #define WAVE_FORMATTAG_GUID(tag) \
{ \
(tag) & 0xff, (tag) >> 8, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113 \
}
static WaveExtensibleGUID extensible_guids[] = { static WaveExtensibleGUID extensible_guids[] = {
{ PCM_CODE, WAVE_FORMATTAG_GUID(PCM_CODE) }, { PCM_CODE, WAVE_FORMATTAG_GUID(PCM_CODE) },
{ MS_ADPCM_CODE, WAVE_FORMATTAG_GUID(MS_ADPCM_CODE) }, { MS_ADPCM_CODE, WAVE_FORMATTAG_GUID(MS_ADPCM_CODE) },
@ -1603,8 +1587,7 @@ static WaveExtensibleGUID extensible_guids[] = {
{ IMA_ADPCM_CODE, WAVE_FORMATTAG_GUID(IMA_ADPCM_CODE) } { IMA_ADPCM_CODE, WAVE_FORMATTAG_GUID(IMA_ADPCM_CODE) }
}; };
static Uint16 static Uint16 WaveGetFormatGUIDEncoding(WaveFormat *format)
WaveGetFormatGUIDEncoding(WaveFormat *format)
{ {
size_t i; size_t i;
for (i = 0; i < SDL_arraysize(extensible_guids); i++) { for (i = 0; i < SDL_arraysize(extensible_guids); i++) {
@ -1615,8 +1598,7 @@ WaveGetFormatGUIDEncoding(WaveFormat *format)
return UNKNOWN_CODE; return UNKNOWN_CODE;
} }
static int static int WaveReadFormat(WaveFile *file)
WaveReadFormat(WaveFile *file)
{ {
WaveChunk *chunk = &file->chunk; WaveChunk *chunk = &file->chunk;
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
@ -1677,8 +1659,7 @@ WaveReadFormat(WaveFile *file)
return 0; return 0;
} }
static int static int WaveCheckFormat(WaveFile *file, size_t datalength)
WaveCheckFormat(WaveFile *file, size_t datalength)
{ {
WaveFormat *format = &file->format; WaveFormat *format = &file->format;
@ -1785,8 +1766,7 @@ WaveCheckFormat(WaveFile *file, size_t datalength)
return 0; return 0;
} }
static int static int WaveLoad(SDL_RWops *src, WaveFile *file, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len)
WaveLoad(SDL_RWops *src, WaveFile *file, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len)
{ {
int result; int result;
Uint32 chunkcount = 0; Uint32 chunkcount = 0;
@ -2148,8 +2128,7 @@ SDL_LoadWAV_RW(SDL_RWops *src, int freesrc, SDL_AudioSpec *spec, Uint8 **audio_b
/* Since the WAV memory is allocated in the shared library, it must also /* Since the WAV memory is allocated in the shared library, it must also
be freed here. (Necessary under Win32, VC++) be freed here. (Necessary under Win32, VC++)
*/ */
void void SDL_FreeWAV(Uint8 *audio_buf)
SDL_FreeWAV(Uint8 *audio_buf)
{ {
SDL_free(audio_buf); SDL_free(audio_buf);
} }

View File

@ -70,7 +70,8 @@ typedef struct WaveFormat
} WaveFormat; } WaveFormat;
/* Stores information on the fact chunk. */ /* Stores information on the fact chunk. */
typedef struct WaveFact { typedef struct WaveFact
{
/* Represents the state of the fact chunk in the WAVE file. /* Represents the state of the fact chunk in the WAVE file.
* Set to -1 if the fact chunk is invalid. * Set to -1 if the fact chunk is invalid.
* Set to 0 if the fact chunk is not present * Set to 0 if the fact chunk is not present
@ -101,7 +102,8 @@ typedef struct WaveChunk
} WaveChunk; } WaveChunk;
/* Controls how the size of the RIFF chunk affects the loading of a WAVE file. */ /* Controls how the size of the RIFF chunk affects the loading of a WAVE file. */
typedef enum WaveRiffSizeHint { typedef enum WaveRiffSizeHint
{
RiffSizeNoHint, RiffSizeNoHint,
RiffSizeForce, RiffSizeForce,
RiffSizeIgnoreZero, RiffSizeIgnoreZero,
@ -110,7 +112,8 @@ typedef enum WaveRiffSizeHint {
} WaveRiffSizeHint; } WaveRiffSizeHint;
/* Controls how a truncated WAVE file is handled. */ /* Controls how a truncated WAVE file is handled. */
typedef enum WaveTruncationHint { typedef enum WaveTruncationHint
{
TruncNoHint, TruncNoHint,
TruncVeryStrict, TruncVeryStrict,
TruncStrict, TruncStrict,
@ -119,7 +122,8 @@ typedef enum WaveTruncationHint {
} WaveTruncationHint; } WaveTruncationHint;
/* Controls how the fact chunk affects the loading of a WAVE file. */ /* Controls how the fact chunk affects the loading of a WAVE file. */
typedef enum WaveFactChunkHint { typedef enum WaveFactChunkHint
{
FactNoHint, FactNoHint,
FactTruncate, FactTruncate,
FactStrict, FactStrict,

View File

@ -68,8 +68,7 @@ void aaudio_errorCallback( AAudioStream *stream, void *userData, aaudio_result_t
#define LIB_AAUDIO_SO "libaaudio.so" #define LIB_AAUDIO_SO "libaaudio.so"
static int static int aaudio_OpenDevice(_THIS, const char *devname)
aaudio_OpenDevice(_THIS, const char *devname)
{ {
struct SDL_PrivateAudioData *private; struct SDL_PrivateAudioData *private;
SDL_bool iscapture = this->iscapture; SDL_bool iscapture = this->iscapture;
@ -165,8 +164,7 @@ aaudio_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static void static void aaudio_CloseDevice(_THIS)
aaudio_CloseDevice(_THIS)
{ {
struct SDL_PrivateAudioData *private = this->hidden; struct SDL_PrivateAudioData *private = this->hidden;
aaudio_result_t res; aaudio_result_t res;
@ -200,15 +198,13 @@ aaudio_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static Uint8 * static Uint8 *aaudio_GetDeviceBuf(_THIS)
aaudio_GetDeviceBuf(_THIS)
{ {
struct SDL_PrivateAudioData *private = this->hidden; struct SDL_PrivateAudioData *private = this->hidden;
return private->mixbuf; return private->mixbuf;
} }
static void static void aaudio_PlayDevice(_THIS)
aaudio_PlayDevice(_THIS)
{ {
struct SDL_PrivateAudioData *private = this->hidden; struct SDL_PrivateAudioData *private = this->hidden;
aaudio_result_t res; aaudio_result_t res;
@ -233,8 +229,7 @@ aaudio_PlayDevice(_THIS)
#endif #endif
} }
static int static int aaudio_CaptureFromDevice(_THIS, void *buffer, int buflen)
aaudio_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
struct SDL_PrivateAudioData *private = this->hidden; struct SDL_PrivateAudioData *private = this->hidden;
aaudio_result_t res; aaudio_result_t res;
@ -248,8 +243,7 @@ aaudio_CaptureFromDevice(_THIS, void *buffer, int buflen)
return res * private->frame_size; return res * private->frame_size;
} }
static void static void aaudio_Deinitialize(void)
aaudio_Deinitialize(void)
{ {
LOGI(__func__); LOGI(__func__);
if (ctx.handle) { if (ctx.handle) {
@ -267,8 +261,7 @@ aaudio_Deinitialize(void)
LOGI("End AAUDIO %s", SDL_GetError()); LOGI("End AAUDIO %s", SDL_GetError());
} }
static SDL_bool static SDL_bool aaudio_Init(SDL_AudioDriverImpl *impl)
aaudio_Init(SDL_AudioDriverImpl *impl)
{ {
aaudio_result_t res; aaudio_result_t res;
LOGI(__func__); LOGI(__func__);

View File

@ -47,7 +47,6 @@ void aaudio_ResumeDevices(void);
void aaudio_PauseDevices(void); void aaudio_PauseDevices(void);
SDL_bool aaudio_DetectBrokenPlayState(void); SDL_bool aaudio_DetectBrokenPlayState(void);
#endif /* _SDL_aaudio_h */ #endif /* _SDL_aaudio_h */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -77,4 +77,3 @@ SDL_PROC_UNUSED(aaudio_content_type_t, AAudioStream_getContentType, (AAudioStrea
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 */

View File

@ -43,56 +43,38 @@
#ifdef SDL_AUDIO_DRIVER_ALSA_DYNAMIC #ifdef SDL_AUDIO_DRIVER_ALSA_DYNAMIC
#endif #endif
static int (*ALSA_snd_pcm_open) static int (*ALSA_snd_pcm_open)(snd_pcm_t **, const char *, snd_pcm_stream_t, int);
(snd_pcm_t **, const char *, snd_pcm_stream_t, int);
static int (*ALSA_snd_pcm_close)(snd_pcm_t *pcm); static int (*ALSA_snd_pcm_close)(snd_pcm_t *pcm);
static snd_pcm_sframes_t (*ALSA_snd_pcm_writei) static snd_pcm_sframes_t (*ALSA_snd_pcm_writei)(snd_pcm_t *, const void *, snd_pcm_uframes_t);
(snd_pcm_t *, const void *, snd_pcm_uframes_t); static snd_pcm_sframes_t (*ALSA_snd_pcm_readi)(snd_pcm_t *, void *, snd_pcm_uframes_t);
static snd_pcm_sframes_t (*ALSA_snd_pcm_readi)
(snd_pcm_t *, void *, snd_pcm_uframes_t);
static int (*ALSA_snd_pcm_recover)(snd_pcm_t *, int, int); static int (*ALSA_snd_pcm_recover)(snd_pcm_t *, int, int);
static int (*ALSA_snd_pcm_prepare)(snd_pcm_t *); static int (*ALSA_snd_pcm_prepare)(snd_pcm_t *);
static int (*ALSA_snd_pcm_drain)(snd_pcm_t *); static int (*ALSA_snd_pcm_drain)(snd_pcm_t *);
static const char *(*ALSA_snd_strerror)(int); static const char *(*ALSA_snd_strerror)(int);
static size_t (*ALSA_snd_pcm_hw_params_sizeof)(void); static size_t (*ALSA_snd_pcm_hw_params_sizeof)(void);
static size_t (*ALSA_snd_pcm_sw_params_sizeof)(void); static size_t (*ALSA_snd_pcm_sw_params_sizeof)(void);
static void (*ALSA_snd_pcm_hw_params_copy) static void (*ALSA_snd_pcm_hw_params_copy)(snd_pcm_hw_params_t *, const snd_pcm_hw_params_t *);
(snd_pcm_hw_params_t *, const snd_pcm_hw_params_t *);
static int (*ALSA_snd_pcm_hw_params_any)(snd_pcm_t *, snd_pcm_hw_params_t *); static int (*ALSA_snd_pcm_hw_params_any)(snd_pcm_t *, snd_pcm_hw_params_t *);
static int (*ALSA_snd_pcm_hw_params_set_access) static int (*ALSA_snd_pcm_hw_params_set_access)(snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_access_t);
(snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_access_t); static int (*ALSA_snd_pcm_hw_params_set_format)(snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_format_t);
static int (*ALSA_snd_pcm_hw_params_set_format) static int (*ALSA_snd_pcm_hw_params_set_channels)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int);
(snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_format_t); static int (*ALSA_snd_pcm_hw_params_get_channels)(const snd_pcm_hw_params_t *, unsigned int *);
static int (*ALSA_snd_pcm_hw_params_set_channels) static int (*ALSA_snd_pcm_hw_params_set_rate_near)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, int *);
(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int); static int (*ALSA_snd_pcm_hw_params_set_period_size_near)(snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_uframes_t *, int *);
static int (*ALSA_snd_pcm_hw_params_get_channels) static int (*ALSA_snd_pcm_hw_params_get_period_size)(const snd_pcm_hw_params_t *, snd_pcm_uframes_t *, int *);
(const snd_pcm_hw_params_t *, unsigned int *); static int (*ALSA_snd_pcm_hw_params_set_periods_min)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, int *);
static int (*ALSA_snd_pcm_hw_params_set_rate_near) static int (*ALSA_snd_pcm_hw_params_set_periods_first)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, int *);
(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, int *); static int (*ALSA_snd_pcm_hw_params_get_periods)(const snd_pcm_hw_params_t *, unsigned int *, int *);
static int (*ALSA_snd_pcm_hw_params_set_period_size_near) static int (*ALSA_snd_pcm_hw_params_set_buffer_size_near)(snd_pcm_t *pcm, snd_pcm_hw_params_t *, snd_pcm_uframes_t *);
(snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_uframes_t *, int *); static int (*ALSA_snd_pcm_hw_params_get_buffer_size)(const snd_pcm_hw_params_t *, snd_pcm_uframes_t *);
static int (*ALSA_snd_pcm_hw_params_get_period_size)
(const snd_pcm_hw_params_t *, snd_pcm_uframes_t *, int *);
static int (*ALSA_snd_pcm_hw_params_set_periods_min)
(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, int *);
static int (*ALSA_snd_pcm_hw_params_set_periods_first)
(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, int *);
static int (*ALSA_snd_pcm_hw_params_get_periods)
(const snd_pcm_hw_params_t *, unsigned int *, int *);
static int (*ALSA_snd_pcm_hw_params_set_buffer_size_near)
(snd_pcm_t *pcm, snd_pcm_hw_params_t *, snd_pcm_uframes_t *);
static int (*ALSA_snd_pcm_hw_params_get_buffer_size)
(const snd_pcm_hw_params_t *, snd_pcm_uframes_t *);
static int (*ALSA_snd_pcm_hw_params)(snd_pcm_t *, snd_pcm_hw_params_t *); static int (*ALSA_snd_pcm_hw_params)(snd_pcm_t *, snd_pcm_hw_params_t *);
static int (*ALSA_snd_pcm_sw_params_current)(snd_pcm_t *, static int (*ALSA_snd_pcm_sw_params_current)(snd_pcm_t *,
snd_pcm_sw_params_t *); snd_pcm_sw_params_t *);
static int (*ALSA_snd_pcm_sw_params_set_start_threshold) static int (*ALSA_snd_pcm_sw_params_set_start_threshold)(snd_pcm_t *, snd_pcm_sw_params_t *, snd_pcm_uframes_t);
(snd_pcm_t *, snd_pcm_sw_params_t *, snd_pcm_uframes_t);
static int (*ALSA_snd_pcm_sw_params)(snd_pcm_t *, snd_pcm_sw_params_t *); static int (*ALSA_snd_pcm_sw_params)(snd_pcm_t *, snd_pcm_sw_params_t *);
static int (*ALSA_snd_pcm_nonblock)(snd_pcm_t *, int); static int (*ALSA_snd_pcm_nonblock)(snd_pcm_t *, int);
static int (*ALSA_snd_pcm_wait)(snd_pcm_t *, int); static int (*ALSA_snd_pcm_wait)(snd_pcm_t *, int);
static int (*ALSA_snd_pcm_sw_params_set_avail_min) static int (*ALSA_snd_pcm_sw_params_set_avail_min)(snd_pcm_t *, snd_pcm_sw_params_t *, snd_pcm_uframes_t);
(snd_pcm_t *, snd_pcm_sw_params_t *, snd_pcm_uframes_t);
static int (*ALSA_snd_pcm_reset)(snd_pcm_t *); static int (*ALSA_snd_pcm_reset)(snd_pcm_t *);
static int (*ALSA_snd_device_name_hint)(int, const char *, void ***); static int (*ALSA_snd_device_name_hint)(int, const char *, void ***);
static char *(*ALSA_snd_device_name_get_hint)(const void *, const char *); static char *(*ALSA_snd_device_name_get_hint)(const void *, const char *);
@ -110,8 +92,7 @@ static int (*ALSA_snd_pcm_chmap_print) (const snd_pcm_chmap_t *map, size_t maxle
static const char *alsa_library = SDL_AUDIO_DRIVER_ALSA_DYNAMIC; static const char *alsa_library = SDL_AUDIO_DRIVER_ALSA_DYNAMIC;
static void *alsa_handle = NULL; static void *alsa_handle = NULL;
static int static int load_alsa_sym(const char *fn, void **addr)
load_alsa_sym(const char *fn, void **addr)
{ {
*addr = SDL_LoadFunction(alsa_handle, fn); *addr = SDL_LoadFunction(alsa_handle, fn);
if (*addr == NULL) { if (*addr == NULL) {
@ -124,13 +105,13 @@ load_alsa_sym(const char *fn, void **addr)
/* 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_ALSA_SYM(x) \ #define SDL_ALSA_SYM(x) \
if (!load_alsa_sym(#x, (void **) (char *) &ALSA_##x)) return -1 if (!load_alsa_sym(#x, (void **)(char *)&ALSA_##x)) \
return -1
#else #else
#define SDL_ALSA_SYM(x) ALSA_##x = x #define SDL_ALSA_SYM(x) ALSA_##x = x
#endif #endif
static int static int load_alsa_syms(void)
load_alsa_syms(void)
{ {
SDL_ALSA_SYM(snd_pcm_open); SDL_ALSA_SYM(snd_pcm_open);
SDL_ALSA_SYM(snd_pcm_close); SDL_ALSA_SYM(snd_pcm_close);
@ -180,8 +161,7 @@ load_alsa_syms(void)
#ifdef SDL_AUDIO_DRIVER_ALSA_DYNAMIC #ifdef SDL_AUDIO_DRIVER_ALSA_DYNAMIC
static void static void UnloadALSALibrary(void)
UnloadALSALibrary(void)
{ {
if (alsa_handle != NULL) { if (alsa_handle != NULL) {
SDL_UnloadObject(alsa_handle); SDL_UnloadObject(alsa_handle);
@ -189,8 +169,7 @@ UnloadALSALibrary(void)
} }
} }
static int static int LoadALSALibrary(void)
LoadALSALibrary(void)
{ {
int retval = 0; int retval = 0;
if (alsa_handle == NULL) { if (alsa_handle == NULL) {
@ -210,13 +189,11 @@ LoadALSALibrary(void)
#else #else
static void static void UnloadALSALibrary(void)
UnloadALSALibrary(void)
{ {
} }
static int static int LoadALSALibrary(void)
LoadALSALibrary(void)
{ {
load_alsa_syms(); load_alsa_syms();
return 0; return 0;
@ -224,8 +201,7 @@ LoadALSALibrary(void)
#endif /* SDL_AUDIO_DRIVER_ALSA_DYNAMIC */ #endif /* SDL_AUDIO_DRIVER_ALSA_DYNAMIC */
static const char * static const char *get_audio_device(void *handle, const int channels)
get_audio_device(void *handle, const int channels)
{ {
const char *device; const char *device;
@ -248,10 +224,8 @@ get_audio_device(void *handle, const int channels)
return "default"; return "default";
} }
/* 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 void static void ALSA_WaitDevice(_THIS)
ALSA_WaitDevice(_THIS)
{ {
#if SDL_ALSA_NON_BLOCKING #if SDL_ALSA_NON_BLOCKING
const snd_pcm_sframes_t needed = (snd_pcm_sframes_t)this->spec.samples; const snd_pcm_sframes_t needed = (snd_pcm_sframes_t)this->spec.samples;
@ -273,7 +247,6 @@ ALSA_WaitDevice(_THIS)
#endif #endif
} }
/* !!! FIXME: is there a channel swizzler in alsalib instead? */ /* !!! FIXME: is there a channel swizzler in alsalib instead? */
/* /*
* https://bugzilla.libsdl.org/show_bug.cgi?id=110 * https://bugzilla.libsdl.org/show_bug.cgi?id=110
@ -281,17 +254,21 @@ ALSA_WaitDevice(_THIS)
* and for Windows DirectX [and CoreAudio], this is FL-FR-C-LFE-RL-RR" * and for Windows DirectX [and CoreAudio], this is FL-FR-C-LFE-RL-RR"
*/ */
#define SWIZ6(T) \ #define SWIZ6(T) \
static void swizzle_alsa_channels_6_##T(void *buffer, const Uint32 bufferlen) { \ static void swizzle_alsa_channels_6_##T(void *buffer, const Uint32 bufferlen) \
{ \
T *ptr = (T *)buffer; \ T *ptr = (T *)buffer; \
Uint32 i; \ Uint32 i; \
for (i = 0; i < bufferlen; i++, ptr += 6) { \ for (i = 0; i < bufferlen; i++, ptr += 6) { \
T tmp; \ T tmp; \
tmp = ptr[2]; ptr[2] = ptr[4]; ptr[4] = tmp; \ tmp = ptr[2]; \
tmp = ptr[3]; ptr[3] = ptr[5]; ptr[5] = tmp; \ ptr[2] = ptr[4]; \
ptr[4] = tmp; \
tmp = ptr[3]; \
ptr[3] = ptr[5]; \
ptr[5] = tmp; \
} \ } \
} }
/* !!! FIXME: is there a channel swizzler in alsalib instead? */ /* !!! FIXME: is there a channel swizzler in alsalib instead? */
/* !!! FIXME: this screams for a SIMD shuffle operation. */ /* !!! FIXME: this screams for a SIMD shuffle operation. */
/* /*
@ -300,7 +277,8 @@ static void swizzle_alsa_channels_6_##T(void *buffer, const Uint32 bufferlen) {
* and for Windows DirectX [and CoreAudio], this is FL-FR-C-LFE-SL-SR-RL-RR" * and for Windows DirectX [and CoreAudio], this is FL-FR-C-LFE-SL-SR-RL-RR"
*/ */
#define SWIZ8(T) \ #define SWIZ8(T) \
static void swizzle_alsa_channels_8_##T(void *buffer, const Uint32 bufferlen) { \ static void swizzle_alsa_channels_8_##T(void *buffer, const Uint32 bufferlen) \
{ \
T *ptr = (T *)buffer; \ T *ptr = (T *)buffer; \
Uint32 i; \ Uint32 i; \
for (i = 0; i < bufferlen; i++, ptr += 6) { \ for (i = 0; i < bufferlen; i++, ptr += 6) { \
@ -332,44 +310,50 @@ CHANNEL_SWIZZLE(SWIZ8)
#undef SWIZ6 #undef SWIZ6
#undef SWIZ8 #undef SWIZ8
/* /*
* Called right before feeding this->hidden->mixbuf to the hardware. Swizzle * Called right before feeding this->hidden->mixbuf to the hardware. Swizzle
* channels from Windows/Mac order to the format alsalib will want. * channels from Windows/Mac order to the format alsalib will want.
*/ */
static void static void swizzle_alsa_channels(_THIS, void *buffer, Uint32 bufferlen)
swizzle_alsa_channels(_THIS, void *buffer, Uint32 bufferlen)
{ {
switch (this->spec.channels) { switch (this->spec.channels) {
#define CHANSWIZ(chans) \ #define CHANSWIZ(chans) \
case chans: \ case chans: \
switch ((this->spec.format & (0xFF))) { \ switch ((this->spec.format & (0xFF))) { \
case 8: swizzle_alsa_channels_##chans##_Uint8(buffer, bufferlen); break; \ case 8: \
case 16: swizzle_alsa_channels_##chans##_Uint16(buffer, bufferlen); break; \ swizzle_alsa_channels_##chans##_Uint8(buffer, bufferlen); \
case 32: swizzle_alsa_channels_##chans##_Uint32(buffer, bufferlen); break; \ break; \
case 64: swizzle_alsa_channels_##chans##_Uint64(buffer, bufferlen); break; \ case 16: \
default: SDL_assert(!"unhandled bitsize"); break; \ swizzle_alsa_channels_##chans##_Uint16(buffer, bufferlen); \
break; \
case 32: \
swizzle_alsa_channels_##chans##_Uint32(buffer, bufferlen); \
break; \
case 64: \
swizzle_alsa_channels_##chans##_Uint64(buffer, bufferlen); \
break; \
default: \
SDL_assert(!"unhandled bitsize"); \
break; \
} \ } \
return; return;
CHANSWIZ(6); CHANSWIZ(6);
CHANSWIZ(8); CHANSWIZ(8);
#undef CHANSWIZ #undef CHANSWIZ
default: break; default:
break;
} }
} }
#ifdef SND_CHMAP_API_VERSION #ifdef SND_CHMAP_API_VERSION
/* Some devices have the right channel map, no swizzling necessary */ /* Some devices have the right channel map, no swizzling necessary */
static void static void no_swizzle(_THIS, void *buffer, Uint32 bufferlen)
no_swizzle(_THIS, void *buffer, Uint32 bufferlen)
{ {
} }
#endif /* SND_CHMAP_API_VERSION */ #endif /* SND_CHMAP_API_VERSION */
static void ALSA_PlayDevice(_THIS)
static void
ALSA_PlayDevice(_THIS)
{ {
const Uint8 *sample_buf = (const Uint8 *)this->hidden->mixbuf; const Uint8 *sample_buf = (const Uint8 *)this->hidden->mixbuf;
const int frame_size = ((SDL_AUDIO_BITSIZE(this->spec.format)) / 8) * const int frame_size = ((SDL_AUDIO_BITSIZE(this->spec.format)) / 8) *
@ -410,14 +394,12 @@ ALSA_PlayDevice(_THIS)
} }
} }
static Uint8 * static Uint8 *ALSA_GetDeviceBuf(_THIS)
ALSA_GetDeviceBuf(_THIS)
{ {
return this->hidden->mixbuf; return this->hidden->mixbuf;
} }
static int static int ALSA_CaptureFromDevice(_THIS, void *buffer, int buflen)
ALSA_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
Uint8 *sample_buf = (Uint8 *)buffer; Uint8 *sample_buf = (Uint8 *)buffer;
const int frame_size = ((SDL_AUDIO_BITSIZE(this->spec.format)) / 8) * const int frame_size = ((SDL_AUDIO_BITSIZE(this->spec.format)) / 8) *
@ -459,14 +441,12 @@ ALSA_CaptureFromDevice(_THIS, void *buffer, int buflen)
return (total_frames - frames_left) * frame_size; return (total_frames - frames_left) * frame_size;
} }
static void static void ALSA_FlushCapture(_THIS)
ALSA_FlushCapture(_THIS)
{ {
ALSA_snd_pcm_reset(this->hidden->pcm_handle); ALSA_snd_pcm_reset(this->hidden->pcm_handle);
} }
static void static void ALSA_CloseDevice(_THIS)
ALSA_CloseDevice(_THIS)
{ {
if (this->hidden->pcm_handle) { if (this->hidden->pcm_handle) {
/* Wait for the submitted audio to drain /* Wait for the submitted audio to drain
@ -481,8 +461,7 @@ ALSA_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static int static int ALSA_set_buffer_size(_THIS, snd_pcm_hw_params_t *params)
ALSA_set_buffer_size(_THIS, snd_pcm_hw_params_t *params)
{ {
int status; int status;
snd_pcm_hw_params_t *hwparams; snd_pcm_hw_params_t *hwparams;
@ -537,8 +516,7 @@ ALSA_set_buffer_size(_THIS, snd_pcm_hw_params_t *params)
return 0; return 0;
} }
static int static int ALSA_OpenDevice(_THIS, const char *devname)
ALSA_OpenDevice(_THIS, const char *devname)
{ {
int status = 0; int status = 0;
SDL_bool iscapture = this->iscapture; SDL_bool iscapture = this->iscapture;
@ -728,8 +706,7 @@ typedef struct ALSA_Device
struct ALSA_Device *next; struct ALSA_Device *next;
} ALSA_Device; } ALSA_Device;
static void static void add_device(const int iscapture, const char *name, void *hint, ALSA_Device **pSeen)
add_device(const int iscapture, const char *name, void *hint, ALSA_Device **pSeen)
{ {
ALSA_Device *dev = SDL_malloc(sizeof(ALSA_Device)); ALSA_Device *dev = SDL_malloc(sizeof(ALSA_Device));
char *desc; char *desc;
@ -788,11 +765,9 @@ add_device(const int iscapture, const char *name, void *hint, ALSA_Device **pSee
*pSeen = dev; *pSeen = dev;
} }
static ALSA_Device *hotplug_devices = NULL; static ALSA_Device *hotplug_devices = NULL;
static void static void ALSA_HotplugIteration(void)
ALSA_HotplugIteration(void)
{ {
void **hints = NULL; void **hints = NULL;
ALSA_Device *dev; ALSA_Device *dev;
@ -925,8 +900,7 @@ ALSA_HotplugIteration(void)
static SDL_atomic_t ALSA_hotplug_shutdown; static SDL_atomic_t ALSA_hotplug_shutdown;
static SDL_Thread *ALSA_hotplug_thread; static SDL_Thread *ALSA_hotplug_thread;
static int SDLCALL static int SDLCALL ALSA_HotplugThread(void *arg)
ALSA_HotplugThread(void *arg)
{ {
SDL_SetThreadPriority(SDL_THREAD_PRIORITY_LOW); SDL_SetThreadPriority(SDL_THREAD_PRIORITY_LOW);
@ -944,8 +918,7 @@ ALSA_HotplugThread(void *arg)
} }
#endif #endif
static void static void ALSA_DetectDevices(void)
ALSA_DetectDevices(void)
{ {
ALSA_HotplugIteration(); /* run once now before a thread continues to check. */ ALSA_HotplugIteration(); /* run once now before a thread continues to check. */
@ -956,8 +929,7 @@ ALSA_DetectDevices(void)
#endif #endif
} }
static void static void ALSA_Deinitialize(void)
ALSA_Deinitialize(void)
{ {
ALSA_Device *dev; ALSA_Device *dev;
ALSA_Device *next; ALSA_Device *next;
@ -982,8 +954,7 @@ ALSA_Deinitialize(void)
UnloadALSALibrary(); UnloadALSALibrary();
} }
static SDL_bool static SDL_bool ALSA_Init(SDL_AudioDriverImpl *impl)
ALSA_Init(SDL_AudioDriverImpl * impl)
{ {
if (LoadALSALibrary() < 0) { if (LoadALSALibrary() < 0) {
return SDL_FALSE; return SDL_FALSE;
@ -1006,7 +977,6 @@ ALSA_Init(SDL_AudioDriverImpl * impl)
return SDL_TRUE; /* this audio target is available. */ return SDL_TRUE; /* this audio target is available. */
} }
AudioBootStrap ALSA_bootstrap = { AudioBootStrap ALSA_bootstrap = {
"alsa", "ALSA PCM audio", ALSA_Init, SDL_FALSE "alsa", "ALSA PCM audio", ALSA_Init, SDL_FALSE
}; };

View File

@ -34,8 +34,7 @@
static SDL_AudioDevice *audioDevice = NULL; static SDL_AudioDevice *audioDevice = NULL;
static SDL_AudioDevice *captureDevice = NULL; static SDL_AudioDevice *captureDevice = NULL;
static int static int ANDROIDAUDIO_OpenDevice(_THIS, const char *devname)
ANDROIDAUDIO_OpenDevice(_THIS, const char *devname)
{ {
SDL_AudioFormat test_format; SDL_AudioFormat test_format;
SDL_bool iscapture = this->iscapture; SDL_bool iscapture = this->iscapture;
@ -77,32 +76,27 @@ ANDROIDAUDIO_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static void static void ANDROIDAUDIO_PlayDevice(_THIS)
ANDROIDAUDIO_PlayDevice(_THIS)
{ {
Android_JNI_WriteAudioBuffer(); Android_JNI_WriteAudioBuffer();
} }
static Uint8 * static Uint8 *ANDROIDAUDIO_GetDeviceBuf(_THIS)
ANDROIDAUDIO_GetDeviceBuf(_THIS)
{ {
return Android_JNI_GetAudioBuffer(); return Android_JNI_GetAudioBuffer();
} }
static int static int ANDROIDAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
ANDROIDAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
return Android_JNI_CaptureAudioBuffer(buffer, buflen); return Android_JNI_CaptureAudioBuffer(buffer, buflen);
} }
static void static void ANDROIDAUDIO_FlushCapture(_THIS)
ANDROIDAUDIO_FlushCapture(_THIS)
{ {
Android_JNI_FlushCapturedAudio(); Android_JNI_FlushCapturedAudio();
} }
static void static void ANDROIDAUDIO_CloseDevice(_THIS)
ANDROIDAUDIO_CloseDevice(_THIS)
{ {
/* At this point SDL_CloseAudioDevice via close_audio_device took care of terminating the audio thread /* At this point SDL_CloseAudioDevice via close_audio_device took care of terminating the audio thread
so it's safe to terminate the Java side buffer and AudioTrack so it's safe to terminate the Java side buffer and AudioTrack
@ -118,8 +112,7 @@ ANDROIDAUDIO_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static SDL_bool static SDL_bool ANDROIDAUDIO_Init(SDL_AudioDriverImpl *impl)
ANDROIDAUDIO_Init(SDL_AudioDriverImpl * impl)
{ {
/* Set the function pointers */ /* Set the function pointers */
impl->OpenDevice = ANDROIDAUDIO_OpenDevice; impl->OpenDevice = ANDROIDAUDIO_OpenDevice;
@ -203,4 +196,3 @@ void ANDROIDAUDIO_PauseDevices(void) {}
#endif /* SDL_AUDIO_DRIVER_ANDROID */ #endif /* SDL_AUDIO_DRIVER_ANDROID */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -46,7 +46,6 @@
} }
#endif #endif
#if MACOSX_COREAUDIO #if MACOSX_COREAUDIO
static const AudioObjectPropertyAddress devlist_address = { static const AudioObjectPropertyAddress devlist_address = {
kAudioHardwarePropertyDevices, kAudioHardwarePropertyDevices,
@ -66,8 +65,7 @@ typedef struct AudioDeviceList
static AudioDeviceList *output_devs = NULL; static AudioDeviceList *output_devs = NULL;
static AudioDeviceList *capture_devs = NULL; static AudioDeviceList *capture_devs = NULL;
static SDL_bool static SDL_bool add_to_internal_dev_list(const int iscapture, AudioDeviceID devId)
add_to_internal_dev_list(const int iscapture, AudioDeviceID devId)
{ {
AudioDeviceList *item = (AudioDeviceList *)SDL_malloc(sizeof(AudioDeviceList)); AudioDeviceList *item = (AudioDeviceList *)SDL_malloc(sizeof(AudioDeviceList));
if (item == NULL) { if (item == NULL) {
@ -85,16 +83,14 @@ add_to_internal_dev_list(const int iscapture, AudioDeviceID devId)
return SDL_TRUE; return SDL_TRUE;
} }
static void static void addToDevList(const char *name, SDL_AudioSpec *spec, const int iscapture, AudioDeviceID devId, void *data)
addToDevList(const char *name, SDL_AudioSpec *spec, const int iscapture, AudioDeviceID devId, void *data)
{ {
if (add_to_internal_dev_list(iscapture, devId)) { if (add_to_internal_dev_list(iscapture, devId)) {
SDL_AddAudioDevice(iscapture, name, spec, (void *)((size_t)devId)); SDL_AddAudioDevice(iscapture, name, spec, (void *)((size_t)devId));
} }
} }
static void static void build_device_list(int iscapture, addDevFn addfn, void *addfndata)
build_device_list(int iscapture, addDevFn addfn, void *addfndata)
{ {
OSStatus result = noErr; OSStatus result = noErr;
UInt32 size = 0; UInt32 size = 0;
@ -182,8 +178,7 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata)
ptr = (char *)SDL_malloc(len + 1); ptr = (char *)SDL_malloc(len + 1);
usable = ((ptr != NULL) && usable = ((ptr != NULL) &&
(CFStringGetCString (CFStringGetCString(cfstr, ptr, len + 1, kCFStringEncodingUTF8)));
(cfstr, ptr, len + 1, kCFStringEncodingUTF8)));
CFRelease(cfstr); CFRelease(cfstr);
@ -210,8 +205,7 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata)
} }
} }
static void static void free_audio_device_list(AudioDeviceList **list)
free_audio_device_list(AudioDeviceList **list)
{ {
AudioDeviceList *item = *list; AudioDeviceList *item = *list;
while (item) { while (item) {
@ -222,15 +216,13 @@ free_audio_device_list(AudioDeviceList **list)
*list = NULL; *list = NULL;
} }
static void static void COREAUDIO_DetectDevices(void)
COREAUDIO_DetectDevices(void)
{ {
build_device_list(SDL_TRUE, addToDevList, NULL); build_device_list(SDL_TRUE, addToDevList, NULL);
build_device_list(SDL_FALSE, addToDevList, NULL); build_device_list(SDL_FALSE, addToDevList, NULL);
} }
static void static void build_device_change_list(const char *name, SDL_AudioSpec *spec, const int iscapture, AudioDeviceID devId, void *data)
build_device_change_list(const char *name, SDL_AudioSpec *spec, const int iscapture, AudioDeviceID devId, void *data)
{ {
AudioDeviceList **list = (AudioDeviceList **)data; AudioDeviceList **list = (AudioDeviceList **)data;
AudioDeviceList *item; AudioDeviceList *item;
@ -245,8 +237,7 @@ build_device_change_list(const char *name, SDL_AudioSpec *spec, const int iscapt
SDL_AddAudioDevice(iscapture, name, spec, (void *)((size_t)devId)); SDL_AddAudioDevice(iscapture, name, spec, (void *)((size_t)devId));
} }
static void static void reprocess_device_list(const int iscapture, AudioDeviceList **list)
reprocess_device_list(const int iscapture, AudioDeviceList **list)
{ {
AudioDeviceList *item; AudioDeviceList *item;
AudioDeviceList *prev = NULL; AudioDeviceList *prev = NULL;
@ -276,8 +267,7 @@ reprocess_device_list(const int iscapture, AudioDeviceList **list)
} }
/* this is called when the system's list of available audio devices changes. */ /* this is called when the system's list of available audio devices changes. */
static OSStatus static OSStatus device_list_changed(AudioObjectID systemObj, UInt32 num_addr, const AudioObjectPropertyAddress *addrs, void *data)
device_list_changed(AudioObjectID systemObj, UInt32 num_addr, const AudioObjectPropertyAddress *addrs, void *data)
{ {
reprocess_device_list(SDL_TRUE, &capture_devs); reprocess_device_list(SDL_TRUE, &capture_devs);
reprocess_device_list(SDL_FALSE, &output_devs); reprocess_device_list(SDL_FALSE, &output_devs);
@ -285,7 +275,6 @@ device_list_changed(AudioObjectID systemObj, UInt32 num_addr, const AudioObjectP
} }
#endif #endif
static int open_playback_devices; static int open_playback_devices;
static int open_capture_devices; static int open_capture_devices;
static int num_open_devices; static int num_open_devices;
@ -337,9 +326,7 @@ static void interruption_begin(_THIS)
static void interruption_end(_THIS) static void interruption_end(_THIS)
{ {
if (this != NULL && this->hidden != NULL && this->hidden->audioQueue != NULL if (this != NULL && this->hidden != NULL && this->hidden->audioQueue != NULL && this->hidden->interrupted && AudioQueueStart(this->hidden->audioQueue, NULL) == AVAudioSessionErrorCodeNone) {
&& this->hidden->interrupted
&& AudioQueueStart(this->hidden->audioQueue, NULL) == AVAudioSessionErrorCodeNone) {
this->hidden->interrupted = SDL_FALSE; this->hidden->interrupted = SDL_FALSE;
} }
} }
@ -514,10 +501,8 @@ static BOOL update_audio_session(_THIS, SDL_bool open, SDL_bool allow_playandrec
} }
#endif #endif
/* The AudioQueue callback */ /* The AudioQueue callback */
static void static void outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer)
outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer)
{ {
SDL_AudioDevice *this = (SDL_AudioDevice *)inUserData; SDL_AudioDevice *this = (SDL_AudioDevice *)inUserData;
@ -581,8 +566,7 @@ outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffe
if (len > remaining) { if (len > remaining) {
len = remaining; len = remaining;
} }
SDL_memcpy(ptr, (char *)this->hidden->buffer + SDL_memcpy(ptr, (char *)this->hidden->buffer + this->hidden->bufferOffset, len);
this->hidden->bufferOffset, len);
ptr = ptr + len; ptr = ptr + len;
remaining -= len; remaining -= len;
this->hidden->bufferOffset += len; this->hidden->bufferOffset += len;
@ -596,8 +580,7 @@ outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffe
SDL_UnlockMutex(this->mixer_lock); SDL_UnlockMutex(this->mixer_lock);
} }
static void static void inputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer,
inputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime, UInt32 inNumberPacketDescriptions, const AudioTimeStamp *inStartTime, UInt32 inNumberPacketDescriptions,
const AudioStreamPacketDescription *inPacketDescs) const AudioStreamPacketDescription *inPacketDescs)
{ {
@ -634,17 +617,14 @@ inputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer
AudioQueueEnqueueBuffer(this->hidden->audioQueue, inBuffer, 0, NULL); AudioQueueEnqueueBuffer(this->hidden->audioQueue, inBuffer, 0, NULL);
} }
#if MACOSX_COREAUDIO #if MACOSX_COREAUDIO
static const AudioObjectPropertyAddress alive_address = static const AudioObjectPropertyAddress alive_address = {
{
kAudioDevicePropertyDeviceIsAlive, kAudioDevicePropertyDeviceIsAlive,
kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyScopeGlobal,
kAudioObjectPropertyElementMain kAudioObjectPropertyElementMain
}; };
static OSStatus static OSStatus device_unplugged(AudioObjectID devid, UInt32 num_addr, const AudioObjectPropertyAddress *addrs, void *data)
device_unplugged(AudioObjectID devid, UInt32 num_addr, const AudioObjectPropertyAddress *addrs, void *data)
{ {
SDL_AudioDevice *this = (SDL_AudioDevice *)data; SDL_AudioDevice *this = (SDL_AudioDevice *)data;
SDL_bool dead = SDL_FALSE; SDL_bool dead = SDL_FALSE;
@ -673,8 +653,7 @@ device_unplugged(AudioObjectID devid, UInt32 num_addr, const AudioObjectProperty
} }
/* macOS calls this when the default device changed (if we have a default device open). */ /* macOS calls this when the default device changed (if we have a default device open). */
static OSStatus static OSStatus default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress *inAddresses, void *inUserData)
default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress *inAddresses, void *inUserData)
{ {
SDL_AudioDevice *this = (SDL_AudioDevice *)inUserData; SDL_AudioDevice *this = (SDL_AudioDevice *)inUserData;
#if DEBUG_COREAUDIO #if DEBUG_COREAUDIO
@ -685,8 +664,7 @@ default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const
} }
#endif #endif
static void static void COREAUDIO_CloseDevice(_THIS)
COREAUDIO_CloseDevice(_THIS)
{ {
const SDL_bool iscapture = this->iscapture; const SDL_bool iscapture = this->iscapture;
int i; int i;
@ -748,8 +726,7 @@ COREAUDIO_CloseDevice(_THIS)
} }
#if MACOSX_COREAUDIO #if MACOSX_COREAUDIO
static int static int prepare_device(_THIS)
prepare_device(_THIS)
{ {
void *handle = this->handle; void *handle = this->handle;
SDL_bool iscapture = this->iscapture; SDL_bool iscapture = this->iscapture;
@ -768,21 +745,18 @@ prepare_device(_THIS)
if (handle == NULL) { if (handle == NULL) {
size = sizeof(AudioDeviceID); size = sizeof(AudioDeviceID);
addr.mSelector = addr.mSelector =
((iscapture) ? kAudioHardwarePropertyDefaultInputDevice : ((iscapture) ? kAudioHardwarePropertyDefaultInputDevice : kAudioHardwarePropertyDefaultOutputDevice);
kAudioHardwarePropertyDefaultOutputDevice);
result = AudioObjectGetPropertyData(kAudioObjectSystemObject, &addr, result = AudioObjectGetPropertyData(kAudioObjectSystemObject, &addr,
0, NULL, &size, &devid); 0, NULL, &size, &devid);
CHECK_RESULT("AudioHardwareGetProperty (default device)"); CHECK_RESULT("AudioHardwareGetProperty (default device)");
} }
addr.mSelector = kAudioDevicePropertyDeviceIsAlive; addr.mSelector = kAudioDevicePropertyDeviceIsAlive;
addr.mScope = iscapture ? kAudioDevicePropertyScopeInput : addr.mScope = iscapture ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput;
kAudioDevicePropertyScopeOutput;
size = sizeof(alive); size = sizeof(alive);
result = AudioObjectGetPropertyData(devid, &addr, 0, NULL, &size, &alive); result = AudioObjectGetPropertyData(devid, &addr, 0, NULL, &size, &alive);
CHECK_RESULT CHECK_RESULT("AudioDeviceGetProperty (kAudioDevicePropertyDeviceIsAlive)");
("AudioDeviceGetProperty (kAudioDevicePropertyDeviceIsAlive)");
if (!alive) { if (!alive) {
SDL_SetError("CoreAudio: requested device exists, but isn't alive."); SDL_SetError("CoreAudio: requested device exists, but isn't alive.");
@ -803,8 +777,7 @@ prepare_device(_THIS)
return 1; return 1;
} }
static int static int assign_device_to_audioqueue(_THIS)
assign_device_to_audioqueue(_THIS)
{ {
const AudioObjectPropertyAddress prop = { const AudioObjectPropertyAddress prop = {
kAudioDevicePropertyDeviceUID, kAudioDevicePropertyDeviceUID,
@ -824,8 +797,7 @@ assign_device_to_audioqueue(_THIS)
} }
#endif #endif
static int static int prepare_audioqueue(_THIS)
prepare_audioqueue(_THIS)
{ {
const AudioStreamBasicDescription *strdesc = &this->hidden->strdesc; const AudioStreamBasicDescription *strdesc = &this->hidden->strdesc;
const int iscapture = this->iscapture; const int iscapture = this->iscapture;
@ -833,7 +805,8 @@ prepare_audioqueue(_THIS)
int i, numAudioBuffers = 2; int i, numAudioBuffers = 2;
AudioChannelLayout layout; AudioChannelLayout layout;
double MINIMUM_AUDIO_BUFFER_TIME_MS; double MINIMUM_AUDIO_BUFFER_TIME_MS;
const double msecs = (this->spec.samples / ((double) this->spec.freq)) * 1000.0;; const double msecs = (this->spec.samples / ((double)this->spec.freq)) * 1000.0;
;
SDL_assert(CFRunLoopGetCurrent() != NULL); SDL_assert(CFRunLoopGetCurrent() != NULL);
@ -948,8 +921,7 @@ prepare_audioqueue(_THIS)
return 1; return 1;
} }
static int static int audioqueue_thread(void *arg)
audioqueue_thread(void *arg)
{ {
SDL_AudioDevice *this = (SDL_AudioDevice *)arg; SDL_AudioDevice *this = (SDL_AudioDevice *)arg;
int rc; int rc;
@ -1025,8 +997,7 @@ audioqueue_thread(void *arg)
return 0; return 0;
} }
static int static int COREAUDIO_OpenDevice(_THIS, const char *devname)
COREAUDIO_OpenDevice(_THIS, const char *devname)
{ {
AudioStreamBasicDescription *strdesc; AudioStreamBasicDescription *strdesc;
SDL_AudioFormat test_format; SDL_AudioFormat test_format;
@ -1151,8 +1122,7 @@ COREAUDIO_OpenDevice(_THIS, const char *devname)
} }
#if !MACOSX_COREAUDIO #if !MACOSX_COREAUDIO
static int static int COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
{ {
AVAudioSession *session = [AVAudioSession sharedInstance]; AVAudioSession *session = [AVAudioSession sharedInstance];
@ -1165,8 +1135,7 @@ COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
return 0; return 0;
} }
#else /* MACOSX_COREAUDIO */ #else /* MACOSX_COREAUDIO */
static int static int COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
{ {
AudioDeviceID devid; AudioDeviceID devid;
AudioBufferList *buflist; AudioBufferList *buflist;
@ -1286,8 +1255,7 @@ COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
} }
#endif /* MACOSX_COREAUDIO */ #endif /* MACOSX_COREAUDIO */
static void static void COREAUDIO_Deinitialize(void)
COREAUDIO_Deinitialize(void)
{ {
#if MACOSX_COREAUDIO #if MACOSX_COREAUDIO
AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &devlist_address, device_list_changed, NULL); AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &devlist_address, device_list_changed, NULL);
@ -1296,8 +1264,7 @@ COREAUDIO_Deinitialize(void)
#endif #endif
} }
static SDL_bool static SDL_bool COREAUDIO_Init(SDL_AudioDriverImpl *impl)
COREAUDIO_Init(SDL_AudioDriverImpl * impl)
{ {
/* Set the function pointers */ /* Set the function pointers */
impl->OpenDevice = COREAUDIO_OpenDevice; impl->OpenDevice = COREAUDIO_OpenDevice;

View File

@ -54,8 +54,7 @@ static fnDirectSoundCaptureEnumerateW pDirectSoundCaptureEnumerateW = NULL;
static const GUID SDL_KSDATAFORMAT_SUBTYPE_PCM = { 0x00000001, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } }; static const GUID SDL_KSDATAFORMAT_SUBTYPE_PCM = { 0x00000001, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } };
static const GUID SDL_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = { 0x00000003, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } }; static const GUID SDL_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = { 0x00000003, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } };
static void static void DSOUND_Unload(void)
DSOUND_Unload(void)
{ {
pDirectSoundCreate8 = NULL; pDirectSoundCreate8 = NULL;
pDirectSoundEnumerateW = NULL; pDirectSoundEnumerateW = NULL;
@ -68,9 +67,7 @@ DSOUND_Unload(void)
} }
} }
static int DSOUND_Load(void)
static int
DSOUND_Load(void)
{ {
int loaded = 0; int loaded = 0;
@ -81,9 +78,11 @@ DSOUND_Load(void)
SDL_SetError("DirectSound: failed to load DSOUND.DLL"); SDL_SetError("DirectSound: failed to load DSOUND.DLL");
} else { } else {
/* Now make sure we have DirectX 8 or better... */ /* Now make sure we have DirectX 8 or better... */
#define DSOUNDLOAD(f) { \ #define DSOUNDLOAD(f) \
{ \
p##f = (fn##f)SDL_LoadFunction(DSoundDLL, #f); \ p##f = (fn##f)SDL_LoadFunction(DSoundDLL, #f); \
if (!p##f) loaded = 0; \ if (!p##f) \
loaded = 0; \
} }
loaded = 1; /* will reset if necessary. */ loaded = 1; /* will reset if necessary. */
DSOUNDLOAD(DirectSoundCreate8); DSOUNDLOAD(DirectSoundCreate8);
@ -104,8 +103,7 @@ DSOUND_Load(void)
return loaded; return loaded;
} }
static int static int SetDSerror(const char *function, int code)
SetDSerror(const char *function, int code)
{ {
const char *error; const char *error;
@ -151,14 +149,12 @@ SetDSerror(const char *function, int code)
return SDL_SetError("%s: %s (0x%x)", function, error, code); return SDL_SetError("%s: %s (0x%x)", function, error, code);
} }
static void static void DSOUND_FreeDeviceHandle(void *handle)
DSOUND_FreeDeviceHandle(void *handle)
{ {
SDL_free(handle); SDL_free(handle);
} }
static int static int DSOUND_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
DSOUND_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
{ {
#if HAVE_MMDEVICEAPI_H #if HAVE_MMDEVICEAPI_H
if (SupportsIMMDevice) { if (SupportsIMMDevice) {
@ -168,8 +164,7 @@ DSOUND_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
return SDL_Unsupported(); return SDL_Unsupported();
} }
static BOOL CALLBACK static BOOL CALLBACK FindAllDevs(LPGUID guid, LPCWSTR desc, LPCWSTR module, LPVOID data)
FindAllDevs(LPGUID guid, LPCWSTR desc, LPCWSTR module, LPVOID data)
{ {
const int iscapture = (int)((size_t)data); const int iscapture = (int)((size_t)data);
if (guid != NULL) { /* skip default device */ if (guid != NULL) { /* skip default device */
@ -189,8 +184,7 @@ FindAllDevs(LPGUID guid, LPCWSTR desc, LPCWSTR module, LPVOID data)
return TRUE; /* keep enumerating. */ return TRUE; /* keep enumerating. */
} }
static void static void DSOUND_DetectDevices(void)
DSOUND_DetectDevices(void)
{ {
#if HAVE_MMDEVICEAPI_H #if HAVE_MMDEVICEAPI_H
if (SupportsIMMDevice) { if (SupportsIMMDevice) {
@ -204,9 +198,7 @@ DSOUND_DetectDevices(void)
#endif /* HAVE_MMDEVICEAPI_H*/ #endif /* HAVE_MMDEVICEAPI_H*/
} }
static void DSOUND_WaitDevice(_THIS)
static void
DSOUND_WaitDevice(_THIS)
{ {
DWORD status = 0; DWORD status = 0;
DWORD cursor = 0; DWORD cursor = 0;
@ -263,8 +255,7 @@ DSOUND_WaitDevice(_THIS)
} }
} }
static void static void DSOUND_PlayDevice(_THIS)
DSOUND_PlayDevice(_THIS)
{ {
/* Unlock the buffer, allowing it to play */ /* Unlock the buffer, allowing it to play */
if (this->hidden->locked_buf) { if (this->hidden->locked_buf) {
@ -274,8 +265,7 @@ DSOUND_PlayDevice(_THIS)
} }
} }
static Uint8 * static Uint8 *DSOUND_GetDeviceBuf(_THIS)
DSOUND_GetDeviceBuf(_THIS)
{ {
DWORD cursor = 0; DWORD cursor = 0;
DWORD junk = 0; DWORD junk = 0;
@ -322,8 +312,7 @@ DSOUND_GetDeviceBuf(_THIS)
IDirectSoundBuffer_Restore(this->hidden->mixbuf); IDirectSoundBuffer_Restore(this->hidden->mixbuf);
result = IDirectSoundBuffer_Lock(this->hidden->mixbuf, cursor, result = IDirectSoundBuffer_Lock(this->hidden->mixbuf, cursor,
this->spec.size, this->spec.size,
(LPVOID *) & this-> (LPVOID *)&this->hidden->locked_buf, &rawlen, NULL,
hidden->locked_buf, &rawlen, NULL,
&junk, 0); &junk, 0);
} }
if (result != DS_OK) { if (result != DS_OK) {
@ -333,8 +322,7 @@ DSOUND_GetDeviceBuf(_THIS)
return this->hidden->locked_buf; return this->hidden->locked_buf;
} }
static int static int DSOUND_CaptureFromDevice(_THIS, void *buffer, int buflen)
DSOUND_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
struct SDL_PrivateAudioData *h = this->hidden; struct SDL_PrivateAudioData *h = this->hidden;
DWORD junk, cursor, ptr1len, ptr2len; DWORD junk, cursor, ptr1len, ptr2len;
@ -377,8 +365,7 @@ DSOUND_CaptureFromDevice(_THIS, void *buffer, int buflen)
return ptr1len; return ptr1len;
} }
static void static void DSOUND_FlushCapture(_THIS)
DSOUND_FlushCapture(_THIS)
{ {
struct SDL_PrivateAudioData *h = this->hidden; struct SDL_PrivateAudioData *h = this->hidden;
DWORD junk, cursor; DWORD junk, cursor;
@ -387,8 +374,7 @@ DSOUND_FlushCapture(_THIS)
} }
} }
static void static void DSOUND_CloseDevice(_THIS)
DSOUND_CloseDevice(_THIS)
{ {
if (this->hidden->mixbuf != NULL) { if (this->hidden->mixbuf != NULL) {
IDirectSoundBuffer_Stop(this->hidden->mixbuf); IDirectSoundBuffer_Stop(this->hidden->mixbuf);
@ -411,8 +397,7 @@ DSOUND_CloseDevice(_THIS)
number of audio chunks available in the created buffer. This is for number of audio chunks available in the created buffer. This is for
playback devices, not capture. playback devices, not capture.
*/ */
static int static int CreateSecondary(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt)
CreateSecondary(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt)
{ {
LPDIRECTSOUND sndObj = this->hidden->sound; LPDIRECTSOUND sndObj = this->hidden->sound;
LPDIRECTSOUNDBUFFER *sndbuf = &this->hidden->mixbuf; LPDIRECTSOUNDBUFFER *sndbuf = &this->hidden->mixbuf;
@ -454,8 +439,7 @@ CreateSecondary(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt)
number of audio chunks available in the created buffer. This is for number of audio chunks available in the created buffer. This is for
capture devices, not playback. capture devices, not playback.
*/ */
static int static int CreateCaptureBuffer(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt)
CreateCaptureBuffer(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt)
{ {
LPDIRECTSOUNDCAPTURE capture = this->hidden->capture; LPDIRECTSOUNDCAPTURE capture = this->hidden->capture;
LPDIRECTSOUNDCAPTUREBUFFER *capturebuf = &this->hidden->capturebuf; LPDIRECTSOUNDCAPTUREBUFFER *capturebuf = &this->hidden->capturebuf;
@ -494,8 +478,7 @@ CreateCaptureBuffer(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt)
return 0; return 0;
} }
static int static int DSOUND_OpenDevice(_THIS, const char *devname)
DSOUND_OpenDevice(_THIS, const char *devname)
{ {
const DWORD numchunks = 8; const DWORD numchunks = 8;
HRESULT result; HRESULT result;
@ -565,8 +548,7 @@ DSOUND_OpenDevice(_THIS, const char *devname)
} }
wfmt.Samples.wValidBitsPerSample = SDL_AUDIO_BITSIZE(this->spec.format); wfmt.Samples.wValidBitsPerSample = SDL_AUDIO_BITSIZE(this->spec.format);
switch (this->spec.channels) switch (this->spec.channels) {
{
case 3: /* 3.0 (or 2.1) */ case 3: /* 3.0 (or 2.1) */
wfmt.dwChannelMask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER; wfmt.dwChannelMask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER;
break; break;
@ -626,9 +608,7 @@ DSOUND_OpenDevice(_THIS, const char *devname)
return 0; /* good to go. */ return 0; /* good to go. */
} }
static void DSOUND_Deinitialize(void)
static void
DSOUND_Deinitialize(void)
{ {
#if HAVE_MMDEVICEAPI_H #if HAVE_MMDEVICEAPI_H
if (SupportsIMMDevice) { if (SupportsIMMDevice) {
@ -639,9 +619,7 @@ DSOUND_Deinitialize(void)
DSOUND_Unload(); DSOUND_Unload();
} }
static SDL_bool DSOUND_Init(SDL_AudioDriverImpl *impl)
static SDL_bool
DSOUND_Init(SDL_AudioDriverImpl * impl)
{ {
if (!DSOUND_Load()) { if (!DSOUND_Load()) {
return SDL_FALSE; return SDL_FALSE;

View File

@ -40,14 +40,12 @@
#define DISKENVR_IODELAY "SDL_DISKAUDIODELAY" #define DISKENVR_IODELAY "SDL_DISKAUDIODELAY"
/* 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 void static void DISKAUDIO_WaitDevice(_THIS)
DISKAUDIO_WaitDevice(_THIS)
{ {
SDL_Delay(_this->hidden->io_delay); SDL_Delay(_this->hidden->io_delay);
} }
static void static void DISKAUDIO_PlayDevice(_THIS)
DISKAUDIO_PlayDevice(_THIS)
{ {
const size_t written = SDL_RWwrite(_this->hidden->io, const size_t written = SDL_RWwrite(_this->hidden->io,
_this->hidden->mixbuf, _this->hidden->mixbuf,
@ -62,14 +60,12 @@ DISKAUDIO_PlayDevice(_THIS)
#endif #endif
} }
static Uint8 * static Uint8 *DISKAUDIO_GetDeviceBuf(_THIS)
DISKAUDIO_GetDeviceBuf(_THIS)
{ {
return _this->hidden->mixbuf; return _this->hidden->mixbuf;
} }
static int static int DISKAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
DISKAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
struct SDL_PrivateAudioData *h = _this->hidden; struct SDL_PrivateAudioData *h = _this->hidden;
const int origbuflen = buflen; const int origbuflen = buflen;
@ -92,15 +88,12 @@ DISKAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
return origbuflen; return origbuflen;
} }
static void static void DISKAUDIO_FlushCapture(_THIS)
DISKAUDIO_FlushCapture(_THIS)
{ {
/* no op...we don't advance the file pointer or anything. */ /* no op...we don't advance the file pointer or anything. */
} }
static void DISKAUDIO_CloseDevice(_THIS)
static void
DISKAUDIO_CloseDevice(_THIS)
{ {
if (_this->hidden->io != NULL) { if (_this->hidden->io != NULL) {
SDL_RWclose(_this->hidden->io); SDL_RWclose(_this->hidden->io);
@ -109,9 +102,7 @@ DISKAUDIO_CloseDevice(_THIS)
SDL_free(_this->hidden); SDL_free(_this->hidden);
} }
static const char *get_filename(const SDL_bool iscapture, const char *devname)
static const char *
get_filename(const SDL_bool iscapture, const char *devname)
{ {
if (devname == NULL) { if (devname == NULL) {
devname = SDL_getenv(iscapture ? DISKENVR_INFILE : DISKENVR_OUTFILE); devname = SDL_getenv(iscapture ? DISKENVR_INFILE : DISKENVR_OUTFILE);
@ -122,8 +113,7 @@ get_filename(const SDL_bool iscapture, const char *devname)
return devname; return devname;
} }
static int static int DISKAUDIO_OpenDevice(_THIS, const char *devname)
DISKAUDIO_OpenDevice(_THIS, const char *devname)
{ {
void *handle = _this->handle; void *handle = _this->handle;
/* handle != NULL means "user specified the placeholder name on the fake detected device list" */ /* handle != NULL means "user specified the placeholder name on the fake detected device list" */
@ -169,15 +159,13 @@ DISKAUDIO_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static void static void DISKAUDIO_DetectDevices(void)
DISKAUDIO_DetectDevices(void)
{ {
SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *)0x1); SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *)0x1);
SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *)0x2); SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *)0x2);
} }
static SDL_bool static SDL_bool DISKAUDIO_Init(SDL_AudioDriverImpl *impl)
DISKAUDIO_Init(SDL_AudioDriverImpl * impl)
{ {
/* Set the function pointers */ /* Set the function pointers */
impl->OpenDevice = DISKAUDIO_OpenDevice; impl->OpenDevice = DISKAUDIO_OpenDevice;

View File

@ -40,16 +40,12 @@
#include "../SDL_audiodev_c.h" #include "../SDL_audiodev_c.h"
#include "SDL_dspaudio.h" #include "SDL_dspaudio.h"
static void DSP_DetectDevices(void)
static void
DSP_DetectDevices(void)
{ {
SDL_EnumUnixAudioDevices(0, NULL); SDL_EnumUnixAudioDevices(0, NULL);
} }
static void DSP_CloseDevice(_THIS)
static void
DSP_CloseDevice(_THIS)
{ {
if (this->hidden->audio_fd >= 0) { if (this->hidden->audio_fd >= 0) {
close(this->hidden->audio_fd); close(this->hidden->audio_fd);
@ -58,9 +54,7 @@ DSP_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static int DSP_OpenDevice(_THIS, const char *devname)
static int
DSP_OpenDevice(_THIS, const char *devname)
{ {
SDL_bool iscapture = this->iscapture; SDL_bool iscapture = this->iscapture;
const int flags = ((iscapture) ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT); const int flags = ((iscapture) ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT);
@ -203,7 +197,8 @@ DSP_OpenDevice(_THIS, const char *devname)
SDL_CalculateAudioSpec(&this->spec); SDL_CalculateAudioSpec(&this->spec);
/* Determine the power of two of the fragment size */ /* Determine the power of two of the fragment size */
for (frag_spec = 0; (0x01U << frag_spec) < this->spec.size; ++frag_spec); for (frag_spec = 0; (0x01U << frag_spec) < this->spec.size; ++frag_spec)
;
if ((0x01U << frag_spec) != this->spec.size) { if ((0x01U << frag_spec) != this->spec.size) {
return SDL_SetError("Fragment size must be a power of two"); return SDL_SetError("Fragment size must be a power of two");
} }
@ -242,9 +237,7 @@ DSP_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static void DSP_PlayDevice(_THIS)
static void
DSP_PlayDevice(_THIS)
{ {
struct SDL_PrivateAudioData *h = this->hidden; struct SDL_PrivateAudioData *h = this->hidden;
if (write(h->audio_fd, h->mixbuf, h->mixlen) == -1) { if (write(h->audio_fd, h->mixbuf, h->mixlen) == -1) {
@ -256,20 +249,17 @@ DSP_PlayDevice(_THIS)
#endif #endif
} }
static Uint8 * static Uint8 *DSP_GetDeviceBuf(_THIS)
DSP_GetDeviceBuf(_THIS)
{ {
return this->hidden->mixbuf; return this->hidden->mixbuf;
} }
static int static int DSP_CaptureFromDevice(_THIS, void *buffer, int buflen)
DSP_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
return (int)read(this->hidden->audio_fd, buffer, buflen); return (int)read(this->hidden->audio_fd, buffer, buflen);
} }
static void static void DSP_FlushCapture(_THIS)
DSP_FlushCapture(_THIS)
{ {
struct SDL_PrivateAudioData *h = this->hidden; struct SDL_PrivateAudioData *h = this->hidden;
audio_buf_info info; audio_buf_info info;
@ -287,16 +277,14 @@ DSP_FlushCapture(_THIS)
} }
static SDL_bool InitTimeDevicesExist = SDL_FALSE; static SDL_bool InitTimeDevicesExist = SDL_FALSE;
static int static int look_for_devices_test(int fd)
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 0; return 0;
} }
static SDL_bool static SDL_bool DSP_Init(SDL_AudioDriverImpl *impl)
DSP_Init(SDL_AudioDriverImpl * impl)
{ {
InitTimeDevicesExist = SDL_FALSE; InitTimeDevicesExist = SDL_FALSE;
SDL_EnumUnixAudioDevices(0, look_for_devices_test); SDL_EnumUnixAudioDevices(0, look_for_devices_test);
@ -320,7 +308,6 @@ DSP_Init(SDL_AudioDriverImpl * impl)
return SDL_TRUE; /* this audio target is available. */ return SDL_TRUE; /* this audio target is available. */
} }
AudioBootStrap DSP_bootstrap = { AudioBootStrap DSP_bootstrap = {
"dsp", "OSS /dev/dsp standard audio", DSP_Init, SDL_FALSE "dsp", "OSS /dev/dsp standard audio", DSP_Init, SDL_FALSE
}; };

View File

@ -25,15 +25,14 @@
#include "../SDL_audio_c.h" #include "../SDL_audio_c.h"
#include "SDL_dummyaudio.h" #include "SDL_dummyaudio.h"
static int static int DUMMYAUDIO_OpenDevice(_THIS, const char *devname)
DUMMYAUDIO_OpenDevice(_THIS, const char *devname)
{ {
_this->hidden = (void *)0x1; /* just something non-NULL */ _this->hidden = (void *)0x1; /* just something non-NULL */
return 0; /* always succeeds. */ return 0; /* always succeeds. */
} }
static int static int DUMMYAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
DUMMYAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
/* Delay to make this sort of simulate real audio input. */ /* Delay to make this sort of simulate real audio input. */
SDL_Delay((_this->spec.samples * 1000) / _this->spec.freq); SDL_Delay((_this->spec.samples * 1000) / _this->spec.freq);
@ -43,8 +42,7 @@ DUMMYAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
return buflen; return buflen;
} }
static SDL_bool static SDL_bool DUMMYAUDIO_Init(SDL_AudioDriverImpl *impl)
DUMMYAUDIO_Init(SDL_AudioDriverImpl * impl)
{ {
/* Set the function pointers */ /* Set the function pointers */
impl->OpenDevice = DUMMYAUDIO_OpenDevice; impl->OpenDevice = DUMMYAUDIO_OpenDevice;

View File

@ -32,10 +32,10 @@
!!! FIXME: true always once pthread support becomes widespread. Revisit this code !!! FIXME: true always once pthread support becomes widespread. Revisit this code
!!! FIXME: at some point and see what needs to be done for that! */ !!! FIXME: at some point and see what needs to be done for that! */
static void static void FeedAudioDevice(_THIS, const void *buf, const int buflen)
FeedAudioDevice(_THIS, const void *buf, const int buflen)
{ {
const int framelen = (SDL_AUDIO_BITSIZE(this->spec.format) / 8) * this->spec.channels; const int framelen = (SDL_AUDIO_BITSIZE(this->spec.format) / 8) * this->spec.channels;
/* *INDENT-OFF* */ /* clang-format off */
MAIN_THREAD_EM_ASM({ MAIN_THREAD_EM_ASM({
var SDL3 = Module['SDL3']; var SDL3 = Module['SDL3'];
var numChannels = SDL3.audio.currentOutputBuffer['numberOfChannels']; var numChannels = SDL3.audio.currentOutputBuffer['numberOfChannels'];
@ -50,10 +50,10 @@ FeedAudioDevice(_THIS, const void *buf, const int buflen)
} }
} }
}, buf, buflen / framelen); }, buf, buflen / framelen);
/* *INDENT-ON* */ /* clang-format on */
} }
static void static void HandleAudioProcess(_THIS)
HandleAudioProcess(_THIS)
{ {
SDL_AudioCallback callback = this->callbackspec.callback; SDL_AudioCallback callback = this->callbackspec.callback;
const int stream_len = this->callbackspec.size; const int stream_len = this->callbackspec.size;
@ -93,8 +93,7 @@ HandleAudioProcess(_THIS)
FeedAudioDevice(this, this->work_buffer, this->spec.size); FeedAudioDevice(this, this->work_buffer, this->spec.size);
} }
static void static void HandleCaptureProcess(_THIS)
HandleCaptureProcess(_THIS)
{ {
SDL_AudioCallback callback = this->callbackspec.callback; SDL_AudioCallback callback = this->callbackspec.callback;
const int stream_len = this->callbackspec.size; const int stream_len = this->callbackspec.size;
@ -105,6 +104,7 @@ HandleCaptureProcess(_THIS)
return; return;
} }
/* *INDENT-OFF* */ /* clang-format off */
MAIN_THREAD_EM_ASM({ MAIN_THREAD_EM_ASM({
var SDL3 = Module['SDL3']; var SDL3 = Module['SDL3'];
var numChannels = SDL3.capture.currentCaptureBuffer.numberOfChannels; var numChannels = SDL3.capture.currentCaptureBuffer.numberOfChannels;
@ -125,6 +125,7 @@ HandleCaptureProcess(_THIS)
} }
} }
}, this->work_buffer, (this->spec.size / sizeof (float)) / this->spec.channels); }, this->work_buffer, (this->spec.size / sizeof (float)) / this->spec.channels);
/* *INDENT-ON* */ /* clang-format on */
/* okay, we've got an interleaved float32 array in C now. */ /* okay, we've got an interleaved float32 array in C now. */
@ -147,10 +148,9 @@ HandleCaptureProcess(_THIS)
} }
} }
static void EMSCRIPTENAUDIO_CloseDevice(_THIS)
static void
EMSCRIPTENAUDIO_CloseDevice(_THIS)
{ {
/* *INDENT-OFF* */ /* clang-format off */
MAIN_THREAD_EM_ASM({ MAIN_THREAD_EM_ASM({
var SDL3 = Module['SDL3']; var SDL3 = Module['SDL3'];
if ($0) { if ($0) {
@ -189,14 +189,14 @@ EMSCRIPTENAUDIO_CloseDevice(_THIS)
SDL3.audioContext = undefined; SDL3.audioContext = undefined;
} }
}, this->iscapture); }, this->iscapture);
/* *INDENT-ON* */ /* clang-format on */
#if 0 /* !!! FIXME: currently not used. Can we move some stuff off the SDL3 namespace? --ryan. */ #if 0 /* !!! FIXME: currently not used. Can we move some stuff off the SDL3 namespace? --ryan. */
SDL_free(this->hidden); SDL_free(this->hidden);
#endif #endif
} }
static int static int EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname)
EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname)
{ {
SDL_AudioFormat test_format; SDL_AudioFormat test_format;
SDL_bool iscapture = this->iscapture; SDL_bool iscapture = this->iscapture;
@ -204,6 +204,7 @@ EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname)
/* based on parts of library_sdl.js */ /* based on parts of library_sdl.js */
/* *INDENT-OFF* */ /* clang-format off */
/* create context */ /* create context */
result = MAIN_THREAD_EM_ASM_INT({ result = MAIN_THREAD_EM_ASM_INT({
if (typeof(Module['SDL3']) === 'undefined') { if (typeof(Module['SDL3']) === 'undefined') {
@ -228,6 +229,8 @@ EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname)
} }
return SDL3.audioContext === undefined ? -1 : 0; return SDL3.audioContext === undefined ? -1 : 0;
}, iscapture); }, iscapture);
/* *INDENT-ON* */ /* clang-format on */
if (result < 0) { if (result < 0) {
return SDL_SetError("Web Audio API is not available!"); return SDL_SetError("Web Audio API is not available!");
} }
@ -267,6 +270,7 @@ EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname)
SDL_CalculateAudioSpec(&this->spec); SDL_CalculateAudioSpec(&this->spec);
/* *INDENT-OFF* */ /* clang-format off */
if (iscapture) { if (iscapture) {
/* The idea is to take the capture media stream, hook it up to an /* The idea is to take the capture media stream, hook it up to an
audio graph where we can pass it through a ScriptProcessorNode audio graph where we can pass it through a ScriptProcessorNode
@ -338,17 +342,16 @@ EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname)
SDL3.audio.scriptProcessorNode['connect'](SDL3.audioContext['destination']); SDL3.audio.scriptProcessorNode['connect'](SDL3.audioContext['destination']);
}, this->spec.channels, this->spec.samples, HandleAudioProcess, this); }, this->spec.channels, this->spec.samples, HandleAudioProcess, this);
} }
/* *INDENT-ON* */ /* clang-format on */
return 0; return 0;
} }
static void static void EMSCRIPTENAUDIO_LockOrUnlockDeviceWithNoMixerLock(SDL_AudioDevice *device)
EMSCRIPTENAUDIO_LockOrUnlockDeviceWithNoMixerLock(SDL_AudioDevice * device)
{ {
} }
static SDL_bool static SDL_bool EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl *impl)
EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl * impl)
{ {
SDL_bool available, capture_available; SDL_bool available, capture_available;
@ -362,6 +365,7 @@ EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl * impl)
impl->LockDevice = impl->UnlockDevice = EMSCRIPTENAUDIO_LockOrUnlockDeviceWithNoMixerLock; impl->LockDevice = impl->UnlockDevice = EMSCRIPTENAUDIO_LockOrUnlockDeviceWithNoMixerLock;
impl->ProvidesOwnCallbackThread = SDL_TRUE; impl->ProvidesOwnCallbackThread = SDL_TRUE;
/* *INDENT-OFF* */ /* clang-format off */
/* check availability */ /* check availability */
available = MAIN_THREAD_EM_ASM_INT({ available = MAIN_THREAD_EM_ASM_INT({
if (typeof(AudioContext) !== 'undefined') { if (typeof(AudioContext) !== 'undefined') {
@ -371,11 +375,13 @@ EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl * impl)
} }
return false; return false;
}); });
/* *INDENT-ON* */ /* clang-format on */
if (!available) { if (!available) {
SDL_SetError("No audio context available"); SDL_SetError("No audio context available");
} }
/* *INDENT-OFF* */ /* clang-format off */
capture_available = available && MAIN_THREAD_EM_ASM_INT({ capture_available = available && MAIN_THREAD_EM_ASM_INT({
if ((typeof(navigator.mediaDevices) !== 'undefined') && (typeof(navigator.mediaDevices.getUserMedia) !== 'undefined')) { if ((typeof(navigator.mediaDevices) !== 'undefined') && (typeof(navigator.mediaDevices.getUserMedia) !== 'undefined')) {
return true; return true;
@ -384,6 +390,7 @@ EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl * impl)
} }
return false; return false;
}); });
/* *INDENT-ON* */ /* clang-format on */
impl->HasCaptureSupport = capture_available ? SDL_TRUE : SDL_FALSE; impl->HasCaptureSupport = capture_available ? SDL_TRUE : SDL_FALSE;
impl->OnlyHasDefaultCaptureDevice = capture_available ? SDL_TRUE : SDL_FALSE; impl->OnlyHasDefaultCaptureDevice = capture_available ? SDL_TRUE : SDL_FALSE;

View File

@ -41,8 +41,7 @@ extern "C"
/* !!! FIXME: have the callback call the higher level to avoid code dupe. */ /* !!! FIXME: have the callback call the higher level to avoid code dupe. */
/* The Haiku callback for handling the audio buffer */ /* The Haiku callback for handling the audio buffer */
static void static void FillSound(void *device, void *stream, size_t len,
FillSound(void *device, void *stream, size_t len,
const media_raw_audio_format & format) const media_raw_audio_format & format)
{ {
SDL_AudioDevice *audio = (SDL_AudioDevice *) device; SDL_AudioDevice *audio = (SDL_AudioDevice *) device;
@ -84,8 +83,7 @@ FillSound(void *device, void *stream, size_t len,
SDL_UnlockMutex(audio->mixer_lock); SDL_UnlockMutex(audio->mixer_lock);
} }
static void static void HAIKUAUDIO_CloseDevice(_THIS)
HAIKUAUDIO_CloseDevice(_THIS)
{ {
if (_this->hidden->audio_obj) { if (_this->hidden->audio_obj) {
_this->hidden->audio_obj->Stop(); _this->hidden->audio_obj->Stop();
@ -99,8 +97,7 @@ static const int sig_list[] = {
SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGWINCH, 0 SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGWINCH, 0
}; };
static inline void static inline void MaskSignals(sigset_t * omask)
MaskSignals(sigset_t * omask)
{ {
sigset_t mask; sigset_t mask;
int i; int i;
@ -112,15 +109,13 @@ MaskSignals(sigset_t * omask)
sigprocmask(SIG_BLOCK, &mask, omask); sigprocmask(SIG_BLOCK, &mask, omask);
} }
static inline void static inline void UnmaskSignals(sigset_t * omask)
UnmaskSignals(sigset_t * omask)
{ {
sigprocmask(SIG_SETMASK, omask, NULL); sigprocmask(SIG_SETMASK, omask, NULL);
} }
static int static int HAIKUAUDIO_OpenDevice(_THIS, const char *devname)
HAIKUAUDIO_OpenDevice(_THIS, const char *devname)
{ {
media_raw_audio_format format; media_raw_audio_format format;
SDL_AudioFormat test_format; SDL_AudioFormat test_format;
@ -207,14 +202,12 @@ HAIKUAUDIO_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static void static void HAIKUAUDIO_Deinitialize(void)
HAIKUAUDIO_Deinitialize(void)
{ {
SDL_QuitBeApp(); SDL_QuitBeApp();
} }
static SDL_bool static SDL_bool HAIKUAUDIO_Init(SDL_AudioDriverImpl * impl)
HAIKUAUDIO_Init(SDL_AudioDriverImpl * impl)
{ {
/* Initialize the Be Application, if it's not already started */ /* Initialize the Be Application, if it's not already started */
if (SDL_InitBeApp() < 0) { if (SDL_InitBeApp() < 0) {

View File

@ -26,7 +26,6 @@
#include "SDL_jackaudio.h" #include "SDL_jackaudio.h"
#include "../../thread/SDL_systhread.h" #include "../../thread/SDL_systhread.h"
static jack_client_t *(*JACK_jack_client_open)(const char *, jack_options_t, jack_status_t *, ...); static jack_client_t *(*JACK_jack_client_open)(const char *, jack_options_t, jack_status_t *, ...);
static int (*JACK_jack_client_close)(jack_client_t *); static int (*JACK_jack_client_close)(jack_client_t *);
static void (*JACK_jack_on_shutdown)(jack_client_t *, JackShutdownCallback, void *); static void (*JACK_jack_on_shutdown)(jack_client_t *, JackShutdownCallback, void *);
@ -47,15 +46,13 @@ static int (*JACK_jack_set_process_callback) (jack_client_t *, JackProcessCallba
static int load_jack_syms(void); static int load_jack_syms(void);
#ifdef SDL_AUDIO_DRIVER_JACK_DYNAMIC #ifdef SDL_AUDIO_DRIVER_JACK_DYNAMIC
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 static int load_jack_sym(const char *fn, void **addr)
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) {
@ -68,10 +65,10 @@ load_jack_sym(const char *fn, void **addr)
/* 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)) return -1 if (!load_jack_sym(#x, (void **)(char *)&JACK_##x)) \
return -1
static void static void UnloadJackLibrary(void)
UnloadJackLibrary(void)
{ {
if (jack_handle != NULL) { if (jack_handle != NULL) {
SDL_UnloadObject(jack_handle); SDL_UnloadObject(jack_handle);
@ -79,8 +76,7 @@ UnloadJackLibrary(void)
} }
} }
static int static int LoadJackLibrary(void)
LoadJackLibrary(void)
{ {
int retval = 0; int retval = 0;
if (jack_handle == NULL) { if (jack_handle == NULL) {
@ -102,13 +98,11 @@ LoadJackLibrary(void)
#define SDL_JACK_SYM(x) JACK_##x = x #define SDL_JACK_SYM(x) JACK_##x = x
static void static void UnloadJackLibrary(void)
UnloadJackLibrary(void)
{ {
} }
static int static int LoadJackLibrary(void)
LoadJackLibrary(void)
{ {
load_jack_syms(); load_jack_syms();
return 0; return 0;
@ -116,9 +110,7 @@ LoadJackLibrary(void)
#endif /* SDL_AUDIO_DRIVER_JACK_DYNAMIC */ #endif /* SDL_AUDIO_DRIVER_JACK_DYNAMIC */
static int load_jack_syms(void)
static int
load_jack_syms(void)
{ {
SDL_JACK_SYM(jack_client_open); SDL_JACK_SYM(jack_client_open);
SDL_JACK_SYM(jack_client_close); SDL_JACK_SYM(jack_client_close);
@ -140,9 +132,7 @@ 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_AudioDevice *this = (SDL_AudioDevice *)arg; SDL_AudioDevice *this = (SDL_AudioDevice *)arg;
SDL_OpenedAudioDeviceDisconnected(this); SDL_OpenedAudioDeviceDisconnected(this);
@ -153,8 +143,7 @@ jackShutdownCallback(void *arg) /* JACK went away; device is lost. */
// typedef int(* JackSampleRateCallback)(jack_nframes_t nframes, void *arg) // typedef int(* JackSampleRateCallback)(jack_nframes_t nframes, void *arg)
// typedef int(* JackBufferSizeCallback)(jack_nframes_t nframes, void *arg) // typedef int(* JackBufferSizeCallback)(jack_nframes_t nframes, void *arg)
static int static int jackProcessPlaybackCallback(jack_nframes_t nframes, void *arg)
jackProcessPlaybackCallback(jack_nframes_t nframes, void *arg)
{ {
SDL_AudioDevice *this = (SDL_AudioDevice *)arg; SDL_AudioDevice *this = (SDL_AudioDevice *)arg;
jack_port_t **ports = this->hidden->sdlports; jack_port_t **ports = this->hidden->sdlports;
@ -180,13 +169,11 @@ jackProcessPlaybackCallback(jack_nframes_t nframes, void *arg)
} }
SDL_SemPost(this->hidden->iosem); /* tell SDL thread we're done; refill the buffer. */ SDL_SemPost(this->hidden->iosem); /* tell SDL thread we're done; refill the buffer. */
return 0; /* success */ return 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 void static void JACK_WaitDevice(_THIS)
JACK_WaitDevice(_THIS)
{ {
if (SDL_AtomicGet(&this->enabled)) { if (SDL_AtomicGet(&this->enabled)) {
if (SDL_SemWait(this->hidden->iosem) == -1) { if (SDL_SemWait(this->hidden->iosem) == -1) {
@ -195,15 +182,12 @@ JACK_WaitDevice(_THIS)
} }
} }
static Uint8 * static Uint8 *JACK_GetDeviceBuf(_THIS)
JACK_GetDeviceBuf(_THIS)
{ {
return (Uint8 *)this->hidden->iobuffer; return (Uint8 *)this->hidden->iobuffer;
} }
static int jackProcessCaptureCallback(jack_nframes_t nframes, void *arg)
static int
jackProcessCaptureCallback(jack_nframes_t nframes, void *arg)
{ {
SDL_AudioDevice *this = (SDL_AudioDevice *)arg; SDL_AudioDevice *this = (SDL_AudioDevice *)arg;
if (SDL_AtomicGet(&this->enabled)) { if (SDL_AtomicGet(&this->enabled)) {
@ -226,11 +210,10 @@ jackProcessCaptureCallback(jack_nframes_t nframes, void *arg)
} }
SDL_SemPost(this->hidden->iosem); /* tell SDL thread we're done; new buffer is ready! */ SDL_SemPost(this->hidden->iosem); /* tell SDL thread we're done; new buffer is ready! */
return 0; /* success */ return 0;
} }
static int static int JACK_CaptureFromDevice(_THIS, void *buffer, int buflen)
JACK_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
SDL_assert(buflen == this->spec.size); /* we always fill a full buffer. */ SDL_assert(buflen == this->spec.size); /* we always fill a full buffer. */
@ -243,15 +226,12 @@ JACK_CaptureFromDevice(_THIS, void *buffer, int buflen)
return buflen; return buflen;
} }
static void static void JACK_FlushCapture(_THIS)
JACK_FlushCapture(_THIS)
{ {
SDL_SemWait(this->hidden->iosem); SDL_SemWait(this->hidden->iosem);
} }
static void JACK_CloseDevice(_THIS)
static void
JACK_CloseDevice(_THIS)
{ {
if (this->hidden->client) { if (this->hidden->client) {
JACK_jack_deactivate(this->hidden->client); JACK_jack_deactivate(this->hidden->client);
@ -276,8 +256,7 @@ JACK_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static int static int JACK_OpenDevice(_THIS, const char *devname)
JACK_OpenDevice(_THIS, const char *devname)
{ {
/* Note that JACK uses "output" for capture devices (they output audio /* Note that JACK uses "output" for capture devices (they output audio
data to us) and "input" for playback (we input audio data to them). data to us) and "input" for playback (we input audio data to them).
@ -333,7 +312,6 @@ JACK_OpenDevice(_THIS, const char *devname)
return SDL_SetError("No physical JACK ports available"); return SDL_SetError("No physical JACK ports available");
} }
/* !!! 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. */
@ -397,14 +375,12 @@ JACK_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static void static void JACK_Deinitialize(void)
JACK_Deinitialize(void)
{ {
UnloadJackLibrary(); UnloadJackLibrary();
} }
static SDL_bool static SDL_bool JACK_Init(SDL_AudioDriverImpl *impl)
JACK_Init(SDL_AudioDriverImpl * impl)
{ {
if (LoadJackLibrary() < 0) { if (LoadJackLibrary() < 0) {
return SDL_FALSE; return SDL_FALSE;

View File

@ -22,7 +22,6 @@
#ifdef SDL_AUDIO_DRIVER_N3DS #ifdef SDL_AUDIO_DRIVER_N3DS
/* N3DS Audio driver */ /* N3DS Audio driver */
#include "../SDL_sysaudio.h" #include "../SDL_sysaudio.h"
@ -36,32 +35,27 @@ static SDL_AudioDevice *audio_device;
static void FreePrivateData(_THIS); static void FreePrivateData(_THIS);
static int FindAudioFormat(_THIS); static int FindAudioFormat(_THIS);
static SDL_INLINE void static SDL_INLINE void contextLock(_THIS)
contextLock(_THIS)
{ {
LightLock_Lock(&this->hidden->lock); LightLock_Lock(&this->hidden->lock);
} }
static SDL_INLINE void static SDL_INLINE void contextUnlock(_THIS)
contextUnlock(_THIS)
{ {
LightLock_Unlock(&this->hidden->lock); LightLock_Unlock(&this->hidden->lock);
} }
static void static void N3DSAUD_LockAudio(_THIS)
N3DSAUD_LockAudio(_THIS)
{ {
contextLock(this); contextLock(this);
} }
static void static void N3DSAUD_UnlockAudio(_THIS)
N3DSAUD_UnlockAudio(_THIS)
{ {
contextUnlock(this); contextUnlock(this);
} }
static void static void N3DSAUD_DspHook(DSP_HookType hook)
N3DSAUD_DspHook(DSP_HookType hook)
{ {
if (hook == DSPHOOK_ONCANCEL) { if (hook == DSPHOOK_ONCANCEL) {
contextLock(audio_device); contextLock(audio_device);
@ -72,8 +66,7 @@ N3DSAUD_DspHook(DSP_HookType hook)
} }
} }
static void static void AudioFrameFinished(void *device)
AudioFrameFinished(void *device)
{ {
bool shouldBroadcast = false; bool shouldBroadcast = false;
unsigned i; unsigned i;
@ -95,8 +88,7 @@ AudioFrameFinished(void *device)
contextUnlock(this); contextUnlock(this);
} }
static int static int N3DSAUDIO_OpenDevice(_THIS, const char *devname)
N3DSAUDIO_OpenDevice(_THIS, const char *devname)
{ {
Result ndsp_init_res; Result ndsp_init_res;
Uint8 *data_vaddr; Uint8 *data_vaddr;
@ -186,8 +178,7 @@ N3DSAUDIO_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static int static int N3DSAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
N3DSAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
/* Delay to make this sort of simulate real audio input. */ /* Delay to make this sort of simulate real audio input. */
SDL_Delay((this->spec.samples * 1000) / this->spec.freq); SDL_Delay((this->spec.samples * 1000) / this->spec.freq);
@ -197,8 +188,7 @@ N3DSAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
return buflen; return buflen;
} }
static void static void N3DSAUDIO_PlayDevice(_THIS)
N3DSAUDIO_PlayDevice(_THIS)
{ {
size_t nextbuf; size_t nextbuf;
size_t sampleLen; size_t sampleLen;
@ -224,8 +214,7 @@ N3DSAUDIO_PlayDevice(_THIS)
ndspChnWaveBufAdd(0, &this->hidden->waveBuf[nextbuf]); ndspChnWaveBufAdd(0, &this->hidden->waveBuf[nextbuf]);
} }
static void static void N3DSAUDIO_WaitDevice(_THIS)
N3DSAUDIO_WaitDevice(_THIS)
{ {
contextLock(this); contextLock(this);
while (!this->hidden->isCancelled && while (!this->hidden->isCancelled &&
@ -235,14 +224,12 @@ N3DSAUDIO_WaitDevice(_THIS)
contextUnlock(this); contextUnlock(this);
} }
static Uint8 * static Uint8 *N3DSAUDIO_GetDeviceBuf(_THIS)
N3DSAUDIO_GetDeviceBuf(_THIS)
{ {
return this->hidden->mixbuf; return this->hidden->mixbuf;
} }
static void static void N3DSAUDIO_CloseDevice(_THIS)
N3DSAUDIO_CloseDevice(_THIS)
{ {
contextLock(this); contextLock(this);
@ -262,8 +249,7 @@ N3DSAUDIO_CloseDevice(_THIS)
FreePrivateData(this); FreePrivateData(this);
} }
static void static void N3DSAUDIO_ThreadInit(_THIS)
N3DSAUDIO_ThreadInit(_THIS)
{ {
s32 current_priority; s32 current_priority;
svcGetThreadPriority(&current_priority, CUR_THREAD_HANDLE); svcGetThreadPriority(&current_priority, CUR_THREAD_HANDLE);
@ -273,8 +259,7 @@ N3DSAUDIO_ThreadInit(_THIS)
svcSetThreadPriority(CUR_THREAD_HANDLE, current_priority); svcSetThreadPriority(CUR_THREAD_HANDLE, current_priority);
} }
static SDL_bool static SDL_bool N3DSAUDIO_Init(SDL_AudioDriverImpl *impl)
N3DSAUDIO_Init(SDL_AudioDriverImpl *impl)
{ {
/* Set the function pointers */ /* Set the function pointers */
impl->OpenDevice = N3DSAUDIO_OpenDevice; impl->OpenDevice = N3DSAUDIO_OpenDevice;
@ -304,8 +289,7 @@ AudioBootStrap N3DSAUDIO_bootstrap = {
/** /**
* Cleans up all allocated memory, safe to call with null pointers * Cleans up all allocated memory, safe to call with null pointers
*/ */
static void static void FreePrivateData(_THIS)
FreePrivateData(_THIS)
{ {
if (!this->hidden) { if (!this->hidden) {
return; return;
@ -324,8 +308,7 @@ FreePrivateData(_THIS)
this->hidden = NULL; this->hidden = NULL;
} }
static int static int FindAudioFormat(_THIS)
FindAudioFormat(_THIS)
{ {
SDL_bool found_valid_format = SDL_FALSE; SDL_bool found_valid_format = SDL_FALSE;
Uint16 test_format = SDL_FirstAudioFormat(this->spec.format); Uint16 test_format = SDL_FirstAudioFormat(this->spec.format);

View File

@ -43,15 +43,12 @@
/* #define DEBUG_AUDIO */ /* #define DEBUG_AUDIO */
static void static void NETBSDAUDIO_DetectDevices(void)
NETBSDAUDIO_DetectDevices(void)
{ {
SDL_EnumUnixAudioDevices(0, NULL); SDL_EnumUnixAudioDevices(0, NULL);
} }
static void NETBSDAUDIO_Status(_THIS)
static void
NETBSDAUDIO_Status(_THIS)
{ {
#ifdef DEBUG_AUDIO #ifdef DEBUG_AUDIO
/* *INDENT-OFF* */ /* clang-format off */ /* *INDENT-OFF* */ /* clang-format off */
@ -117,12 +114,11 @@ NETBSDAUDIO_Status(_THIS)
this->spec.format, this->spec.format,
this->spec.size); this->spec.size);
/* *INDENT-ON* */ /* clang-format on */ /* *INDENT-ON* */ /* clang-format on */
#endif /* DEBUG_AUDIO */ #endif /* DEBUG_AUDIO */
} }
static void NETBSDAUDIO_PlayDevice(_THIS)
static void
NETBSDAUDIO_PlayDevice(_THIS)
{ {
struct SDL_PrivateAudioData *h = this->hidden; struct SDL_PrivateAudioData *h = this->hidden;
int written; int written;
@ -141,15 +137,12 @@ NETBSDAUDIO_PlayDevice(_THIS)
#endif #endif
} }
static Uint8 * static Uint8 *NETBSDAUDIO_GetDeviceBuf(_THIS)
NETBSDAUDIO_GetDeviceBuf(_THIS)
{ {
return this->hidden->mixbuf; return this->hidden->mixbuf;
} }
static int NETBSDAUDIO_CaptureFromDevice(_THIS, void *_buffer, int buflen)
static int
NETBSDAUDIO_CaptureFromDevice(_THIS, void *_buffer, int buflen)
{ {
Uint8 *buffer = (Uint8 *)_buffer; Uint8 *buffer = (Uint8 *)_buffer;
int br; int br;
@ -167,8 +160,7 @@ NETBSDAUDIO_CaptureFromDevice(_THIS, void *_buffer, int buflen)
return 0; return 0;
} }
static void static void NETBSDAUDIO_FlushCapture(_THIS)
NETBSDAUDIO_FlushCapture(_THIS)
{ {
audio_info_t info; audio_info_t info;
size_t remain; size_t remain;
@ -189,8 +181,7 @@ NETBSDAUDIO_FlushCapture(_THIS)
} }
} }
static void static void NETBSDAUDIO_CloseDevice(_THIS)
NETBSDAUDIO_CloseDevice(_THIS)
{ {
if (this->hidden->audio_fd >= 0) { if (this->hidden->audio_fd >= 0) {
close(this->hidden->audio_fd); close(this->hidden->audio_fd);
@ -199,8 +190,7 @@ NETBSDAUDIO_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static int static int NETBSDAUDIO_OpenDevice(_THIS, const char *devname)
NETBSDAUDIO_OpenDevice(_THIS, const char *devname)
{ {
SDL_bool iscapture = this->iscapture; SDL_bool iscapture = this->iscapture;
SDL_AudioFormat test_format; SDL_AudioFormat test_format;
@ -239,8 +229,7 @@ NETBSDAUDIO_OpenDevice(_THIS, const char *devname)
* Use the device's native sample rate so the kernel doesn't have to * Use the device's native sample rate so the kernel doesn't have to
* resample. * resample.
*/ */
this->spec.freq = iscapture ? this->spec.freq = iscapture ? hwinfo.record.sample_rate : hwinfo.play.sample_rate;
hwinfo.record.sample_rate : hwinfo.play.sample_rate;
} }
#endif #endif
@ -318,8 +307,7 @@ NETBSDAUDIO_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static SDL_bool static SDL_bool NETBSDAUDIO_Init(SDL_AudioDriverImpl *impl)
NETBSDAUDIO_Init(SDL_AudioDriverImpl * impl)
{ {
/* Set the function pointers */ /* Set the function pointers */
impl->DetectDevices = NETBSDAUDIO_DetectDevices; impl->DetectDevices = NETBSDAUDIO_DetectDevices;
@ -336,7 +324,6 @@ NETBSDAUDIO_Init(SDL_AudioDriverImpl * impl)
return SDL_TRUE; /* this audio target is available. */ return SDL_TRUE; /* this audio target is available. */
} }
AudioBootStrap NETBSDAUDIO_bootstrap = { AudioBootStrap NETBSDAUDIO_bootstrap = {
"netbsd", "NetBSD audio", NETBSDAUDIO_Init, SDL_FALSE "netbsd", "NetBSD audio", NETBSDAUDIO_Init, SDL_FALSE
}; };

View File

@ -127,8 +127,7 @@ static void openslES_DestroyEngine(void)
} }
} }
static int static int openslES_CreateEngine(void)
openslES_CreateEngine(void)
{ {
const SLInterfaceID ids[1] = { SL_IID_VOLUME }; const SLInterfaceID ids[1] = { SL_IID_VOLUME };
const SLboolean req[1] = { SL_BOOLEAN_FALSE }; const SLboolean req[1] = { SL_BOOLEAN_FALSE };
@ -182,8 +181,7 @@ error:
} }
/* this callback handler is called every time a buffer finishes recording */ /* this callback handler is called every time a buffer finishes recording */
static void static void bqRecorderCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
bqRecorderCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
{ {
struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *)context; struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *)context;
@ -191,8 +189,7 @@ bqRecorderCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
SDL_SemPost(audiodata->playsem); SDL_SemPost(audiodata->playsem);
} }
static void static void openslES_DestroyPCMRecorder(_THIS)
openslES_DestroyPCMRecorder(_THIS)
{ {
struct SDL_PrivateAudioData *audiodata = this->hidden; struct SDL_PrivateAudioData *audiodata = this->hidden;
SLresult result; SLresult result;
@ -223,8 +220,7 @@ openslES_DestroyPCMRecorder(_THIS)
} }
} }
static int static int openslES_CreatePCMRecorder(_THIS)
openslES_CreatePCMRecorder(_THIS)
{ {
struct SDL_PrivateAudioData *audiodata = this->hidden; struct SDL_PrivateAudioData *audiodata = this->hidden;
SLDataFormat_PCM format_pcm; SLDataFormat_PCM format_pcm;
@ -362,8 +358,7 @@ failed:
} }
/* this callback handler is called every time a buffer finishes playing */ /* this callback handler is called every time a buffer finishes playing */
static void static void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
{ {
struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *)context; struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *)context;
@ -371,8 +366,7 @@ bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
SDL_SemPost(audiodata->playsem); SDL_SemPost(audiodata->playsem);
} }
static void static void openslES_DestroyPCMPlayer(_THIS)
openslES_DestroyPCMPlayer(_THIS)
{ {
struct SDL_PrivateAudioData *audiodata = this->hidden; struct SDL_PrivateAudioData *audiodata = this->hidden;
SLresult result; SLresult result;
@ -404,8 +398,7 @@ openslES_DestroyPCMPlayer(_THIS)
} }
} }
static int static int openslES_CreatePCMPlayer(_THIS)
openslES_CreatePCMPlayer(_THIS)
{ {
struct SDL_PrivateAudioData *audiodata = this->hidden; struct SDL_PrivateAudioData *audiodata = this->hidden;
SLDataLocator_AndroidSimpleBufferQueue loc_bufq; SLDataLocator_AndroidSimpleBufferQueue loc_bufq;
@ -465,8 +458,7 @@ openslES_CreatePCMPlayer(_THIS)
format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN; format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN;
} }
switch (this->spec.channels) switch (this->spec.channels) {
{
case 1: case 1:
format_pcm.channelMask = SL_SPEAKER_FRONT_LEFT; format_pcm.channelMask = SL_SPEAKER_FRONT_LEFT;
break; break;
@ -595,8 +587,7 @@ failed:
return -1; return -1;
} }
static int static int openslES_OpenDevice(_THIS, const char *devname)
openslES_OpenDevice(_THIS, const char *devname)
{ {
this->hidden = (struct SDL_PrivateAudioData *)SDL_calloc(1, (sizeof *this->hidden)); this->hidden = (struct SDL_PrivateAudioData *)SDL_calloc(1, (sizeof *this->hidden));
if (this->hidden == NULL) { if (this->hidden == NULL) {
@ -624,12 +615,10 @@ openslES_OpenDevice(_THIS, const char *devname)
} else { } else {
return SDL_SetError("Open device failed!"); return SDL_SetError("Open device failed!");
} }
} }
} }
static void static void openslES_WaitDevice(_THIS)
openslES_WaitDevice(_THIS)
{ {
struct SDL_PrivateAudioData *audiodata = this->hidden; struct SDL_PrivateAudioData *audiodata = this->hidden;
@ -639,8 +628,7 @@ openslES_WaitDevice(_THIS)
SDL_SemWait(audiodata->playsem); SDL_SemWait(audiodata->playsem);
} }
static void static void openslES_PlayDevice(_THIS)
openslES_PlayDevice(_THIS)
{ {
struct SDL_PrivateAudioData *audiodata = this->hidden; struct SDL_PrivateAudioData *audiodata = this->hidden;
SLresult result; SLresult result;
@ -674,8 +662,7 @@ openslES_PlayDevice(_THIS)
/* */ /* */
/* okay.. */ /* okay.. */
static Uint8 * static Uint8 *openslES_GetDeviceBuf(_THIS)
openslES_GetDeviceBuf(_THIS)
{ {
struct SDL_PrivateAudioData *audiodata = this->hidden; struct SDL_PrivateAudioData *audiodata = this->hidden;
@ -683,8 +670,7 @@ openslES_GetDeviceBuf(_THIS)
return audiodata->pmixbuff[audiodata->next_buffer]; return audiodata->pmixbuff[audiodata->next_buffer];
} }
static int static int openslES_CaptureFromDevice(_THIS, void *buffer, int buflen)
openslES_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
struct SDL_PrivateAudioData *audiodata = this->hidden; struct SDL_PrivateAudioData *audiodata = this->hidden;
SLresult result; SLresult result;
@ -711,8 +697,7 @@ openslES_CaptureFromDevice(_THIS, void *buffer, int buflen)
return this->spec.size; return this->spec.size;
} }
static void static void openslES_CloseDevice(_THIS)
openslES_CloseDevice(_THIS)
{ {
/* struct SDL_PrivateAudioData *audiodata = this->hidden; */ /* struct SDL_PrivateAudioData *audiodata = this->hidden; */
@ -727,8 +712,7 @@ openslES_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static SDL_bool static SDL_bool openslES_Init(SDL_AudioDriverImpl *impl)
openslES_Init(SDL_AudioDriverImpl * impl)
{ {
LOGI("openslES_Init() called"); LOGI("openslES_Init() called");

View File

@ -123,8 +123,7 @@ static int pipewire_version_patch;
static const char *pipewire_library = SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC; static const char *pipewire_library = SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC;
static void *pipewire_handle = NULL; static void *pipewire_handle = NULL;
static int static int pipewire_dlsym(const char *fn, void **addr)
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) {
@ -140,8 +139,7 @@ pipewire_dlsym(const char *fn, void **addr)
return -1; \ return -1; \
} }
static int static int load_pipewire_library()
load_pipewire_library()
{ {
if ((pipewire_handle = SDL_LoadObject(pipewire_library))) { if ((pipewire_handle = SDL_LoadObject(pipewire_library))) {
return 0; return 0;
@ -150,8 +148,7 @@ load_pipewire_library()
return -1; return -1;
} }
static void static void unload_pipewire_library()
unload_pipewire_library()
{ {
if (pipewire_handle) { if (pipewire_handle) {
SDL_UnloadObject(pipewire_handle); SDL_UnloadObject(pipewire_handle);
@ -163,21 +160,18 @@ unload_pipewire_library()
#define SDL_PIPEWIRE_SYM(x) PIPEWIRE_##x = x #define SDL_PIPEWIRE_SYM(x) PIPEWIRE_##x = x
static int static int load_pipewire_library()
load_pipewire_library()
{ {
return 0; return 0;
} }
static void static void unload_pipewire_library()
unload_pipewire_library()
{ /* Nothing to do */ { /* Nothing to do */
} }
#endif /* SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC */ #endif /* SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC */
static int static int load_pipewire_syms()
load_pipewire_syms()
{ {
SDL_PIPEWIRE_SYM(pw_get_library_version); SDL_PIPEWIRE_SYM(pw_get_library_version);
SDL_PIPEWIRE_SYM(pw_init); SDL_PIPEWIRE_SYM(pw_init);
@ -219,8 +213,7 @@ pipewire_version_at_least(int major, int minor, int patch)
(pipewire_version_major > major || pipewire_version_minor > minor || pipewire_version_patch >= patch); (pipewire_version_major > major || pipewire_version_minor > minor || pipewire_version_patch >= patch);
} }
static int static int init_pipewire_library()
init_pipewire_library()
{ {
if (!load_pipewire_library()) { if (!load_pipewire_library()) {
if (!load_pipewire_syms()) { if (!load_pipewire_syms()) {
@ -242,8 +235,7 @@ init_pipewire_library()
return -1; return -1;
} }
static void static void deinit_pipewire_library()
deinit_pipewire_library()
{ {
PIPEWIRE_pw_deinit(); PIPEWIRE_pw_deinit();
unload_pipewire_library(); unload_pipewire_library();
@ -304,8 +296,7 @@ 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 static SDL_bool io_list_check_add(struct io_node *node)
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;
@ -330,8 +321,7 @@ dup_found:
return ret; return ret;
} }
static void static void io_list_remove(Uint32 id)
io_list_remove(Uint32 id)
{ {
struct io_node *n, *temp; struct io_node *n, *temp;
@ -351,8 +341,7 @@ io_list_remove(Uint32 id)
} }
} }
static void static void io_list_sort()
io_list_sort()
{ {
struct io_node *default_sink = NULL, *default_source = NULL; struct io_node *default_sink = NULL, *default_source = NULL;
struct io_node *n, *temp; struct io_node *n, *temp;
@ -377,8 +366,7 @@ io_list_sort()
} }
} }
static void static void io_list_clear()
io_list_clear()
{ {
struct io_node *n, *temp; struct io_node *n, *temp;
@ -412,8 +400,7 @@ io_list_get_by_path(char *path)
return NULL; return NULL;
} }
static void static void node_object_destroy(struct node_object *node)
node_object_destroy(struct node_object *node)
{ {
SDL_assert(node); SDL_assert(node);
@ -425,15 +412,13 @@ node_object_destroy(struct node_object *node)
} }
/* The pending node list */ /* The pending node list */
static void static void pending_list_add(struct node_object *node)
pending_list_add(struct node_object *node)
{ {
SDL_assert(node); SDL_assert(node);
spa_list_append(&hotplug_pending_list, &node->link); spa_list_append(&hotplug_pending_list, &node->link);
} }
static void static void pending_list_remove(Uint32 id)
pending_list_remove(Uint32 id)
{ {
struct node_object *node, *temp; struct node_object *node, *temp;
@ -444,8 +429,7 @@ pending_list_remove(Uint32 id)
} }
} }
static void static void pending_list_clear()
pending_list_clear()
{ {
struct node_object *node, *temp; struct node_object *node, *temp;
@ -454,8 +438,7 @@ pending_list_clear()
} }
} }
static void * static void *node_object_new(Uint32 id, const char *type, Uint32 version, const void *funcs, const struct pw_core_events *core_events)
node_object_new(Uint32 id, const char *type, Uint32 version, const void *funcs, const struct pw_core_events *core_events)
{ {
struct pw_proxy *proxy; struct pw_proxy *proxy;
struct node_object *node; struct node_object *node;
@ -484,8 +467,7 @@ node_object_new(Uint32 id, const char *type, Uint32 version, const void *funcs,
} }
/* Core sync points */ /* Core sync points */
static void static void core_events_hotplug_init_callback(void *object, uint32_t id, int seq)
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. */
@ -497,8 +479,7 @@ core_events_hotplug_init_callback(void *object, uint32_t id, int seq)
} }
} }
static void static void core_events_interface_callback(void *object, uint32_t id, int seq)
core_events_interface_callback(void *object, uint32_t id, int seq)
{ {
struct node_object *node = object; struct node_object *node = object;
struct io_node *io = node->userdata; struct io_node *io = node->userdata;
@ -516,8 +497,7 @@ core_events_interface_callback(void *object, uint32_t id, int seq)
} }
} }
static void static void core_events_metadata_callback(void *object, uint32_t id, int seq)
core_events_metadata_callback(void *object, uint32_t id, int seq)
{ {
struct node_object *node = object; struct node_object *node = object;
@ -530,8 +510,7 @@ static const struct pw_core_events hotplug_init_core_events = { PW_VERSION_CORE_
static const struct pw_core_events interface_core_events = { PW_VERSION_CORE_EVENTS, .done = core_events_interface_callback }; static const struct pw_core_events interface_core_events = { PW_VERSION_CORE_EVENTS, .done = core_events_interface_callback };
static const struct pw_core_events metadata_core_events = { PW_VERSION_CORE_EVENTS, .done = core_events_metadata_callback }; static const struct pw_core_events metadata_core_events = { PW_VERSION_CORE_EVENTS, .done = core_events_metadata_callback };
static void static void hotplug_core_sync(struct node_object *node)
hotplug_core_sync(struct node_object *node)
{ {
/* /*
* Node sync events *must* come before the hotplug init sync events or the initial * Node sync events *must* come before the hotplug init sync events or the initial
@ -547,8 +526,7 @@ hotplug_core_sync(struct node_object *node)
} }
/* Helpers for retrieving values from params */ /* Helpers for retrieving values from params */
static SDL_bool static SDL_bool get_range_param(const struct spa_pod *param, Uint32 key, int *def, int *min, int *max)
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;
struct spa_pod *value; struct spa_pod *value;
@ -581,8 +559,7 @@ get_range_param(const struct spa_pod *param, Uint32 key, int *def, int *min, int
return SDL_FALSE; return SDL_FALSE;
} }
static SDL_bool static SDL_bool get_int_param(const struct spa_pod *param, Uint32 key, int *val)
get_int_param(const struct spa_pod *param, Uint32 key, int *val)
{ {
const struct spa_pod_prop *prop; const struct spa_pod_prop *prop;
Sint32 v; Sint32 v;
@ -601,8 +578,7 @@ get_int_param(const struct spa_pod *param, Uint32 key, int *val)
} }
/* Interface node callbacks */ /* Interface node callbacks */
static void static void node_event_info(void *object, const struct pw_node_info *info)
node_event_info(void *object, const struct pw_node_info *info)
{ {
struct node_object *node = object; struct node_object *node = object;
struct io_node *io = node->userdata; struct io_node *io = node->userdata;
@ -624,8 +600,7 @@ node_event_info(void *object, const struct pw_node_info *info)
} }
} }
static void static void node_event_param(void *object, int seq, uint32_t id, uint32_t index, uint32_t next, const struct spa_pod *param)
node_event_param(void *object, int seq, uint32_t id, uint32_t index, uint32_t next, const struct spa_pod *param)
{ {
struct node_object *node = object; struct node_object *node = object;
struct io_node *io = node->userdata; struct io_node *io = node->userdata;
@ -650,8 +625,7 @@ node_event_param(void *object, int seq, uint32_t id, uint32_t index, uint32_t ne
static const struct pw_node_events interface_node_events = { PW_VERSION_NODE_EVENTS, .info = node_event_info, static const struct pw_node_events interface_node_events = { PW_VERSION_NODE_EVENTS, .info = node_event_info,
.param = node_event_param }; .param = node_event_param };
static char* static char *get_name_from_json(const char *json)
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" */
@ -673,8 +647,7 @@ get_name_from_json(const char *json)
} }
/* Metadata node callback */ /* Metadata node callback */
static int static int metadata_property(void *object, Uint32 subject, const char *key, const char *type, const char *value)
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;
@ -700,8 +673,7 @@ metadata_property(void *object, Uint32 subject, const char *key, const char *typ
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 static void registry_event_global_callback(void *object, uint32_t id, uint32_t permissions, const char *type, uint32_t version,
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;
@ -772,8 +744,7 @@ registry_event_global_callback(void *object, uint32_t id, uint32_t permissions,
} }
} }
static void static void registry_event_remove_callback(void *object, uint32_t id)
registry_event_remove_callback(void *object, uint32_t id)
{ {
io_list_remove(id); io_list_remove(id);
pending_list_remove(id); pending_list_remove(id);
@ -783,8 +754,7 @@ static const struct pw_registry_events registry_events = { PW_VERSION_REGISTRY_E
.global_remove = registry_event_remove_callback }; .global_remove = registry_event_remove_callback };
/* The hotplug thread */ /* The hotplug thread */
static int static int hotplug_loop_init()
hotplug_loop_init()
{ {
int res; int res;
@ -827,8 +797,7 @@ hotplug_loop_init()
return 0; return 0;
} }
static void static void hotplug_loop_destroy()
hotplug_loop_destroy()
{ {
if (hotplug_loop) { if (hotplug_loop) {
PIPEWIRE_pw_thread_loop_stop(hotplug_loop); PIPEWIRE_pw_thread_loop_stop(hotplug_loop);
@ -870,8 +839,7 @@ hotplug_loop_destroy()
} }
} }
static void static void PIPEWIRE_DetectDevices()
PIPEWIRE_DetectDevices()
{ {
struct io_node *io; struct io_node *io;
@ -913,8 +881,7 @@ static const enum spa_audio_channel PIPEWIRE_channel_map_8[] = { SPA_AUDIO_CHANN
#define COPY_CHANNEL_MAP(c) SDL_memcpy(info->position, PIPEWIRE_channel_map_##c, sizeof(PIPEWIRE_channel_map_##c)) #define COPY_CHANNEL_MAP(c) SDL_memcpy(info->position, PIPEWIRE_channel_map_##c, sizeof(PIPEWIRE_channel_map_##c))
static void static void initialize_spa_info(const SDL_AudioSpec *spec, struct spa_audio_info_raw *info)
initialize_spa_info(const SDL_AudioSpec *spec, struct spa_audio_info_raw *info)
{ {
info->channels = spec->channels; info->channels = spec->channels;
info->rate = spec->freq; info->rate = spec->freq;
@ -981,8 +948,7 @@ initialize_spa_info(const SDL_AudioSpec *spec, struct spa_audio_info_raw *info)
} }
} }
static void static void output_callback(void *data)
output_callback(void *data)
{ {
struct pw_buffer *pw_buf; struct pw_buffer *pw_buf;
struct spa_buffer *spa_buf; struct spa_buffer *spa_buf;
@ -1047,8 +1013,7 @@ output_callback(void *data)
PIPEWIRE_pw_stream_queue_buffer(stream, pw_buf); PIPEWIRE_pw_stream_queue_buffer(stream, pw_buf);
} }
static void static void input_callback(void *data)
input_callback(void *data)
{ {
struct pw_buffer *pw_buf; struct pw_buffer *pw_buf;
struct spa_buffer *spa_buf; struct spa_buffer *spa_buf;
@ -1103,8 +1068,7 @@ input_callback(void *data)
PIPEWIRE_pw_stream_queue_buffer(stream, pw_buf); PIPEWIRE_pw_stream_queue_buffer(stream, pw_buf);
} }
static void static void stream_add_buffer_callback(void *data, struct pw_buffer *buffer)
stream_add_buffer_callback(void *data, struct pw_buffer *buffer)
{ {
_THIS = data; _THIS = data;
@ -1134,8 +1098,7 @@ stream_add_buffer_callback(void *data, struct pw_buffer *buffer)
PIPEWIRE_pw_thread_loop_signal(this->hidden->loop, false); PIPEWIRE_pw_thread_loop_signal(this->hidden->loop, false);
} }
static void static void stream_state_changed_callback(void *data, enum pw_stream_state old, enum pw_stream_state state, const char *error)
stream_state_changed_callback(void *data, enum pw_stream_state old, enum pw_stream_state state, const char *error)
{ {
_THIS = data; _THIS = data;
@ -1157,8 +1120,7 @@ static const struct pw_stream_events stream_input_events = { PW_VERSION_STREAM_
.add_buffer = stream_add_buffer_callback, .add_buffer = stream_add_buffer_callback,
.process = input_callback }; .process = input_callback };
static int static int PIPEWIRE_OpenDevice(_THIS, const char *devname)
PIPEWIRE_OpenDevice(_THIS, const char *devname)
{ {
/* /*
* NOTE: The PW_STREAM_FLAG_RT_PROCESS flag can be set to call the stream * NOTE: The PW_STREAM_FLAG_RT_PROCESS flag can be set to call the stream
@ -1341,8 +1303,7 @@ static void PIPEWIRE_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static int static int PIPEWIRE_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
PIPEWIRE_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
{ {
struct io_node *node; struct io_node *node;
char *target; char *target;
@ -1380,8 +1341,7 @@ failed:
return ret; return ret;
} }
static void static void PIPEWIRE_Deinitialize()
PIPEWIRE_Deinitialize()
{ {
if (pipewire_initialized) { if (pipewire_initialized) {
hotplug_loop_destroy(); hotplug_loop_destroy();
@ -1390,8 +1350,7 @@ PIPEWIRE_Deinitialize()
} }
} }
static SDL_bool static SDL_bool PIPEWIRE_Init(SDL_AudioDriverImpl *impl)
PIPEWIRE_Init(SDL_AudioDriverImpl *impl)
{ {
if (!pipewire_initialized) { if (!pipewire_initialized) {
if (init_pipewire_library() < 0) { if (init_pipewire_library() < 0) {

View File

@ -33,8 +33,7 @@
/* The tag name used by PS2 audio */ /* The tag name used by PS2 audio */
#define PS2AUDIO_DRIVER_NAME "ps2" #define PS2AUDIO_DRIVER_NAME "ps2"
static int static int PS2AUDIO_OpenDevice(_THIS, const char *devname)
PS2AUDIO_OpenDevice(_THIS, const char *devname)
{ {
int i, mixlen; int i, mixlen;
struct audsrv_fmt_t format; struct audsrv_fmt_t format;
@ -46,7 +45,6 @@ PS2AUDIO_OpenDevice(_THIS, const char *devname)
} }
SDL_zerop(this->hidden); SDL_zerop(this->hidden);
/* These are the native supported audio PS2 configs */ /* These are the native supported audio PS2 configs */
switch (this->spec.freq) { switch (this->spec.freq) {
case 11025: case 11025:

View File

@ -38,8 +38,7 @@
/* The tag name used by PSP audio */ /* The tag name used by PSP audio */
#define PSPAUDIO_DRIVER_NAME "psp" #define PSPAUDIO_DRIVER_NAME "psp"
static int static int PSPAUDIO_OpenDevice(_THIS, const char *devname)
PSPAUDIO_OpenDevice(_THIS, const char *devname)
{ {
int format, mixlen, i; int format, mixlen, i;
@ -155,8 +154,7 @@ static void PSPAUDIO_ThreadInit(_THIS)
} }
} }
static SDL_bool static SDL_bool PSPAUDIO_Init(SDL_AudioDriverImpl *impl)
PSPAUDIO_Init(SDL_AudioDriverImpl * impl)
{ {
/* Set the function pointers */ /* Set the function pointers */
impl->OpenDevice = PSPAUDIO_OpenDevice; impl->OpenDevice = PSPAUDIO_OpenDevice;

View File

@ -29,7 +29,8 @@
#define NUM_BUFFERS 2 #define NUM_BUFFERS 2
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. */

View File

@ -45,19 +45,19 @@
/* 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;
#if (PA_API_VERSION < 12) #if (PA_API_VERSION < 12)
/** Return non-zero if the passed state is one of the connected states */ /** Return non-zero if the passed state is one of the connected states */
static SDL_INLINE int PA_CONTEXT_IS_GOOD(pa_context_state_t x) { static SDL_INLINE int PA_CONTEXT_IS_GOOD(pa_context_state_t x)
{
return x == PA_CONTEXT_CONNECTING || x == PA_CONTEXT_AUTHORIZING || x == PA_CONTEXT_SETTING_NAME || x == PA_CONTEXT_READY; return x == PA_CONTEXT_CONNECTING || x == PA_CONTEXT_AUTHORIZING || x == PA_CONTEXT_SETTING_NAME || x == PA_CONTEXT_READY;
} }
/** Return non-zero if the passed state is one of the connected states */ /** Return non-zero if the passed state is one of the connected states */
static SDL_INLINE int PA_STREAM_IS_GOOD(pa_stream_state_t x) { static SDL_INLINE int PA_STREAM_IS_GOOD(pa_stream_state_t x)
{
return x == PA_STREAM_CREATING || x == PA_STREAM_READY; return x == PA_STREAM_CREATING || x == PA_STREAM_READY;
} }
#endif /* pulseaudio <= 0.9.10 */ #endif /* pulseaudio <= 0.9.10 */
static const char *(*PULSEAUDIO_pa_get_library_version)(void); static const char *(*PULSEAUDIO_pa_get_library_version)(void);
static pa_channel_map *(*PULSEAUDIO_pa_channel_map_init_auto)( static pa_channel_map *(*PULSEAUDIO_pa_channel_map_init_auto)(
pa_channel_map *, unsigned, pa_channel_map_def_t); pa_channel_map *, unsigned, pa_channel_map_def_t);
@ -112,14 +112,12 @@ static pa_operation * (*PULSEAUDIO_pa_context_get_server_info)(pa_context *, pa_
static int load_pulseaudio_syms(void); static int load_pulseaudio_syms(void);
#ifdef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC #ifdef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC
static const char *pulseaudio_library = SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC; static const char *pulseaudio_library = SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC;
static void *pulseaudio_handle = NULL; static void *pulseaudio_handle = NULL;
static int static int load_pulseaudio_sym(const char *fn, void **addr)
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) {
@ -132,10 +130,10 @@ load_pulseaudio_sym(const char *fn, void **addr)
/* 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)) return -1 if (!load_pulseaudio_sym(#x, (void **)(char *)&PULSEAUDIO_##x)) \
return -1
static void static void UnloadPulseAudioLibrary(void)
UnloadPulseAudioLibrary(void)
{ {
if (pulseaudio_handle != NULL) { if (pulseaudio_handle != NULL) {
SDL_UnloadObject(pulseaudio_handle); SDL_UnloadObject(pulseaudio_handle);
@ -143,8 +141,7 @@ UnloadPulseAudioLibrary(void)
} }
} }
static int static int LoadPulseAudioLibrary(void)
LoadPulseAudioLibrary(void)
{ {
int retval = 0; int retval = 0;
if (pulseaudio_handle == NULL) { if (pulseaudio_handle == NULL) {
@ -166,13 +163,11 @@ LoadPulseAudioLibrary(void)
#define SDL_PULSEAUDIO_SYM(x) PULSEAUDIO_##x = x #define SDL_PULSEAUDIO_SYM(x) PULSEAUDIO_##x = x
static void static void UnloadPulseAudioLibrary(void)
UnloadPulseAudioLibrary(void)
{ {
} }
static int static int LoadPulseAudioLibrary(void)
LoadPulseAudioLibrary(void)
{ {
load_pulseaudio_syms(); load_pulseaudio_syms();
return 0; return 0;
@ -180,9 +175,7 @@ LoadPulseAudioLibrary(void)
#endif /* SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC */ #endif /* SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC */
static int load_pulseaudio_syms(void)
static int
load_pulseaudio_syms(void)
{ {
SDL_PULSEAUDIO_SYM(pa_get_library_version); SDL_PULSEAUDIO_SYM(pa_get_library_version);
SDL_PULSEAUDIO_SYM(pa_mainloop_new); SDL_PULSEAUDIO_SYM(pa_mainloop_new);
@ -225,15 +218,13 @@ load_pulseaudio_syms(void)
return 0; return 0;
} }
static SDL_INLINE int static SDL_INLINE int squashVersion(const int major, const int minor, const int patch)
squashVersion(const int major, const int minor, const int patch)
{ {
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 * static const char *getAppName(void)
getAppName(void)
{ {
const char *retval = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_APP_NAME); const char *retval = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_APP_NAME);
if (retval && *retval) { if (retval && *retval) {
@ -257,8 +248,7 @@ getAppName(void)
return retval; return retval;
} }
static void static void WaitForPulseOperation(pa_mainloop *mainloop, pa_operation *o)
WaitForPulseOperation(pa_mainloop *mainloop, 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. */
if (mainloop && o) { if (mainloop && o) {
@ -270,8 +260,7 @@ WaitForPulseOperation(pa_mainloop *mainloop, pa_operation *o)
} }
} }
static void static void DisconnectFromPulseServer(pa_mainloop *mainloop, pa_context *context)
DisconnectFromPulseServer(pa_mainloop *mainloop, pa_context *context)
{ {
if (context) { if (context) {
PULSEAUDIO_pa_context_disconnect(context); PULSEAUDIO_pa_context_disconnect(context);
@ -282,8 +271,7 @@ DisconnectFromPulseServer(pa_mainloop *mainloop, pa_context *context)
} }
} }
static int static int ConnectToPulseServer_Internal(pa_mainloop **_mainloop, pa_context **_context)
ConnectToPulseServer_Internal(pa_mainloop **_mainloop, pa_context **_context)
{ {
pa_mainloop *mainloop = NULL; pa_mainloop *mainloop = NULL;
pa_context *context = NULL; pa_context *context = NULL;
@ -334,8 +322,7 @@ ConnectToPulseServer_Internal(pa_mainloop **_mainloop, pa_context **_context)
return 0; /* connected and ready! */ return 0; /* connected and ready! */
} }
static int static int ConnectToPulseServer(pa_mainloop **_mainloop, pa_context **_context)
ConnectToPulseServer(pa_mainloop **_mainloop, pa_context **_context)
{ {
const int retval = ConnectToPulseServer_Internal(_mainloop, _context); const int retval = ConnectToPulseServer_Internal(_mainloop, _context);
if (retval < 0) { if (retval < 0) {
@ -344,10 +331,8 @@ ConnectToPulseServer(pa_mainloop **_mainloop, pa_context **_context)
return retval; return retval;
} }
/* 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 void static void PULSEAUDIO_WaitDevice(_THIS)
PULSEAUDIO_WaitDevice(_THIS)
{ {
/* this is a no-op; we wait in PULSEAUDIO_PlayDevice now. */ /* this is a no-op; we wait in PULSEAUDIO_PlayDevice now. */
} }
@ -359,8 +344,7 @@ static void WriteCallback(pa_stream *p, size_t nbytes, void *userdata)
h->bytes_requested += nbytes; h->bytes_requested += nbytes;
} }
static void static void PULSEAUDIO_PlayDevice(_THIS)
PULSEAUDIO_PlayDevice(_THIS)
{ {
struct SDL_PrivateAudioData *h = this->hidden; struct SDL_PrivateAudioData *h = this->hidden;
int available = h->mixlen; int available = h->mixlen;
@ -395,15 +379,12 @@ PULSEAUDIO_PlayDevice(_THIS)
/*printf("PULSEAUDIO PLAYDEVICE END! written=%d\n", written);*/ /*printf("PULSEAUDIO PLAYDEVICE END! written=%d\n", written);*/
} }
static Uint8 * static Uint8 *PULSEAUDIO_GetDeviceBuf(_THIS)
PULSEAUDIO_GetDeviceBuf(_THIS)
{ {
return this->hidden->mixbuf; return this->hidden->mixbuf;
} }
static int PULSEAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
static int
PULSEAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
struct SDL_PrivateAudioData *h = this->hidden; struct SDL_PrivateAudioData *h = this->hidden;
const void *data = NULL; const void *data = NULL;
@ -437,7 +418,8 @@ PULSEAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
/* a new fragment is available! */ /* a new fragment is available! */
PULSEAUDIO_pa_stream_peek(h->stream, &data, &nbytes); PULSEAUDIO_pa_stream_peek(h->stream, &data, &nbytes);
SDL_assert(nbytes > 0); SDL_assert(nbytes > 0);
if (data == NULL) { /* NULL==buffer had a hole. Ignore that. */ /* If data == NULL, then the buffer had a hole, ignore that */
if (data == NULL) {
PULSEAUDIO_pa_stream_drop(h->stream); /* drop this fragment. */ PULSEAUDIO_pa_stream_drop(h->stream); /* drop this fragment. */
} else { } else {
/* store this fragment's data, start feeding it to SDL. */ /* store this fragment's data, start feeding it to SDL. */
@ -450,8 +432,7 @@ PULSEAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
return -1; /* not enabled? */ return -1; /* not enabled? */
} }
static void static void PULSEAUDIO_FlushCapture(_THIS)
PULSEAUDIO_FlushCapture(_THIS)
{ {
struct SDL_PrivateAudioData *h = this->hidden; struct SDL_PrivateAudioData *h = this->hidden;
const void *data = NULL; const void *data = NULL;
@ -481,8 +462,7 @@ PULSEAUDIO_FlushCapture(_THIS)
} }
} }
static void static void PULSEAUDIO_CloseDevice(_THIS)
PULSEAUDIO_CloseDevice(_THIS)
{ {
if (this->hidden->stream) { if (this->hidden->stream) {
if (this->hidden->capturebuf != NULL) { if (this->hidden->capturebuf != NULL) {
@ -498,8 +478,7 @@ PULSEAUDIO_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static void static void SinkDeviceNameCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data)
SinkDeviceNameCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data)
{ {
if (i) { if (i) {
char **devname = (char **)data; char **devname = (char **)data;
@ -507,8 +486,7 @@ SinkDeviceNameCallback(pa_context *c, const pa_sink_info *i, int is_last, void *
} }
} }
static void static void SourceDeviceNameCallback(pa_context *c, const pa_source_info *i, int is_last, void *data)
SourceDeviceNameCallback(pa_context *c, const pa_source_info *i, int is_last, void *data)
{ {
if (i) { if (i) {
char **devname = (char **)data; char **devname = (char **)data;
@ -516,8 +494,7 @@ SourceDeviceNameCallback(pa_context *c, const pa_source_info *i, int is_last, vo
} }
} }
static SDL_bool static SDL_bool FindDeviceName(struct SDL_PrivateAudioData *h, const SDL_bool iscapture, void *handle)
FindDeviceName(struct SDL_PrivateAudioData *h, const SDL_bool iscapture, void *handle)
{ {
const uint32_t idx = ((uint32_t)((intptr_t)handle)) - 1; const uint32_t idx = ((uint32_t)((intptr_t)handle)) - 1;
@ -538,8 +515,7 @@ FindDeviceName(struct SDL_PrivateAudioData *h, const SDL_bool iscapture, void *h
return h->device_name != NULL; return h->device_name != NULL;
} }
static int static int PULSEAUDIO_OpenDevice(_THIS, const char *devname)
PULSEAUDIO_OpenDevice(_THIS, const char *devname)
{ {
struct SDL_PrivateAudioData *h = NULL; struct SDL_PrivateAudioData *h = NULL;
SDL_AudioFormat test_format; SDL_AudioFormat test_format;
@ -692,8 +668,7 @@ static char *default_source_name = NULL;
/* 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 static SDL_AudioFormat PulseFormatToSDLFormat(pa_sample_format_t format)
PulseFormatToSDLFormat(pa_sample_format_t format)
{ {
switch (format) { switch (format) {
case PA_SAMPLE_U8: case PA_SAMPLE_U8:
@ -716,8 +691,7 @@ PulseFormatToSDLFormat(pa_sample_format_t format)
} }
/* This is called when PulseAudio adds an output ("sink") device. */ /* This is called when PulseAudio adds an output ("sink") device. */
static void static void SinkInfoCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data)
SinkInfoCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data)
{ {
SDL_AudioSpec spec; SDL_AudioSpec spec;
SDL_bool add = (SDL_bool)((intptr_t)data); SDL_bool add = (SDL_bool)((intptr_t)data);
@ -745,8 +719,7 @@ SinkInfoCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data)
} }
/* This is called when PulseAudio adds a capture ("source") device. */ /* This is called when PulseAudio adds a capture ("source") device. */
static void static void SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *data)
SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *data)
{ {
SDL_AudioSpec spec; SDL_AudioSpec spec;
SDL_bool add = (SDL_bool)((intptr_t)data); SDL_bool add = (SDL_bool)((intptr_t)data);
@ -776,8 +749,7 @@ SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *da
} }
} }
static void static void ServerInfoCallback(pa_context *c, const pa_server_info *i, void *data)
ServerInfoCallback(pa_context *c, const pa_server_info *i, void *data)
{ {
if (default_sink_path != NULL) { if (default_sink_path != NULL) {
SDL_free(default_sink_path); SDL_free(default_sink_path);
@ -790,8 +762,7 @@ ServerInfoCallback(pa_context *c, const pa_server_info *i, void *data)
} }
/* This is called when PulseAudio has a device connected/removed/changed. */ /* This is called when PulseAudio has a device connected/removed/changed. */
static void static void HotplugCallback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *data)
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);
@ -820,8 +791,7 @@ HotplugCallback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, voi
} }
/* this runs as a thread while the Pulse target is initialized to catch hotplug events. */ /* this runs as a thread while the Pulse target is initialized to catch hotplug events. */
static int SDLCALL static int SDLCALL HotplugThread(void *data)
HotplugThread(void *data)
{ {
pa_operation *o; pa_operation *o;
SDL_SetThreadPriority(SDL_THREAD_PRIORITY_LOW); SDL_SetThreadPriority(SDL_THREAD_PRIORITY_LOW);
@ -832,8 +802,7 @@ HotplugThread(void *data)
return 0; return 0;
} }
static void static void PULSEAUDIO_DetectDevices()
PULSEAUDIO_DetectDevices()
{ {
WaitForPulseOperation(hotplug_mainloop, PULSEAUDIO_pa_context_get_server_info(hotplug_context, ServerInfoCallback, NULL)); WaitForPulseOperation(hotplug_mainloop, PULSEAUDIO_pa_context_get_server_info(hotplug_context, ServerInfoCallback, NULL));
WaitForPulseOperation(hotplug_mainloop, PULSEAUDIO_pa_context_get_sink_info_list(hotplug_context, SinkInfoCallback, (void *)((intptr_t)SDL_TRUE))); WaitForPulseOperation(hotplug_mainloop, PULSEAUDIO_pa_context_get_sink_info_list(hotplug_context, SinkInfoCallback, (void *)((intptr_t)SDL_TRUE)));
@ -843,8 +812,7 @@ PULSEAUDIO_DetectDevices()
hotplug_thread = SDL_CreateThreadInternal(HotplugThread, "PulseHotplug", 256 * 1024, NULL); hotplug_thread = SDL_CreateThreadInternal(HotplugThread, "PulseHotplug", 256 * 1024, NULL);
} }
static int static int PULSEAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
PULSEAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
{ {
int i; int i;
int numdevices; int numdevices;
@ -875,8 +843,7 @@ PULSEAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
return SDL_SetError("Could not find default PulseAudio device"); return SDL_SetError("Could not find default PulseAudio device");
} }
static void static void PULSEAUDIO_Deinitialize(void)
PULSEAUDIO_Deinitialize(void)
{ {
if (hotplug_thread) { if (hotplug_thread) {
PULSEAUDIO_pa_mainloop_quit(hotplug_mainloop, 0); PULSEAUDIO_pa_mainloop_quit(hotplug_mainloop, 0);
@ -908,8 +875,7 @@ PULSEAUDIO_Deinitialize(void)
UnloadPulseAudioLibrary(); UnloadPulseAudioLibrary();
} }
static SDL_bool static SDL_bool PULSEAUDIO_Init(SDL_AudioDriverImpl *impl)
PULSEAUDIO_Init(SDL_AudioDriverImpl * impl)
{ {
if (LoadPulseAudioLibrary() < 0) { if (LoadPulseAudioLibrary() < 0) {
return SDL_FALSE; return SDL_FALSE;

View File

@ -68,8 +68,7 @@ static void (*SNDIO_sio_initpar)(struct sio_par *);
static const char *sndio_library = SDL_AUDIO_DRIVER_SNDIO_DYNAMIC; static const char *sndio_library = SDL_AUDIO_DRIVER_SNDIO_DYNAMIC;
static void *sndio_handle = NULL; static void *sndio_handle = NULL;
static int static int load_sndio_sym(const char *fn, void **addr)
load_sndio_sym(const char *fn, void **addr)
{ {
*addr = SDL_LoadFunction(sndio_handle, fn); *addr = SDL_LoadFunction(sndio_handle, fn);
if (*addr == NULL) { if (*addr == NULL) {
@ -82,13 +81,13 @@ load_sndio_sym(const char *fn, void **addr)
/* 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_SNDIO_SYM(x) \ #define SDL_SNDIO_SYM(x) \
if (!load_sndio_sym(#x, (void **) (char *) &SNDIO_##x)) return -1 if (!load_sndio_sym(#x, (void **)(char *)&SNDIO_##x)) \
return -1
#else #else
#define SDL_SNDIO_SYM(x) SNDIO_##x = x #define SDL_SNDIO_SYM(x) SNDIO_##x = x
#endif #endif
static int static int load_sndio_syms(void)
load_sndio_syms(void)
{ {
SDL_SNDIO_SYM(sio_open); SDL_SNDIO_SYM(sio_open);
SDL_SNDIO_SYM(sio_close); SDL_SNDIO_SYM(sio_close);
@ -110,8 +109,7 @@ load_sndio_syms(void)
#ifdef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC #ifdef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC
static void static void UnloadSNDIOLibrary(void)
UnloadSNDIOLibrary(void)
{ {
if (sndio_handle != NULL) { if (sndio_handle != NULL) {
SDL_UnloadObject(sndio_handle); SDL_UnloadObject(sndio_handle);
@ -119,8 +117,7 @@ UnloadSNDIOLibrary(void)
} }
} }
static int static int LoadSNDIOLibrary(void)
LoadSNDIOLibrary(void)
{ {
int retval = 0; int retval = 0;
if (sndio_handle == NULL) { if (sndio_handle == NULL) {
@ -140,13 +137,11 @@ LoadSNDIOLibrary(void)
#else #else
static void static void UnloadSNDIOLibrary(void)
UnloadSNDIOLibrary(void)
{ {
} }
static int static int LoadSNDIOLibrary(void)
LoadSNDIOLibrary(void)
{ {
load_sndio_syms(); load_sndio_syms();
return 0; return 0;
@ -154,17 +149,12 @@ LoadSNDIOLibrary(void)
#endif /* SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */ #endif /* SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */
static void SNDIO_WaitDevice(_THIS)
static void
SNDIO_WaitDevice(_THIS)
{ {
/* no-op; SNDIO_sio_write() blocks if necessary. */ /* no-op; SNDIO_sio_write() blocks if necessary. */
} }
static void static void SNDIO_PlayDevice(_THIS)
SNDIO_PlayDevice(_THIS)
{ {
const int written = SNDIO_sio_write(this->hidden->dev, const int written = SNDIO_sio_write(this->hidden->dev,
this->hidden->mixbuf, this->hidden->mixbuf,
@ -179,8 +169,7 @@ SNDIO_PlayDevice(_THIS)
#endif #endif
} }
static int static int SNDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
SNDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
size_t r; size_t r;
int revents; int revents;
@ -189,8 +178,7 @@ SNDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
/* Emulate a blocking read */ /* Emulate a blocking read */
r = SNDIO_sio_read(this->hidden->dev, buffer, buflen); r = SNDIO_sio_read(this->hidden->dev, buffer, buflen);
while (r == 0 && !SNDIO_sio_eof(this->hidden->dev)) { while (r == 0 && !SNDIO_sio_eof(this->hidden->dev)) {
if ((nfds = SNDIO_sio_pollfd(this->hidden->dev, this->hidden->pfd, POLLIN)) <= 0 if ((nfds = SNDIO_sio_pollfd(this->hidden->dev, this->hidden->pfd, POLLIN)) <= 0 || poll(this->hidden->pfd, nfds, INFTIM) < 0) {
|| poll(this->hidden->pfd, nfds, INFTIM) < 0) {
return -1; return -1;
} }
revents = SNDIO_sio_revents(this->hidden->dev, this->hidden->pfd); revents = SNDIO_sio_revents(this->hidden->dev, this->hidden->pfd);
@ -204,8 +192,7 @@ SNDIO_CaptureFromDevice(_THIS, void *buffer, int buflen)
return (int)r; return (int)r;
} }
static void static void SNDIO_FlushCapture(_THIS)
SNDIO_FlushCapture(_THIS)
{ {
char buf[512]; char buf[512];
@ -214,14 +201,12 @@ SNDIO_FlushCapture(_THIS)
} }
} }
static Uint8 * static Uint8 *SNDIO_GetDeviceBuf(_THIS)
SNDIO_GetDeviceBuf(_THIS)
{ {
return this->hidden->mixbuf; return this->hidden->mixbuf;
} }
static void static void SNDIO_CloseDevice(_THIS)
SNDIO_CloseDevice(_THIS)
{ {
if (this->hidden->pfd != NULL) { if (this->hidden->pfd != NULL) {
SDL_free(this->hidden->pfd); SDL_free(this->hidden->pfd);
@ -234,8 +219,7 @@ SNDIO_CloseDevice(_THIS)
SDL_free(this->hidden); SDL_free(this->hidden);
} }
static int static int SNDIO_OpenDevice(_THIS, const char *devname)
SNDIO_OpenDevice(_THIS, const char *devname)
{ {
SDL_AudioFormat test_format; SDL_AudioFormat test_format;
struct sio_par par; struct sio_par par;
@ -339,21 +323,18 @@ SNDIO_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static void static void SNDIO_Deinitialize(void)
SNDIO_Deinitialize(void)
{ {
UnloadSNDIOLibrary(); UnloadSNDIOLibrary();
} }
static void static void SNDIO_DetectDevices(void)
SNDIO_DetectDevices(void)
{ {
SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *)0x1); SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *)0x1);
SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *)0x2); SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *)0x2);
} }
static SDL_bool static SDL_bool SNDIO_Init(SDL_AudioDriverImpl *impl)
SNDIO_Init(SDL_AudioDriverImpl * impl)
{ {
if (LoadSNDIOLibrary() < 0) { if (LoadSNDIOLibrary() < 0) {
return SDL_FALSE; return SDL_FALSE;

View File

@ -39,8 +39,7 @@
#define SCE_AUDIO_SAMPLE_ALIGN(s) (((s) + 63) & ~63) #define SCE_AUDIO_SAMPLE_ALIGN(s) (((s) + 63) & ~63)
#define SCE_AUDIO_MAX_VOLUME 0x8000 #define SCE_AUDIO_MAX_VOLUME 0x8000
static int static int VITAAUD_OpenCaptureDevice(_THIS)
VITAAUD_OpenCaptureDevice(_THIS)
{ {
this->spec.freq = 16000; this->spec.freq = 16000;
this->spec.samples = 512; this->spec.samples = 512;
@ -57,8 +56,7 @@ VITAAUD_OpenCaptureDevice(_THIS)
return 0; return 0;
} }
static int static int VITAAUD_OpenDevice(_THIS, const char *devname)
VITAAUD_OpenDevice(_THIS, const char *devname)
{ {
int format, mixlen, i, port = SCE_AUDIO_OUT_PORT_TYPE_MAIN; int format, mixlen, i, port = SCE_AUDIO_OUT_PORT_TYPE_MAIN;
int vols[2] = { SCE_AUDIO_MAX_VOLUME, SCE_AUDIO_MAX_VOLUME }; int vols[2] = { SCE_AUDIO_MAX_VOLUME, SCE_AUDIO_MAX_VOLUME };
@ -191,8 +189,7 @@ static void VITAAUD_ThreadInit(_THIS)
} }
} }
static SDL_bool static SDL_bool VITAAUD_Init(SDL_AudioDriverImpl *impl)
VITAAUD_Init(SDL_AudioDriverImpl * impl)
{ {
/* Set the function pointers */ /* Set the function pointers */
impl->OpenDevice = VITAAUD_OpenDevice; impl->OpenDevice = VITAAUD_OpenDevice;

View File

@ -29,7 +29,8 @@
#define NUM_BUFFERS 2 #define NUM_BUFFERS 2
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. */

View File

@ -47,14 +47,12 @@
static const IID SDL_IID_IAudioRenderClient = { 0xf294acfc, 0x3146, 0x4483, { 0xa7, 0xbf, 0xad, 0xdc, 0xa7, 0xc2, 0x60, 0xe2 } }; static const IID SDL_IID_IAudioRenderClient = { 0xf294acfc, 0x3146, 0x4483, { 0xa7, 0xbf, 0xad, 0xdc, 0xa7, 0xc2, 0x60, 0xe2 } };
static const IID SDL_IID_IAudioCaptureClient = { 0xc8adbd64, 0xe71e, 0x48a0, { 0xa4, 0xde, 0x18, 0x5c, 0x39, 0x5c, 0xd3, 0x17 } }; static const IID SDL_IID_IAudioCaptureClient = { 0xc8adbd64, 0xe71e, 0x48a0, { 0xa4, 0xde, 0x18, 0x5c, 0x39, 0x5c, 0xd3, 0x17 } };
static void static void WASAPI_DetectDevices(void)
WASAPI_DetectDevices(void)
{ {
WASAPI_EnumerateEndpoints(); WASAPI_EnumerateEndpoints();
} }
static SDL_INLINE SDL_bool static SDL_INLINE SDL_bool WasapiFailed(_THIS, const HRESULT err)
WasapiFailed(_THIS, const HRESULT err)
{ {
if (err == S_OK) { if (err == S_OK) {
return SDL_FALSE; return SDL_FALSE;
@ -71,8 +69,7 @@ WasapiFailed(_THIS, const HRESULT err)
return SDL_TRUE; return SDL_TRUE;
} }
static int static int UpdateAudioStream(_THIS, const SDL_AudioSpec *oldspec)
UpdateAudioStream(_THIS, const SDL_AudioSpec *oldspec)
{ {
/* Since WASAPI requires us to handle all audio conversion, and our /* Since WASAPI requires us to handle all audio conversion, and our
device format might have changed, we might have to add/remove/change device format might have changed, we might have to add/remove/change
@ -124,11 +121,9 @@ UpdateAudioStream(_THIS, const SDL_AudioSpec *oldspec)
return 0; return 0;
} }
static void ReleaseWasapiDevice(_THIS); static void ReleaseWasapiDevice(_THIS);
static SDL_bool static SDL_bool RecoverWasapiDevice(_THIS)
RecoverWasapiDevice(_THIS)
{ {
ReleaseWasapiDevice(this); /* dump the lost device's handles. */ ReleaseWasapiDevice(this); /* dump the lost device's handles. */
@ -151,8 +146,7 @@ RecoverWasapiDevice(_THIS)
return SDL_TRUE; /* okay, carry on with new device details! */ return SDL_TRUE; /* okay, carry on with new device details! */
} }
static SDL_bool static SDL_bool RecoverWasapiIfLost(_THIS)
RecoverWasapiIfLost(_THIS)
{ {
const int generation = this->hidden->default_device_generation; const int generation = this->hidden->default_device_generation;
SDL_bool lost = this->hidden->device_lost; SDL_bool lost = this->hidden->device_lost;
@ -175,8 +169,7 @@ RecoverWasapiIfLost(_THIS)
return lost ? RecoverWasapiDevice(this) : SDL_TRUE; return lost ? RecoverWasapiDevice(this) : SDL_TRUE;
} }
static Uint8 * static Uint8 *WASAPI_GetDeviceBuf(_THIS)
WASAPI_GetDeviceBuf(_THIS)
{ {
/* get an endpoint buffer from WASAPI. */ /* get an endpoint buffer from WASAPI. */
BYTE *buffer = NULL; BYTE *buffer = NULL;
@ -191,8 +184,7 @@ WASAPI_GetDeviceBuf(_THIS)
return (Uint8 *)buffer; return (Uint8 *)buffer;
} }
static void static void WASAPI_PlayDevice(_THIS)
WASAPI_PlayDevice(_THIS)
{ {
if (this->hidden->render != NULL) { /* definitely activated? */ if (this->hidden->render != NULL) { /* definitely activated? */
/* WasapiFailed() will mark the device for reacquisition or removal elsewhere. */ /* WasapiFailed() will mark the device for reacquisition or removal elsewhere. */
@ -200,8 +192,7 @@ WASAPI_PlayDevice(_THIS)
} }
} }
static void static void WASAPI_WaitDevice(_THIS)
WASAPI_WaitDevice(_THIS)
{ {
while (RecoverWasapiIfLost(this) && this->hidden->client && this->hidden->event) { while (RecoverWasapiIfLost(this) && this->hidden->client && this->hidden->event) {
DWORD waitResult = WaitForSingleObjectEx(this->hidden->event, 200, FALSE); DWORD waitResult = WaitForSingleObjectEx(this->hidden->event, 200, FALSE);
@ -228,8 +219,7 @@ WASAPI_WaitDevice(_THIS)
} }
} }
static int static int WASAPI_CaptureFromDevice(_THIS, void *buffer, int buflen)
WASAPI_CaptureFromDevice(_THIS, void *buffer, int buflen)
{ {
SDL_AudioStream *stream = this->hidden->capturestream; SDL_AudioStream *stream = this->hidden->capturestream;
const int avail = SDL_AudioStreamAvailable(stream); const int avail = SDL_AudioStreamAvailable(stream);
@ -293,8 +283,7 @@ WASAPI_CaptureFromDevice(_THIS, void *buffer, int buflen)
return -1; /* unrecoverable error. */ return -1; /* unrecoverable error. */
} }
static void static void WASAPI_FlushCapture(_THIS)
WASAPI_FlushCapture(_THIS)
{ {
BYTE *ptr = NULL; BYTE *ptr = NULL;
UINT32 frames = 0; UINT32 frames = 0;
@ -318,8 +307,7 @@ WASAPI_FlushCapture(_THIS)
SDL_AudioStreamClear(this->hidden->capturestream); SDL_AudioStreamClear(this->hidden->capturestream);
} }
static void static void ReleaseWasapiDevice(_THIS)
ReleaseWasapiDevice(_THIS)
{ {
if (this->hidden->client) { if (this->hidden->client) {
IAudioClient_Stop(this->hidden->client); IAudioClient_Stop(this->hidden->client);
@ -358,20 +346,17 @@ ReleaseWasapiDevice(_THIS)
} }
} }
static void static void WASAPI_CloseDevice(_THIS)
WASAPI_CloseDevice(_THIS)
{ {
WASAPI_UnrefDevice(this); WASAPI_UnrefDevice(this);
} }
void void WASAPI_RefDevice(_THIS)
WASAPI_RefDevice(_THIS)
{ {
SDL_AtomicIncRef(&this->hidden->refcount); SDL_AtomicIncRef(&this->hidden->refcount);
} }
void void WASAPI_UnrefDevice(_THIS)
WASAPI_UnrefDevice(_THIS)
{ {
if (!SDL_AtomicDecRef(&this->hidden->refcount)) { if (!SDL_AtomicDecRef(&this->hidden->refcount)) {
return; return;
@ -388,8 +373,7 @@ WASAPI_UnrefDevice(_THIS)
} }
/* This is called once a device is activated, possibly asynchronously. */ /* This is called once a device is activated, possibly asynchronously. */
int int WASAPI_PrepDevice(_THIS, const SDL_bool updatestream)
WASAPI_PrepDevice(_THIS, const SDL_bool updatestream)
{ {
/* !!! FIXME: we could request an exclusive mode stream, which is lower latency; /* !!! FIXME: we could request an exclusive mode stream, which is lower latency;
!!! it will write into the kernel's audio buffer directly instead of !!! it will write into the kernel's audio buffer directly instead of
@ -539,9 +523,7 @@ WASAPI_PrepDevice(_THIS, const SDL_bool updatestream)
return 0; /* good to go. */ return 0; /* good to go. */
} }
static int WASAPI_OpenDevice(_THIS, const char *devname)
static int
WASAPI_OpenDevice(_THIS, const char *devname)
{ {
LPCWSTR devid = (LPCWSTR)this->handle; LPCWSTR devid = (LPCWSTR)this->handle;
@ -579,26 +561,22 @@ WASAPI_OpenDevice(_THIS, const char *devname)
return 0; return 0;
} }
static void static void WASAPI_ThreadInit(_THIS)
WASAPI_ThreadInit(_THIS)
{ {
WASAPI_PlatformThreadInit(this); WASAPI_PlatformThreadInit(this);
} }
static void static void WASAPI_ThreadDeinit(_THIS)
WASAPI_ThreadDeinit(_THIS)
{ {
WASAPI_PlatformThreadDeinit(this); WASAPI_PlatformThreadDeinit(this);
} }
static void static void WASAPI_Deinitialize(void)
WASAPI_Deinitialize(void)
{ {
WASAPI_PlatformDeinit(); WASAPI_PlatformDeinit();
} }
static SDL_bool static SDL_bool WASAPI_Init(SDL_AudioDriverImpl *impl)
WASAPI_Init(SDL_AudioDriverImpl * impl)
{ {
if (WASAPI_PlatformInit() == -1) { if (WASAPI_PlatformInit() == -1) {
return SDL_FALSE; return SDL_FALSE;

View File

@ -47,8 +47,7 @@ static pfnAvRevertMmThreadCharacteristics pAvRevertMmThreadCharacteristics = NUL
/* 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 int WASAPI_PlatformInit(void)
WASAPI_PlatformInit(void)
{ {
if (SDL_IMMDevice_Init() < 0) { if (SDL_IMMDevice_Init() < 0) {
return -1; /* This is set by SDL_IMMDevice_Init */ return -1; /* This is set by SDL_IMMDevice_Init */
@ -63,8 +62,7 @@ WASAPI_PlatformInit(void)
return 0; return 0;
} }
void void WASAPI_PlatformDeinit(void)
WASAPI_PlatformDeinit(void)
{ {
if (libavrt) { if (libavrt) {
FreeLibrary(libavrt); FreeLibrary(libavrt);
@ -77,8 +75,7 @@ WASAPI_PlatformDeinit(void)
SDL_IMMDevice_Quit(); SDL_IMMDevice_Quit();
} }
void void WASAPI_PlatformThreadInit(_THIS)
WASAPI_PlatformThreadInit(_THIS)
{ {
/* 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! */
@ -92,8 +89,7 @@ WASAPI_PlatformThreadInit(_THIS)
} }
} }
void void WASAPI_PlatformThreadDeinit(_THIS)
WASAPI_PlatformThreadDeinit(_THIS)
{ {
/* Set this thread back to normal priority. */ /* Set this thread back to normal priority. */
if (this->hidden->task && pAvRevertMmThreadCharacteristics) { if (this->hidden->task && pAvRevertMmThreadCharacteristics) {
@ -107,8 +103,7 @@ WASAPI_PlatformThreadDeinit(_THIS)
} }
} }
int int WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery)
WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery)
{ {
IMMDevice *device = NULL; IMMDevice *device = NULL;
HRESULT ret; HRESULT ret;
@ -135,20 +130,17 @@ WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery)
return 0; /* good to go. */ return 0; /* good to go. */
} }
void void WASAPI_EnumerateEndpoints(void)
WASAPI_EnumerateEndpoints(void)
{ {
SDL_IMMDevice_EnumerateEndpoints(SDL_FALSE); SDL_IMMDevice_EnumerateEndpoints(SDL_FALSE);
} }
int int WASAPI_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
WASAPI_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
{ {
return SDL_IMMDevice_GetDefaultAudioInfo(name, spec, iscapture); return SDL_IMMDevice_GetDefaultAudioInfo(name, spec, iscapture);
} }
void void WASAPI_PlatformDeleteActivationHandler(void *handler)
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.");
@ -157,4 +149,3 @@ WASAPI_PlatformDeleteActivationHandler(void *handler)
#endif /* SDL_AUDIO_DRIVER_WASAPI && !defined(__WINRT__) */ #endif /* SDL_AUDIO_DRIVER_WASAPI && !defined(__WINRT__) */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -93,14 +93,12 @@ private:
}; };
SDL_WasapiDeviceEventHandler::SDL_WasapiDeviceEventHandler(const SDL_bool _iscapture) SDL_WasapiDeviceEventHandler::SDL_WasapiDeviceEventHandler(const SDL_bool _iscapture)
: iscapture(_iscapture) : iscapture(_iscapture), completed(SDL_CreateSemaphore(0))
, completed(SDL_CreateSemaphore(0))
{ {
if (!completed) if (!completed)
return; // uhoh. return; // uhoh.
Platform::String^ selector = _iscapture ? MediaDevice::GetAudioCaptureSelector() : Platform::String ^ selector = _iscapture ? MediaDevice::GetAudioCaptureSelector() : MediaDevice::GetAudioRenderSelector();
MediaDevice::GetAudioRenderSelector();
Platform::Collections::Vector<Platform::String ^> properties; Platform::Collections::Vector<Platform::String ^> properties;
properties.Append(SDL_PKEY_AudioEngine_DeviceFormat); properties.Append(SDL_PKEY_AudioEngine_DeviceFormat);
watcher = DeviceInformation::CreateWatcher(selector, properties.GetView()); watcher = DeviceInformation::CreateWatcher(selector, properties.GetView());
@ -142,8 +140,7 @@ SDL_WasapiDeviceEventHandler::~SDL_WasapiDeviceEventHandler()
} }
} }
void void SDL_WasapiDeviceEventHandler::OnDeviceAdded(DeviceWatcher ^ sender, DeviceInformation ^ info)
SDL_WasapiDeviceEventHandler::OnDeviceAdded(DeviceWatcher^ sender, DeviceInformation^ info)
{ {
SDL_assert(sender == this->watcher); SDL_assert(sender == this->watcher);
char *utf8dev = WIN_StringToUTF8(info->Name->Data()); char *utf8dev = WIN_StringToUTF8(info->Name->Data());
@ -164,41 +161,35 @@ SDL_WasapiDeviceEventHandler::OnDeviceAdded(DeviceWatcher^ sender, DeviceInforma
} }
} }
void void SDL_WasapiDeviceEventHandler::OnDeviceRemoved(DeviceWatcher ^ sender, DeviceInformationUpdate ^ info)
SDL_WasapiDeviceEventHandler::OnDeviceRemoved(DeviceWatcher^ sender, DeviceInformationUpdate^ info)
{ {
SDL_assert(sender == this->watcher); SDL_assert(sender == this->watcher);
WASAPI_RemoveDevice(this->iscapture, info->Id->Data()); WASAPI_RemoveDevice(this->iscapture, info->Id->Data());
} }
void void SDL_WasapiDeviceEventHandler::OnDeviceUpdated(DeviceWatcher ^ sender, DeviceInformationUpdate ^ args)
SDL_WasapiDeviceEventHandler::OnDeviceUpdated(DeviceWatcher^ sender, DeviceInformationUpdate^ args)
{ {
SDL_assert(sender == this->watcher); SDL_assert(sender == this->watcher);
} }
void void SDL_WasapiDeviceEventHandler::OnEnumerationCompleted(DeviceWatcher ^ sender, Platform::Object ^ args)
SDL_WasapiDeviceEventHandler::OnEnumerationCompleted(DeviceWatcher^ sender, Platform::Object^ args)
{ {
SDL_assert(sender == this->watcher); SDL_assert(sender == this->watcher);
SDL_SemPost(this->completed); SDL_SemPost(this->completed);
} }
void void SDL_WasapiDeviceEventHandler::OnDefaultRenderDeviceChanged(Platform::Object ^ sender, DefaultAudioRenderDeviceChangedEventArgs ^ args)
SDL_WasapiDeviceEventHandler::OnDefaultRenderDeviceChanged(Platform::Object^ sender, DefaultAudioRenderDeviceChangedEventArgs^ args)
{ {
SDL_assert(this->iscapture); SDL_assert(this->iscapture);
SDL_AtomicAdd(&SDL_IMMDevice_DefaultPlaybackGeneration, 1); SDL_AtomicAdd(&SDL_IMMDevice_DefaultPlaybackGeneration, 1);
} }
void void SDL_WasapiDeviceEventHandler::OnDefaultCaptureDeviceChanged(Platform::Object ^ sender, DefaultAudioCaptureDeviceChangedEventArgs ^ args)
SDL_WasapiDeviceEventHandler::OnDefaultCaptureDeviceChanged(Platform::Object^ sender, DefaultAudioCaptureDeviceChangedEventArgs^ args)
{ {
SDL_assert(!this->iscapture); SDL_assert(!this->iscapture);
SDL_AtomicAdd(&SDL_IMMDevice_DefaultCaptureGeneration, 1); SDL_AtomicAdd(&SDL_IMMDevice_DefaultCaptureGeneration, 1);
} }
static SDL_WasapiDeviceEventHandler *playback_device_event_handler; static SDL_WasapiDeviceEventHandler *playback_device_event_handler;
static SDL_WasapiDeviceEventHandler *capture_device_event_handler; static SDL_WasapiDeviceEventHandler *capture_device_event_handler;
@ -241,7 +232,8 @@ void WASAPI_EnumerateEndpoints(void)
struct SDL_WasapiActivationHandler : public RuntimeClass<RuntimeClassFlags<ClassicCom>, FtmBase, IActivateAudioInterfaceCompletionHandler> struct SDL_WasapiActivationHandler : public RuntimeClass<RuntimeClassFlags<ClassicCom>, FtmBase, IActivateAudioInterfaceCompletionHandler>
{ {
SDL_WasapiActivationHandler() : device(nullptr) {} SDL_WasapiActivationHandler() : device(nullptr) {}
STDMETHOD(ActivateCompleted)(IActivateAudioInterfaceAsyncOperation *operation); STDMETHOD(ActivateCompleted)
(IActivateAudioInterfaceAsyncOperation *operation);
SDL_AudioDevice *device; SDL_AudioDevice *device;
}; };
@ -254,20 +246,17 @@ SDL_WasapiActivationHandler::ActivateCompleted(IActivateAudioInterfaceAsyncOpera
return S_OK; return S_OK;
} }
void void WASAPI_PlatformDeleteActivationHandler(void *handler)
WASAPI_PlatformDeleteActivationHandler(void *handler)
{ {
((SDL_WasapiActivationHandler *)handler)->Release(); ((SDL_WasapiActivationHandler *)handler)->Release();
} }
int int WASAPI_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
WASAPI_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
{ {
return SDL_Unsupported(); return SDL_Unsupported();
} }
int int WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery)
WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery)
{ {
LPCWSTR devid = _this->hidden->devid; LPCWSTR devid = _this->hidden->devid;
Platform::String ^ defdevid; Platform::String ^ defdevid;
@ -337,14 +326,12 @@ WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery)
return 0; return 0;
} }
void void WASAPI_PlatformThreadInit(_THIS)
WASAPI_PlatformThreadInit(_THIS)
{ {
// !!! FIXME: set this thread to "Pro Audio" priority. // !!! FIXME: set this thread to "Pro Audio" priority.
} }
void void WASAPI_PlatformThreadDeinit(_THIS)
WASAPI_PlatformThreadDeinit(_THIS)
{ {
// !!! FIXME: set this thread to "Pro Audio" priority. // !!! FIXME: set this thread to "Pro Audio" priority.
} }
@ -376,8 +363,7 @@ WaveFormatToSDLFormat(WAVEFORMATEX *waveformat)
return 0; return 0;
} }
static void static void WASAPI_RemoveDevice(const SDL_bool iscapture, LPCWSTR devid)
WASAPI_RemoveDevice(const SDL_bool iscapture, LPCWSTR devid)
{ {
DevIdList *i; DevIdList *i;
DevIdList *next; DevIdList *next;
@ -399,8 +385,7 @@ WASAPI_RemoveDevice(const SDL_bool iscapture, LPCWSTR devid)
} }
} }
static void static void WASAPI_AddDevice(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENSIBLE *fmt, LPCWSTR devid)
WASAPI_AddDevice(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENSIBLE *fmt, LPCWSTR devid)
{ {
DevIdList *devidlist; DevIdList *devidlist;
SDL_AudioSpec spec; SDL_AudioSpec spec;

View File

@ -20,7 +20,6 @@
*/ */
#include "SDL_internal.h" #include "SDL_internal.h"
#ifdef __ANDROID__ #ifdef __ANDROID__
#include "SDL_android.h" #include "SDL_android.h"
@ -267,7 +266,6 @@ static JNINativeMethod SDLControllerManager_tab[] = {
{ "nativeRemoveHaptic", "(I)I", SDL_JAVA_CONTROLLER_INTERFACE(nativeRemoveHaptic) } { "nativeRemoveHaptic", "(I)I", SDL_JAVA_CONTROLLER_INTERFACE(nativeRemoveHaptic) }
}; };
/* Uncomment this to log messages entering and exiting methods in this file */ /* Uncomment this to log messages entering and exiting methods in this file */
/* #define DEBUG_JNI */ /* #define DEBUG_JNI */
@ -278,7 +276,6 @@ static void checkJNIReady(void);
*******************************************************************************/ *******************************************************************************/
#include <jni.h> #include <jni.h>
/******************************************************************************* /*******************************************************************************
Globals Globals
*******************************************************************************/ *******************************************************************************/
@ -389,8 +386,8 @@ static jobject javaAssetManagerRef = 0;
*/ */
/* Set local storage value */ /* Set local storage value */
static int static int Android_JNI_SetEnv(JNIEnv *env)
Android_JNI_SetEnv(JNIEnv *env) { {
int status = pthread_setspecific(mThreadKey, env); int status = pthread_setspecific(mThreadKey, env);
if (status < 0) { if (status < 0) {
__android_log_print(ANDROID_LOG_ERROR, "SDL", "Failed pthread_setspecific() in Android_JNI_SetEnv() (err=%d)", status); __android_log_print(ANDROID_LOG_ERROR, "SDL", "Failed pthread_setspecific() in Android_JNI_SetEnv() (err=%d)", status);
@ -459,8 +456,7 @@ int Android_JNI_SetupThread(void)
} }
/* Destructor called for each thread where mThreadKey is not NULL */ /* Destructor called for each thread where mThreadKey is not NULL */
static void static void Android_JNI_ThreadDestroyed(void *value)
Android_JNI_ThreadDestroyed(void *value)
{ {
/* The thread is being destroyed, detach it from the Java VM and set the mThreadKey value to NULL as required */ /* The thread is being destroyed, detach it from the Java VM and set the mThreadKey value to NULL as required */
JNIEnv *env = (JNIEnv *)value; JNIEnv *env = (JNIEnv *)value;
@ -471,8 +467,7 @@ Android_JNI_ThreadDestroyed(void *value)
} }
/* Creation of local storage mThreadKey */ /* Creation of local storage mThreadKey */
static void static void Android_JNI_CreateKey(void)
Android_JNI_CreateKey(void)
{ {
int status = pthread_key_create(&mThreadKey, Android_JNI_ThreadDestroyed); int status = pthread_key_create(&mThreadKey, Android_JNI_ThreadDestroyed);
if (status < 0) { if (status < 0) {
@ -480,8 +475,7 @@ Android_JNI_CreateKey(void)
} }
} }
static void static void Android_JNI_CreateKey_once(void)
Android_JNI_CreateKey_once(void)
{ {
int status = pthread_once(&key_once, Android_JNI_CreateKey); int status = pthread_once(&key_once, Android_JNI_CreateKey);
if (status < 0) { if (status < 0) {
@ -489,8 +483,7 @@ Android_JNI_CreateKey_once(void)
} }
} }
static void static void register_methods(JNIEnv *env, const char *classname, JNINativeMethod *methods, int nb)
register_methods(JNIEnv *env, const char *classname, JNINativeMethod *methods, int nb)
{ {
jclass clazz = (*env)->FindClass(env, classname); jclass clazz = (*env)->FindClass(env, classname);
if (clazz == NULL || (*env)->RegisterNatives(env, clazz, methods, nb) < 0) { if (clazz == NULL || (*env)->RegisterNatives(env, clazz, methods, nb) < 0) {
@ -568,7 +561,6 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv *env, jclass cl
__android_log_print(ANDROID_LOG_ERROR, "SDL", "failed to create Android_ActivityMutex mutex"); __android_log_print(ANDROID_LOG_ERROR, "SDL", "failed to create Android_ActivityMutex mutex");
} }
Android_PauseSem = SDL_CreateSemaphore(0); Android_PauseSem = SDL_CreateSemaphore(0);
if (Android_PauseSem == NULL) { if (Android_PauseSem == NULL) {
__android_log_print(ANDROID_LOG_ERROR, "SDL", "failed to create Android_PauseSem semaphore"); __android_log_print(ANDROID_LOG_ERROR, "SDL", "failed to create Android_PauseSem semaphore");
@ -777,7 +769,6 @@ JNIEXPORT int JNICALL SDL_JAVA_INTERFACE(nativeRunMain)(JNIEnv *env, jclass cls,
} }
argv[argc] = NULL; argv[argc] = NULL;
/* Run the application. */ /* Run the application. */
status = SDL_main(argc, argv); status = SDL_main(argc, argv);
@ -821,16 +812,19 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeDropFile)(
} }
/* Lock / Unlock Mutex */ /* Lock / Unlock Mutex */
void Android_ActivityMutex_Lock() { void Android_ActivityMutex_Lock()
{
SDL_LockMutex(Android_ActivityMutex); SDL_LockMutex(Android_ActivityMutex);
} }
void Android_ActivityMutex_Unlock() { void Android_ActivityMutex_Unlock()
{
SDL_UnlockMutex(Android_ActivityMutex); SDL_UnlockMutex(Android_ActivityMutex);
} }
/* Lock the Mutex when the Activity is in its 'Running' state */ /* Lock the Mutex when the Activity is in its 'Running' state */
void Android_ActivityMutex_Lock_Running() { void Android_ActivityMutex_Lock_Running()
{
int pauseSignaled = 0; int pauseSignaled = 0;
int resumeSignaled = 0; int resumeSignaled = 0;
@ -941,7 +935,6 @@ JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativeHat)(
Android_OnHat(device_id, hat_id, x, y); Android_OnHat(device_id, hat_id, x, y);
} }
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeAddJoystick)( JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeAddJoystick)(
JNIEnv *env, jclass jcls, JNIEnv *env, jclass jcls,
jint device_id, jstring device_name, jstring device_desc, jint device_id, jstring device_name, jstring device_desc,
@ -1103,7 +1096,6 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeKeyboardFocusLost)(
SDL_StopTextInput(); SDL_StopTextInput();
} }
/* Touch */ /* Touch */
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeTouch)( JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeTouch)(
JNIEnv *env, jclass jcls, JNIEnv *env, jclass jcls,
@ -1162,7 +1154,6 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeLocaleChanged)(
SDL_SendAppEvent(SDL_LOCALECHANGED); SDL_SendAppEvent(SDL_LOCALECHANGED);
} }
/* Send Quit event to "SDLThread" thread */ /* Send Quit event to "SDLThread" thread */
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSendQuit)( JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSendQuit)(
JNIEnv *env, jclass cls) JNIEnv *env, jclass cls)
@ -1306,7 +1297,6 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetenv)(
(*env)->ReleaseStringUTFChars(env, name, utfname); (*env)->ReleaseStringUTFChars(env, name, utfname);
(*env)->ReleaseStringUTFChars(env, value, utfvalue); (*env)->ReleaseStringUTFChars(env, value, utfvalue);
} }
/******************************************************************************* /*******************************************************************************
@ -1502,8 +1492,7 @@ int Android_JNI_OpenAudioDevice(int iscapture, SDL_AudioSpec *spec)
jbufobj = (*env)->NewGlobalRef(env, audioBufferLocal); jbufobj = (*env)->NewGlobalRef(env, audioBufferLocal);
(*env)->DeleteLocalRef(env, audioBufferLocal); (*env)->DeleteLocalRef(env, audioBufferLocal);
} }
} } break;
break;
case ENCODING_PCM_16BIT: case ENCODING_PCM_16BIT:
{ {
jshortArray audioBufferLocal = (*env)->NewShortArray(env, spec->samples * spec->channels); jshortArray audioBufferLocal = (*env)->NewShortArray(env, spec->samples * spec->channels);
@ -1511,8 +1500,7 @@ int Android_JNI_OpenAudioDevice(int iscapture, SDL_AudioSpec *spec)
jbufobj = (*env)->NewGlobalRef(env, audioBufferLocal); jbufobj = (*env)->NewGlobalRef(env, audioBufferLocal);
(*env)->DeleteLocalRef(env, audioBufferLocal); (*env)->DeleteLocalRef(env, audioBufferLocal);
} }
} } break;
break;
case ENCODING_PCM_FLOAT: case ENCODING_PCM_FLOAT:
{ {
jfloatArray audioBufferLocal = (*env)->NewFloatArray(env, spec->samples * spec->channels); jfloatArray audioBufferLocal = (*env)->NewFloatArray(env, spec->samples * spec->channels);
@ -1520,8 +1508,7 @@ int Android_JNI_OpenAudioDevice(int iscapture, SDL_AudioSpec *spec)
jbufobj = (*env)->NewGlobalRef(env, audioBufferLocal); jbufobj = (*env)->NewGlobalRef(env, audioBufferLocal);
(*env)->DeleteLocalRef(env, audioBufferLocal); (*env)->DeleteLocalRef(env, audioBufferLocal);
} }
} } break;
break;
default: default:
return SDL_SetError("Unexpected audio format from Java: %d\n", audioformat); return SDL_SetError("Unexpected audio format from Java: %d\n", audioformat);
} }
@ -1579,7 +1566,6 @@ int Android_JNI_GetDisplayDPI(float *ddpi, float *xdpi, float *ydpi)
float nativeYdpi = (*env)->GetFloatField(env, jDisplayObj, fidYdpi); float nativeYdpi = (*env)->GetFloatField(env, jDisplayObj, fidYdpi);
int nativeDdpi = (*env)->GetIntField(env, jDisplayObj, fidDdpi); int nativeDdpi = (*env)->GetIntField(env, jDisplayObj, fidDdpi);
(*env)->DeleteLocalRef(env, jDisplayObj); (*env)->DeleteLocalRef(env, jDisplayObj);
(*env)->DeleteLocalRef(env, jDisplayClass); (*env)->DeleteLocalRef(env, jDisplayClass);
@ -1788,7 +1774,8 @@ static SDL_bool Android_JNI_ExceptionOccurred(SDL_bool silent)
return SDL_FALSE; return SDL_FALSE;
} }
static void Internal_Android_Create_AssetManager() { static void Internal_Android_Create_AssetManager()
{
struct LocalReferenceHolder refs = LocalReferenceHolder_Setup(__FUNCTION__); struct LocalReferenceHolder refs = LocalReferenceHolder_Setup(__FUNCTION__);
JNIEnv *env = Android_JNI_GetEnv(); JNIEnv *env = Android_JNI_GetEnv();
@ -1826,7 +1813,8 @@ static void Internal_Android_Create_AssetManager() {
LocalReferenceHolder_Cleanup(&refs); LocalReferenceHolder_Cleanup(&refs);
} }
static void Internal_Android_Destroy_AssetManager() { static void Internal_Android_Destroy_AssetManager()
{
JNIEnv *env = Android_JNI_GetEnv(); JNIEnv *env = Android_JNI_GetEnv();
if (asset_manager) { if (asset_manager) {
@ -1854,7 +1842,6 @@ int Android_JNI_FileOpen(SDL_RWops *ctx,
return -1; return -1;
} }
ctx->hidden.androidio.asset = (void *)asset; ctx->hidden.androidio.asset = (void *)asset;
return 0; return 0;
} }
@ -1963,7 +1950,6 @@ int Android_JNI_GetPowerInfo(int *plugged, int *charged, int *battery, int *seco
return -1; return -1;
} }
/* context = SDLActivity.getContext(); */ /* context = SDLActivity.getContext(); */
context = (*env)->CallStaticObjectMethod(env, mActivityClass, midGetContext); context = (*env)->CallStaticObjectMethod(env, mActivityClass, midGetContext);
@ -2062,7 +2048,8 @@ int Android_JNI_GetPowerInfo(int *plugged, int *charged, int *battery, int *seco
} }
/* Add all touch devices */ /* Add all touch devices */
void Android_JNI_InitTouch() { void Android_JNI_InitTouch()
{
JNIEnv *env = Android_JNI_GetEnv(); JNIEnv *env = Android_JNI_GetEnv();
(*env)->CallStaticVoidMethod(env, mActivityClass, midInitTouch); (*env)->CallStaticVoidMethod(env, mActivityClass, midInitTouch);
} }
@ -2094,7 +2081,6 @@ void Android_JNI_HapticStop(int device_id)
/* See SDLActivity.java for constants. */ /* See SDLActivity.java for constants. */
#define COMMAND_SET_KEEP_SCREEN_ON 5 #define COMMAND_SET_KEEP_SCREEN_ON 5
int SDL_AndroidSendMessage(Uint32 command, int param) int SDL_AndroidSendMessage(Uint32 command, int param)
{ {
if (command >= 0x8000) { if (command >= 0x8000) {
@ -2142,7 +2128,6 @@ SDL_bool Android_JNI_IsScreenKeyboardShown(void)
return is_shown; return is_shown;
} }
int Android_JNI_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) int Android_JNI_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
{ {
JNIEnv *env; JNIEnv *env;
@ -2606,8 +2591,7 @@ int Android_JNI_GetLocale(char *buf, size_t buflen)
return 0; return 0;
} }
int int Android_JNI_OpenURL(const char *url)
Android_JNI_OpenURL(const char *url)
{ {
JNIEnv *env = Android_JNI_GetEnv(); JNIEnv *env = Android_JNI_GetEnv();
jstring jurl = (*env)->NewStringUTF(env, url); jstring jurl = (*env)->NewStringUTF(env, url);

View File

@ -30,7 +30,6 @@ extern "C" {
#include <EGL/eglplatform.h> #include <EGL/eglplatform.h>
#include <android/native_window_jni.h> #include <android/native_window_jni.h>
/* Interface from the SDL library into the Android Java activity */ /* Interface from the SDL library into the Android Java activity */
extern void Android_JNI_SetActivityTitle(const char *title); extern void Android_JNI_SetActivityTitle(const char *title);
extern void Android_JNI_SetWindowStyle(SDL_bool fullscreen); extern void Android_JNI_SetWindowStyle(SDL_bool fullscreen);
@ -60,7 +59,6 @@ extern void Android_JNI_AudioSetThreadPriority(int iscapture, int device_id);
extern SDL_bool Android_IsDeXMode(void); extern SDL_bool Android_IsDeXMode(void);
extern SDL_bool Android_IsChromebook(void); extern SDL_bool Android_IsChromebook(void);
int Android_JNI_FileOpen(SDL_RWops *ctx, const char *fileName, const char *mode); int Android_JNI_FileOpen(SDL_RWops *ctx, const char *fileName, const char *mode);
Sint64 Android_JNI_FileSize(SDL_RWops *ctx); Sint64 Android_JNI_FileSize(SDL_RWops *ctx);
Sint64 Android_JNI_FileSeek(SDL_RWops *ctx, Sint64 offset, int whence); Sint64 Android_JNI_FileSeek(SDL_RWops *ctx, Sint64 offset, int whence);

View File

@ -1,5 +1,6 @@
#include <sys/kbio.h> #include <sys/kbio.h>
/* *INDENT-OFF* */ /* clang-format off */
/* /*
* Automatically generated from /usr/share/vt/keymaps/us.acc.kbd. * Automatically generated from /usr/share/vt/keymaps/us.acc.kbd.
* DO NOT EDIT! * DO NOT EDIT!
@ -163,3 +164,4 @@ static accentmap_t accentmap_default_us_acc = { 11, {
{ 0x00 }, { 0x00 },
} }; } };
/* *INDENT-ON* */ /* clang-format on */

View File

@ -76,8 +76,7 @@ static int kbd_cleanup_atexit_installed = 0;
static struct sigaction old_sigaction[NSIG]; static struct sigaction old_sigaction[NSIG];
static int fatal_signals[] = static int fatal_signals[] = {
{
/* Handlers for SIGTERM and SIGINT are installed in SDL_QuitInit. */ /* Handlers for SIGTERM and SIGINT are installed in SDL_QuitInit. */
SIGHUP, SIGQUIT, SIGILL, SIGABRT, SIGHUP, SIGQUIT, SIGILL, SIGABRT,
SIGFPE, SIGSEGV, SIGPIPE, SIGBUS, SIGFPE, SIGSEGV, SIGPIPE, SIGBUS,
@ -102,8 +101,7 @@ static void kbd_cleanup(void)
ioctl(kbd->console_fd, CONS_MOUSECTL, &mData); ioctl(kbd->console_fd, CONS_MOUSECTL, &mData);
} }
void void SDL_EVDEV_kbd_reraise_signal(int sig)
SDL_EVDEV_kbd_reraise_signal(int sig)
{ {
raise(sig); raise(sig);
} }
@ -288,14 +286,14 @@ SDL_EVDEV_kbd_init(void)
kbd_register_emerg_cleanup(kbd); kbd_register_emerg_cleanup(kbd);
} }
SDL_free(devicePath); SDL_free(devicePath);
} else kbd->keyboard_fd = kbd->console_fd; } else
kbd->keyboard_fd = kbd->console_fd;
} }
return kbd; return kbd;
} }
void void SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd)
SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd)
{ {
struct mouse_info mData; struct mouse_info mData;
@ -470,8 +468,7 @@ static void k_shift(SDL_EVDEV_keyboard_state *kbd, unsigned char value, char up_
} }
} }
void void SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *kbd, unsigned int keycode, int down)
SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *kbd, unsigned int keycode, int down)
{ {
keymap_t key_map; keymap_t key_map;
struct keyent_t keysym; struct keyent_t keysym;

View File

@ -43,8 +43,7 @@ SDL_GDKGetTaskQueue(XTaskQueueHandle * outTaskQueue)
hr = XTaskQueueCreate(XTaskQueueDispatchMode::ThreadPool, hr = XTaskQueueCreate(XTaskQueueDispatchMode::ThreadPool,
XTaskQueueDispatchMode::Manual, XTaskQueueDispatchMode::Manual,
&GDK_GlobalTaskQueue &GDK_GlobalTaskQueue);
);
if (FAILED(hr)) { if (FAILED(hr)) {
return SDL_SetError("[GDK] Could not create global task queue"); return SDL_SetError("[GDK] Could not create global task queue");
} }
@ -154,8 +153,7 @@ SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved)
SDL_SetError("[GDK] Unable to create plmSuspendComplete event"); SDL_SetError("[GDK] Unable to create plmSuspendComplete event");
return -1; return -1;
} }
auto rascn = [](BOOLEAN quiesced, PVOID context) auto rascn = [](BOOLEAN quiesced, PVOID context) {
{
SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "[GDK] in RegisterAppStateChangeNotification handler"); SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "[GDK] in RegisterAppStateChangeNotification handler");
if (quiesced) { if (quiesced) {
ResetEvent(plmSuspendComplete); ResetEvent(plmSuspendComplete);
@ -210,7 +208,8 @@ SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved)
} }
extern "C" DECLSPEC void extern "C" DECLSPEC void
SDL_GDKSuspendComplete() { SDL_GDKSuspendComplete()
{
if (plmSuspendComplete) { if (plmSuspendComplete) {
SetEvent(plmSuspendComplete); SetEvent(plmSuspendComplete);
} }

View File

@ -31,11 +31,11 @@ static char *inhibit_handle = NULL;
static unsigned int screensaver_cookie = 0; static unsigned int screensaver_cookie = 0;
static SDL_DBusContext dbus; static SDL_DBusContext dbus;
static int static int LoadDBUSSyms(void)
LoadDBUSSyms(void)
{ {
#define SDL_DBUS_SYM2(x, y) \ #define SDL_DBUS_SYM2(x, y) \
if (!(dbus.x = SDL_LoadFunction(dbus_handle, #y))) return -1 if (!(dbus.x = SDL_LoadFunction(dbus_handle, #y))) \
return -1
#define SDL_DBUS_SYM(x) \ #define SDL_DBUS_SYM(x) \
SDL_DBUS_SYM2(x, dbus_##x) SDL_DBUS_SYM2(x, dbus_##x)
@ -86,8 +86,7 @@ LoadDBUSSyms(void)
return 0; return 0;
} }
static void static void UnloadDBUSLibrary(void)
UnloadDBUSLibrary(void)
{ {
if (dbus_handle != NULL) { if (dbus_handle != NULL) {
SDL_UnloadObject(dbus_handle); SDL_UnloadObject(dbus_handle);
@ -95,8 +94,7 @@ UnloadDBUSLibrary(void)
} }
} }
static int static int LoadDBUSLibrary(void)
LoadDBUSLibrary(void)
{ {
int retval = 0; int retval = 0;
if (dbus_handle == NULL) { if (dbus_handle == NULL) {
@ -115,12 +113,10 @@ LoadDBUSLibrary(void)
return retval; return retval;
} }
static SDL_SpinLock spinlock_dbus_init = 0; static SDL_SpinLock spinlock_dbus_init = 0;
/* you must hold spinlock_dbus_init before calling this! */ /* you must hold spinlock_dbus_init before calling this! */
static void static void SDL_DBus_Init_Spinlocked(void)
SDL_DBus_Init_Spinlocked(void)
{ {
static SDL_bool is_dbus_available = SDL_TRUE; static SDL_bool is_dbus_available = SDL_TRUE;
if (!is_dbus_available) { if (!is_dbus_available) {
@ -132,7 +128,7 @@ SDL_DBus_Init_Spinlocked(void)
if (LoadDBUSLibrary() == -1) { if (LoadDBUSLibrary() == -1) {
is_dbus_available = SDL_FALSE; /* can't load at all? Don't keep trying. */ is_dbus_available = SDL_FALSE; /* can't load at all? Don't keep trying. */
return; /* oh well */ return;
} }
if (!dbus.threads_init_default()) { if (!dbus.threads_init_default()) {
@ -162,16 +158,14 @@ SDL_DBus_Init_Spinlocked(void)
} }
} }
void void SDL_DBus_Init(void)
SDL_DBus_Init(void)
{ {
SDL_AtomicLock(&spinlock_dbus_init); /* make sure two threads can't init at same time, since this can happen before SDL_Init. */ SDL_AtomicLock(&spinlock_dbus_init); /* make sure two threads can't init at same time, since this can happen before SDL_Init. */
SDL_DBus_Init_Spinlocked(); SDL_DBus_Init_Spinlocked();
SDL_AtomicUnlock(&spinlock_dbus_init); SDL_AtomicUnlock(&spinlock_dbus_init);
} }
void void SDL_DBus_Quit(void)
SDL_DBus_Quit(void)
{ {
if (dbus.system_conn) { if (dbus.system_conn) {
dbus.connection_close(dbus.system_conn); dbus.connection_close(dbus.system_conn);
@ -205,8 +199,7 @@ SDL_DBus_GetContext(void)
return (dbus_handle && dbus.session_conn) ? &dbus : NULL; return (dbus_handle && dbus.session_conn) ? &dbus : NULL;
} }
static SDL_bool static SDL_bool SDL_DBus_CallMethodInternal(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, va_list ap)
SDL_DBus_CallMethodInternal(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, va_list ap)
{ {
SDL_bool retval = SDL_FALSE; SDL_bool retval = SDL_FALSE;
@ -223,9 +216,15 @@ SDL_DBus_CallMethodInternal(DBusConnection *conn, const char *node, const char *
/* skip any input args, get to output args. */ /* skip any input args, get to output args. */
while ((firstarg = va_arg(ap_reply, int)) != DBUS_TYPE_INVALID) { while ((firstarg = va_arg(ap_reply, int)) != DBUS_TYPE_INVALID) {
/* we assume D-Bus already validated all this. */ /* we assume D-Bus already validated all this. */
{ void *dumpptr = va_arg(ap_reply, void*); (void) dumpptr; } {
void *dumpptr = va_arg(ap_reply, void *);
(void)dumpptr;
}
if (firstarg == DBUS_TYPE_ARRAY) { if (firstarg == DBUS_TYPE_ARRAY) {
{ const int dumpint = va_arg(ap_reply, int); (void) dumpint; } {
const int dumpint = va_arg(ap_reply, int);
(void)dumpint;
}
} }
} }
firstarg = va_arg(ap_reply, int); firstarg = va_arg(ap_reply, int);
@ -265,8 +264,7 @@ SDL_DBus_CallMethod(const char *node, const char *path, const char *interface, c
return retval; return retval;
} }
static SDL_bool static SDL_bool SDL_DBus_CallVoidMethodInternal(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, va_list ap)
SDL_DBus_CallVoidMethodInternal(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, va_list ap)
{ {
SDL_bool retval = SDL_FALSE; SDL_bool retval = SDL_FALSE;
@ -288,8 +286,7 @@ SDL_DBus_CallVoidMethodInternal(DBusConnection *conn, const char *node, const ch
return retval; return retval;
} }
static SDL_bool static SDL_bool SDL_DBus_CallWithBasicReply(DBusConnection *conn, DBusMessage *msg, const int expectedtype, void *result)
SDL_DBus_CallWithBasicReply(DBusConnection *conn, DBusMessage *msg, const int expectedtype, void *result)
{ {
SDL_bool retval = SDL_FALSE; SDL_bool retval = SDL_FALSE;
@ -360,9 +357,7 @@ SDL_DBus_QueryProperty(const char *node, const char *path, const char *interface
return SDL_DBus_QueryPropertyOnConnection(dbus.session_conn, node, path, interface, property, expectedtype, result); return SDL_DBus_QueryPropertyOnConnection(dbus.session_conn, node, path, interface, property, expectedtype, result);
} }
void SDL_DBus_ScreensaverTickle(void)
void
SDL_DBus_ScreensaverTickle(void)
{ {
if (screensaver_cookie == 0 && inhibit_handle == NULL) { /* no need to tickle if we're inhibiting. */ if (screensaver_cookie == 0 && inhibit_handle == NULL) { /* no need to tickle if we're inhibiting. */
/* org.gnome.ScreenSaver is the legacy interface, but it'll either do nothing or just be a second harmless tickle on newer systems, so we leave it for now. */ /* org.gnome.ScreenSaver is the legacy interface, but it'll either do nothing or just be a second harmless tickle on newer systems, so we leave it for now. */
@ -371,8 +366,7 @@ SDL_DBus_ScreensaverTickle(void)
} }
} }
static SDL_bool static SDL_bool SDL_DBus_AppendDictWithKeyValue(DBusMessageIter *iterInit, const char *key, const char *value)
SDL_DBus_AppendDictWithKeyValue(DBusMessageIter *iterInit, const char *key, const char *value)
{ {
DBusMessageIter iterDict, iterEntry, iterValue; DBusMessageIter iterDict, iterEntry, iterValue;
@ -396,9 +390,7 @@ SDL_DBus_AppendDictWithKeyValue(DBusMessageIter *iterInit, const char *key, cons
goto failed; goto failed;
} }
if (!dbus.message_iter_close_container(&iterEntry, &iterValue) if (!dbus.message_iter_close_container(&iterEntry, &iterValue) || !dbus.message_iter_close_container(&iterDict, &iterEntry) || !dbus.message_iter_close_container(iterInit, &iterDict)) {
|| !dbus.message_iter_close_container(&iterDict, &iterEntry)
|| !dbus.message_iter_close_container(iterInit, &iterDict)) {
goto failed; goto failed;
} }
@ -416,8 +408,7 @@ SDL_DBus_ScreensaverInhibit(SDL_bool inhibit)
{ {
const char *default_inhibit_reason = "Playing a game"; const char *default_inhibit_reason = "Playing a game";
if ( (inhibit && (screensaver_cookie != 0 || inhibit_handle != NULL)) if ((inhibit && (screensaver_cookie != 0 || inhibit_handle != NULL)) || (!inhibit && (screensaver_cookie == 0 && inhibit_handle == NULL))) {
|| (!inhibit && (screensaver_cookie == 0 && inhibit_handle == NULL)) ) {
return SDL_TRUE; return SDL_TRUE;
} }

View File

@ -28,8 +28,8 @@
#define SDL_USE_LIBDBUS 1 #define SDL_USE_LIBDBUS 1
#include <dbus/dbus.h> #include <dbus/dbus.h>
typedef struct SDL_DBusContext
typedef struct SDL_DBusContext { {
DBusConnection *session_conn; DBusConnection *session_conn;
DBusConnection *system_conn; DBusConnection *system_conn;

View File

@ -71,7 +71,8 @@ typedef struct SDL_evdevlist_item
keyboard, touchpad, etc.). Also there's probably some things in here we keyboard, touchpad, etc.). Also there's probably some things in here we
can pull out to the SDL_evdevlist_item i.e. name */ can pull out to the SDL_evdevlist_item i.e. name */
SDL_bool is_touchscreen; SDL_bool is_touchscreen;
struct { struct
{
char *name; char *name;
int min_x, max_x, range_x; int min_x, max_x, range_x;
@ -80,8 +81,10 @@ typedef struct SDL_evdevlist_item
int max_slots; int max_slots;
int current_slot; int current_slot;
struct { struct
enum { {
enum
{
EVDEV_TOUCH_SLOTDELTA_NONE = 0, EVDEV_TOUCH_SLOTDELTA_NONE = 0,
EVDEV_TOUCH_SLOTDELTA_DOWN, EVDEV_TOUCH_SLOTDELTA_DOWN,
EVDEV_TOUCH_SLOTDELTA_UP, EVDEV_TOUCH_SLOTDELTA_UP,
@ -137,16 +140,13 @@ static Uint8 EVDEV_MouseButtons[] = {
SDL_BUTTON_X2 + 3 /* BTN_TASK 0x117 */ SDL_BUTTON_X2 + 3 /* BTN_TASK 0x117 */
}; };
static int static int SDL_EVDEV_SetRelativeMouseMode(SDL_bool enabled)
SDL_EVDEV_SetRelativeMouseMode(SDL_bool enabled)
{ {
/* Mice already send relative events through this interface */ /* Mice already send relative events through this interface */
return 0; return 0;
} }
int SDL_EVDEV_Init(void)
int
SDL_EVDEV_Init(void)
{ {
if (_this == NULL) { if (_this == NULL) {
_this = (SDL_EVDEV_PrivateData *)SDL_calloc(1, sizeof(*_this)); _this = (SDL_EVDEV_PrivateData *)SDL_calloc(1, sizeof(*_this));
@ -208,8 +208,7 @@ SDL_EVDEV_Init(void)
return 0; return 0;
} }
void void SDL_EVDEV_Quit(void)
SDL_EVDEV_Quit(void)
{ {
if (_this == NULL) { if (_this == NULL) {
return; return;
@ -268,8 +267,7 @@ static void SDL_EVDEV_udev_callback(SDL_UDEV_deviceevent udev_event, int udev_cl
} }
#endif /* SDL_USE_LIBUDEV */ #endif /* SDL_USE_LIBUDEV */
void void SDL_EVDEV_Poll(void)
SDL_EVDEV_Poll(void)
{ {
struct input_event events[32]; struct input_event events[32];
int i, j, len; int i, j, len;
@ -519,8 +517,7 @@ SDL_EVDEV_Poll(void)
} }
} }
static SDL_Scancode static SDL_Scancode SDL_EVDEV_translate_keycode(int keycode)
SDL_EVDEV_translate_keycode(int keycode)
{ {
SDL_Scancode scancode = SDL_GetScancodeFromTable(SDL_SCANCODE_TABLE_LINUX, keycode); SDL_Scancode scancode = SDL_GetScancodeFromTable(SDL_SCANCODE_TABLE_LINUX, keycode);
@ -533,7 +530,8 @@ SDL_EVDEV_translate_keycode(int keycode)
if (keycode != BTN_TOUCH) { if (keycode != BTN_TOUCH) {
SDL_Log("The key you just pressed is not recognized by SDL. To help " SDL_Log("The key you just pressed is not recognized by SDL. To help "
"get this fixed, please report this to the SDL forums/mailing list " "get this fixed, please report this to the SDL forums/mailing list "
"<https://discourse.libsdl.org/> EVDEV KeyCode %d", keycode); "<https://discourse.libsdl.org/> EVDEV KeyCode %d",
keycode);
} }
} }
#endif /* DEBUG_SCANCODES */ #endif /* DEBUG_SCANCODES */
@ -541,8 +539,7 @@ SDL_EVDEV_translate_keycode(int keycode)
return scancode; return scancode;
} }
static int static int SDL_EVDEV_init_touchscreen(SDL_evdevlist_item *item, int udev_class)
SDL_EVDEV_init_touchscreen(SDL_evdevlist_item* item, int udev_class)
{ {
int ret, i; int ret, i;
unsigned long xreq, yreq; unsigned long xreq, yreq;
@ -643,8 +640,8 @@ SDL_EVDEV_init_touchscreen(SDL_evdevlist_item* item, int udev_class)
return 0; return 0;
} }
static void static void SDL_EVDEV_destroy_touchscreen(SDL_evdevlist_item *item)
SDL_EVDEV_destroy_touchscreen(SDL_evdevlist_item* item) { {
if (!item->is_touchscreen) { if (!item->is_touchscreen) {
return; return;
} }
@ -655,8 +652,7 @@ SDL_EVDEV_destroy_touchscreen(SDL_evdevlist_item* item) {
SDL_free(item->touchscreen_data); SDL_free(item->touchscreen_data);
} }
static void static void SDL_EVDEV_sync_device(SDL_evdevlist_item *item)
SDL_EVDEV_sync_device(SDL_evdevlist_item *item)
{ {
#ifdef EVIOCGMTSLOTS #ifdef EVIOCGMTSLOTS
int i, ret; int i, ret;
@ -781,8 +777,7 @@ SDL_EVDEV_sync_device(SDL_evdevlist_item *item)
#endif /* EVIOCGMTSLOTS */ #endif /* EVIOCGMTSLOTS */
} }
static int static int SDL_EVDEV_device_added(const char *dev_path, int udev_class)
SDL_EVDEV_device_added(const char *dev_path, int udev_class)
{ {
int ret; int ret;
SDL_evdevlist_item *item; SDL_evdevlist_item *item;
@ -843,8 +838,7 @@ SDL_EVDEV_device_added(const char *dev_path, int udev_class)
return _this->num_devices++; return _this->num_devices++;
} }
static int static int SDL_EVDEV_device_removed(const char *dev_path)
SDL_EVDEV_device_removed(const char *dev_path)
{ {
SDL_evdevlist_item *item; SDL_evdevlist_item *item;
SDL_evdevlist_item *prev = NULL; SDL_evdevlist_item *prev = NULL;
@ -876,7 +870,6 @@ SDL_EVDEV_device_removed(const char *dev_path)
return -1; return -1;
} }
#endif /* SDL_INPUT_LINUXEV */ #endif /* SDL_INPUT_LINUXEV */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -26,7 +26,6 @@
#ifdef SDL_INPUT_LINUXEV #ifdef SDL_INPUT_LINUXEV
extern int SDL_EVDEV_Init(void); extern int SDL_EVDEV_Init(void);
extern void SDL_EVDEV_Quit(void); extern void SDL_EVDEV_Quit(void);
extern void SDL_EVDEV_Poll(void); extern void SDL_EVDEV_Poll(void);

View File

@ -23,7 +23,6 @@
#include "SDL_evdev_capabilities.h" #include "SDL_evdev_capabilities.h"
#if HAVE_LINUX_INPUT_H #if HAVE_LINUX_INPUT_H
/* missing defines in older Linux kernel headers */ /* missing defines in older Linux kernel headers */
@ -43,7 +42,8 @@ SDL_EVDEV_GuessDeviceClass(unsigned long bitmask_ev[NBITS(EV_MAX)],
unsigned long bitmask_key[NBITS(KEY_MAX)], unsigned long bitmask_key[NBITS(KEY_MAX)],
unsigned long bitmask_rel[NBITS(REL_MAX)]) unsigned long bitmask_rel[NBITS(REL_MAX)])
{ {
struct range { struct range
{
unsigned start; unsigned start;
unsigned end; unsigned end;
}; };

View File

@ -69,8 +69,7 @@ static void fn_caps_on(SDL_EVDEV_keyboard_state *kbd);
static void fn_num(SDL_EVDEV_keyboard_state *kbd); static void fn_num(SDL_EVDEV_keyboard_state *kbd);
static void fn_compose(SDL_EVDEV_keyboard_state *kbd); static void fn_compose(SDL_EVDEV_keyboard_state *kbd);
static fn_handler_fn *fn_handler[] = static fn_handler_fn *fn_handler[] = {
{
NULL, fn_enter, NULL, NULL, NULL, fn_enter, NULL, NULL,
NULL, NULL, NULL, fn_caps_toggle, NULL, NULL, NULL, fn_caps_toggle,
fn_num, NULL, NULL, NULL, fn_num, NULL, NULL, NULL,
@ -78,7 +77,6 @@ static fn_handler_fn *fn_handler[] =
NULL, NULL, NULL, fn_num NULL, NULL, NULL, fn_num
}; };
/* /*
* Keyboard State * Keyboard State
*/ */
@ -199,8 +197,7 @@ static int kbd_cleanup_atexit_installed = 0;
static struct sigaction old_sigaction[NSIG]; static struct sigaction old_sigaction[NSIG];
static int fatal_signals[] = static int fatal_signals[] = {
{
/* Handlers for SIGTERM and SIGINT are installed in SDL_QuitInit. */ /* Handlers for SIGTERM and SIGINT are installed in SDL_QuitInit. */
SIGHUP, SIGQUIT, SIGILL, SIGABRT, SIGHUP, SIGQUIT, SIGILL, SIGABRT,
SIGFPE, SIGSEGV, SIGPIPE, SIGBUS, SIGFPE, SIGSEGV, SIGPIPE, SIGBUS,
@ -218,8 +215,7 @@ static void kbd_cleanup(void)
ioctl(kbd->console_fd, KDSKBMODE, kbd->old_kbd_mode); ioctl(kbd->console_fd, KDSKBMODE, kbd->old_kbd_mode);
} }
static void static void SDL_EVDEV_kbd_reraise_signal(int sig)
SDL_EVDEV_kbd_reraise_signal(int sig)
{ {
raise(sig); raise(sig);
} }
@ -410,8 +406,7 @@ SDL_EVDEV_kbd_init(void)
return kbd; return kbd;
} }
void void SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd)
SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd)
{ {
if (kbd == NULL) { if (kbd == NULL) {
return; return;
@ -767,8 +762,7 @@ static void k_brl(SDL_EVDEV_keyboard_state *kbd, unsigned char value, char up_fl
{ {
} }
void void SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *kbd, unsigned int keycode, int down)
SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *kbd, unsigned int keycode, int down)
{ {
unsigned char shift_final; unsigned char shift_final;
unsigned char type; unsigned char type;
@ -840,13 +834,11 @@ SDL_EVDEV_kbd_init(void)
return NULL; return NULL;
} }
void void SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *state, unsigned int keycode, int down)
SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *state, unsigned int keycode, int down)
{ {
} }
void void SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *state)
SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *state)
{ {
} }

View File

@ -19,6 +19,8 @@
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.
*/ */
/* *INDENT-OFF* */ /* clang-format off */
static unsigned short default_key_map_0[NR_KEYS] = { static unsigned short default_key_map_0[NR_KEYS] = {
0xf200, 0xf01b, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf200, 0xf01b, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036,
0xf037, 0xf038, 0xf039, 0xf030, 0xf02d, 0xf03d, 0xf07f, 0xf009, 0xf037, 0xf038, 0xf039, 0xf030, 0xf02d, 0xf03d, 0xf07f, 0xf009,
@ -4374,6 +4376,8 @@ static unsigned short default_key_map_127[NR_KEYS] = {
}; };
#endif /* INCLUDE_EXTENDED_KEYMAP */ #endif /* INCLUDE_EXTENDED_KEYMAP */
/* *INDENT-ON* */ /* clang-format on */
static unsigned short *default_key_maps[MAX_NR_KEYMAPS] = { static unsigned short *default_key_maps[MAX_NR_KEYMAPS] = {
default_key_map_0, default_key_map_0,
default_key_map_1, default_key_map_1,

View File

@ -32,7 +32,6 @@
#endif #endif
#include <SDL3/SDL_syswm.h> #include <SDL3/SDL_syswm.h>
#define FCITX_DBUS_SERVICE "org.freedesktop.portal.Fcitx" #define FCITX_DBUS_SERVICE "org.freedesktop.portal.Fcitx"
#define FCITX_IM_DBUS_PATH "/org/freedesktop/portal/inputmethod" #define FCITX_IM_DBUS_PATH "/org/freedesktop/portal/inputmethod"
@ -55,8 +54,7 @@ typedef struct _FcitxClient
static FcitxClient fcitx_client; static FcitxClient fcitx_client;
static char* static char *GetAppName()
GetAppName()
{ {
#if defined(__LINUX__) || defined(__FREEBSD__) #if defined(__LINUX__) || defined(__FREEBSD__)
char *spot; char *spot;
@ -167,8 +165,7 @@ Fcitx_GetPreeditString(SDL_DBusContext *dbus,
return text_bytes; return text_bytes;
} }
static Sint32 static Sint32 Fcitx_GetPreeditCursorByte(SDL_DBusContext *dbus, DBusMessage *msg)
Fcitx_GetPreeditCursorByte(SDL_DBusContext *dbus, DBusMessage *msg)
{ {
Sint32 byte = -1; Sint32 byte = -1;
DBusMessageIter iter; DBusMessageIter iter;
@ -186,8 +183,7 @@ Fcitx_GetPreeditCursorByte(SDL_DBusContext *dbus, DBusMessage *msg)
return byte; return byte;
} }
static DBusHandlerResult static DBusHandlerResult DBus_MessageFilter(DBusConnection *conn, DBusMessage *msg, void *data)
DBus_MessageFilter(DBusConnection *conn, DBusMessage *msg, void *data)
{ {
SDL_DBusContext *dbus = (SDL_DBusContext *)data; SDL_DBusContext *dbus = (SDL_DBusContext *)data;
@ -250,8 +246,7 @@ DBus_MessageFilter(DBusConnection *conn, DBusMessage *msg, void *data)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} }
static void static void FcitxClientICCallMethod(FcitxClient *client, const char *method)
FcitxClientICCallMethod(FcitxClient *client, const char *method)
{ {
if (!client->ic_path) { if (!client->ic_path) {
return; return;
@ -259,8 +254,7 @@ FcitxClientICCallMethod(FcitxClient *client, const char *method)
SDL_DBus_CallVoidMethod(FCITX_DBUS_SERVICE, client->ic_path, FCITX_IC_DBUS_INTERFACE, method, DBUS_TYPE_INVALID); SDL_DBus_CallVoidMethod(FCITX_DBUS_SERVICE, client->ic_path, FCITX_IC_DBUS_INTERFACE, method, DBUS_TYPE_INVALID);
} }
static void SDLCALL static void SDLCALL Fcitx_SetCapabilities(void *data,
Fcitx_SetCapabilities(void *data,
const char *name, const char *name,
const char *old_val, const char *old_val,
const char *internal_editing) const char *internal_editing)
@ -279,8 +273,8 @@ Fcitx_SetCapabilities(void *data,
SDL_DBus_CallVoidMethod(FCITX_DBUS_SERVICE, client->ic_path, FCITX_IC_DBUS_INTERFACE, "SetCapability", DBUS_TYPE_UINT64, &caps, DBUS_TYPE_INVALID); SDL_DBus_CallVoidMethod(FCITX_DBUS_SERVICE, client->ic_path, FCITX_IC_DBUS_INTERFACE, "SetCapability", DBUS_TYPE_UINT64, &caps, DBUS_TYPE_INVALID);
} }
static SDL_bool static SDL_bool FcitxCreateInputContext(SDL_DBusContext *dbus, const char *appname, char **ic_path)
FcitxCreateInputContext(SDL_DBusContext* dbus, const char *appname, char **ic_path) { {
const char *program = "program"; const char *program = "program";
SDL_bool retval = SDL_FALSE; SDL_bool retval = SDL_FALSE;
if (dbus->session_conn) { if (dbus->session_conn) {
@ -308,8 +302,7 @@ FcitxCreateInputContext(SDL_DBusContext* dbus, const char *appname, char **ic_pa
return retval; return retval;
} }
static SDL_bool static SDL_bool FcitxClientCreateIC(FcitxClient *client)
FcitxClientCreateIC(FcitxClient *client)
{ {
char *appname = GetAppName(); char *appname = GetAppName();
char *ic_path = NULL; char *ic_path = NULL;
@ -341,8 +334,7 @@ FcitxClientCreateIC(FcitxClient *client)
return SDL_FALSE; return SDL_FALSE;
} }
static Uint32 static Uint32 Fcitx_ModState(void)
Fcitx_ModState(void)
{ {
Uint32 fcitx_mods = 0; Uint32 fcitx_mods = 0;
SDL_Keymod sdl_mods = SDL_GetModState(); SDL_Keymod sdl_mods = SDL_GetModState();
@ -388,8 +380,7 @@ SDL_Fcitx_Init()
return FcitxClientCreateIC(&fcitx_client); return FcitxClientCreateIC(&fcitx_client);
} }
void void SDL_Fcitx_Quit()
SDL_Fcitx_Quit()
{ {
FcitxClientICCallMethod(&fcitx_client, "DestroyIC"); FcitxClientICCallMethod(&fcitx_client, "DestroyIC");
if (fcitx_client.ic_path) { if (fcitx_client.ic_path) {
@ -398,8 +389,7 @@ SDL_Fcitx_Quit()
} }
} }
void void SDL_Fcitx_SetFocus(SDL_bool focused)
SDL_Fcitx_SetFocus(SDL_bool focused)
{ {
if (focused) { if (focused) {
FcitxClientICCallMethod(&fcitx_client, "FocusIn"); FcitxClientICCallMethod(&fcitx_client, "FocusIn");
@ -408,8 +398,7 @@ SDL_Fcitx_SetFocus(SDL_bool focused)
} }
} }
void void SDL_Fcitx_Reset(void)
SDL_Fcitx_Reset(void)
{ {
FcitxClientICCallMethod(&fcitx_client, "Reset"); FcitxClientICCallMethod(&fcitx_client, "Reset");
FcitxClientICCallMethod(&fcitx_client, "CloseIC"); FcitxClientICCallMethod(&fcitx_client, "CloseIC");
@ -439,8 +428,7 @@ SDL_Fcitx_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state)
return SDL_FALSE; return SDL_FALSE;
} }
void void SDL_Fcitx_UpdateTextRect(const SDL_Rect *rect)
SDL_Fcitx_UpdateTextRect(const SDL_Rect *rect)
{ {
SDL_Window *focused_win = NULL; SDL_Window *focused_win = NULL;
SDL_SysWMinfo info; SDL_SysWMinfo info;
@ -485,8 +473,7 @@ SDL_Fcitx_UpdateTextRect(const SDL_Rect *rect)
DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y, DBUS_TYPE_INT32, &cursor->w, DBUS_TYPE_INT32, &cursor->h, DBUS_TYPE_INVALID); DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y, DBUS_TYPE_INT32, &cursor->w, DBUS_TYPE_INT32, &cursor->h, DBUS_TYPE_INVALID);
} }
void void SDL_Fcitx_PumpEvents(void)
SDL_Fcitx_PumpEvents(void)
{ {
SDL_DBusContext *dbus = fcitx_client.dbus; SDL_DBusContext *dbus = fcitx_client.dbus;
DBusConnection *conn = dbus->session_conn; DBusConnection *conn = dbus->session_conn;

View File

@ -24,7 +24,6 @@
#include "SDL_internal.h" #include "SDL_internal.h"
extern SDL_bool SDL_Fcitx_Init(void); extern SDL_bool SDL_Fcitx_Init(void);
extern void SDL_Fcitx_Quit(void); extern void SDL_Fcitx_Quit(void);
extern void SDL_Fcitx_SetFocus(SDL_bool focused); extern void SDL_Fcitx_SetFocus(SDL_bool focused);

View File

@ -56,9 +56,7 @@ static SDL_bool ibus_is_portal_interface = SDL_FALSE;
static char *ibus_addr_file = NULL; static char *ibus_addr_file = NULL;
static int inotify_fd = -1, inotify_wd = -1; static int inotify_fd = -1, inotify_wd = -1;
static Uint32 IBus_ModState(void)
static Uint32
IBus_ModState(void)
{ {
Uint32 ibus_mods = 0; Uint32 ibus_mods = 0;
SDL_Keymod sdl_mods = SDL_GetModState(); SDL_Keymod sdl_mods = SDL_GetModState();
@ -92,8 +90,7 @@ IBus_ModState(void)
return ibus_mods; return ibus_mods;
} }
static SDL_bool static SDL_bool IBus_EnterVariant(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus,
IBus_EnterVariant(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus,
DBusMessageIter *inside, const char *struct_id, size_t id_size) DBusMessageIter *inside, const char *struct_id, size_t id_size)
{ {
DBusMessageIter sub; DBusMessageIter sub;
@ -120,8 +117,7 @@ IBus_EnterVariant(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *
return SDL_TRUE; return SDL_TRUE;
} }
static SDL_bool static SDL_bool IBus_GetDecorationPosition(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus,
IBus_GetDecorationPosition(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus,
Uint32 *start_pos, Uint32 *end_pos) Uint32 *start_pos, Uint32 *end_pos)
{ {
DBusMessageIter sub1, sub2, array; DBusMessageIter sub1, sub2, array;
@ -185,8 +181,7 @@ IBus_GetDecorationPosition(DBusConnection *conn, DBusMessageIter *iter, SDL_DBus
return SDL_FALSE; return SDL_FALSE;
} }
static const char * static const char *IBus_GetVariantText(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus)
IBus_GetVariantText(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus)
{ {
/* The text we need is nested weirdly, use dbus-monitor to see the structure better */ /* The text we need is nested weirdly, use dbus-monitor to see the structure better */
const char *text = NULL; const char *text = NULL;
@ -207,8 +202,7 @@ IBus_GetVariantText(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext
return text; return text;
} }
static SDL_bool static SDL_bool IBus_GetVariantCursorPos(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus,
IBus_GetVariantCursorPos(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus,
Uint32 *pos) Uint32 *pos)
{ {
dbus->message_iter_next(iter); dbus->message_iter_next(iter);
@ -222,8 +216,7 @@ IBus_GetVariantCursorPos(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusCo
return SDL_TRUE; return SDL_TRUE;
} }
static DBusHandlerResult static DBusHandlerResult IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data)
IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data)
{ {
SDL_DBusContext *dbus = (SDL_DBusContext *)user_data; SDL_DBusContext *dbus = (SDL_DBusContext *)user_data;
@ -305,8 +298,7 @@ IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} }
static char * static char *IBus_ReadAddressFromFile(const char *file_path)
IBus_ReadAddressFromFile(const char *file_path)
{ {
char addr_buf[1024]; char addr_buf[1024];
SDL_bool success = SDL_FALSE; SDL_bool success = SDL_FALSE;
@ -340,8 +332,7 @@ IBus_ReadAddressFromFile(const char *file_path)
} }
} }
static char * static char *IBus_GetDBusAddressFilename(void)
IBus_GetDBusAddressFilename(void)
{ {
SDL_DBusContext *dbus; SDL_DBusContext *dbus;
const char *disp_env; const char *disp_env;
@ -431,8 +422,7 @@ IBus_GetDBusAddressFilename(void)
static SDL_bool IBus_CheckConnection(SDL_DBusContext *dbus); static SDL_bool IBus_CheckConnection(SDL_DBusContext *dbus);
static void SDLCALL static void SDLCALL IBus_SetCapabilities(void *data, const char *name, const char *old_val,
IBus_SetCapabilities(void *data, const char *name, const char *old_val,
const char *internal_editing) const char *internal_editing)
{ {
SDL_DBusContext *dbus = SDL_DBus_GetContext(); SDL_DBusContext *dbus = SDL_DBus_GetContext();
@ -448,9 +438,7 @@ IBus_SetCapabilities(void *data, const char *name, const char *old_val,
} }
} }
static SDL_bool IBus_SetupConnection(SDL_DBusContext *dbus, const char *addr)
static SDL_bool
IBus_SetupConnection(SDL_DBusContext *dbus, const char* addr)
{ {
const char *client_name = "SDL3_Application"; const char *client_name = "SDL3_Application";
const char *path = NULL; const char *path = NULL;
@ -514,8 +502,7 @@ IBus_SetupConnection(SDL_DBusContext *dbus, const char* addr)
return result; return result;
} }
static SDL_bool static SDL_bool IBus_CheckConnection(SDL_DBusContext *dbus)
IBus_CheckConnection(SDL_DBusContext *dbus)
{ {
if (dbus == NULL) { if (dbus == NULL) {
return SDL_FALSE; return SDL_FALSE;
@ -620,8 +607,7 @@ SDL_IBus_Init(void)
return result; return result;
} }
void void SDL_IBus_Quit(void)
SDL_IBus_Quit(void)
{ {
SDL_DBusContext *dbus; SDL_DBusContext *dbus;
@ -661,8 +647,7 @@ SDL_IBus_Quit(void)
SDL_memset(&ibus_cursor_rect, 0, sizeof(ibus_cursor_rect)); SDL_memset(&ibus_cursor_rect, 0, sizeof(ibus_cursor_rect));
} }
static void static void IBus_SimpleMessage(const char *method)
IBus_SimpleMessage(const char *method)
{ {
SDL_DBusContext *dbus = SDL_DBus_GetContext(); SDL_DBusContext *dbus = SDL_DBus_GetContext();
@ -671,15 +656,13 @@ IBus_SimpleMessage(const char *method)
} }
} }
void void SDL_IBus_SetFocus(SDL_bool focused)
SDL_IBus_SetFocus(SDL_bool focused)
{ {
const char *method = focused ? "FocusIn" : "FocusOut"; const char *method = focused ? "FocusIn" : "FocusOut";
IBus_SimpleMessage(method); IBus_SimpleMessage(method);
} }
void void SDL_IBus_Reset(void)
SDL_IBus_Reset(void)
{ {
IBus_SimpleMessage("Reset"); IBus_SimpleMessage("Reset");
} }
@ -690,7 +673,6 @@ SDL_IBus_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state)
Uint32 result = 0; Uint32 result = 0;
SDL_DBusContext *dbus = SDL_DBus_GetContext(); SDL_DBusContext *dbus = SDL_DBus_GetContext();
if (IBus_CheckConnection(dbus)) { if (IBus_CheckConnection(dbus)) {
Uint32 mods = IBus_ModState(); Uint32 mods = IBus_ModState();
Uint32 ibus_keycode = keycode - 8; Uint32 ibus_keycode = keycode - 8;
@ -709,8 +691,7 @@ SDL_IBus_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state)
return result ? SDL_TRUE : SDL_FALSE; return result ? SDL_TRUE : SDL_FALSE;
} }
void void SDL_IBus_UpdateTextRect(const SDL_Rect *rect)
SDL_IBus_UpdateTextRect(const SDL_Rect *rect)
{ {
SDL_Window *focused_win; SDL_Window *focused_win;
SDL_SysWMinfo info; SDL_SysWMinfo info;
@ -752,8 +733,7 @@ SDL_IBus_UpdateTextRect(const SDL_Rect *rect)
} }
} }
void void SDL_IBus_PumpEvents(void)
SDL_IBus_PumpEvents(void)
{ {
SDL_DBusContext *dbus = SDL_DBus_GetContext(); SDL_DBusContext *dbus = SDL_DBus_GetContext();

View File

@ -40,8 +40,7 @@ static _SDL_IME_ProcessKeyEvent SDL_IME_ProcessKeyEvent_Real = NULL;
static _SDL_IME_UpdateTextRect SDL_IME_UpdateTextRect_Real = NULL; static _SDL_IME_UpdateTextRect SDL_IME_UpdateTextRect_Real = NULL;
static _SDL_IME_PumpEvents SDL_IME_PumpEvents_Real = NULL; static _SDL_IME_PumpEvents SDL_IME_PumpEvents_Real = NULL;
static void static void InitIME()
InitIME()
{ {
static SDL_bool inited = SDL_FALSE; static SDL_bool inited = SDL_FALSE;
#ifdef HAVE_FCITX #ifdef HAVE_FCITX
@ -107,24 +106,21 @@ SDL_IME_Init(void)
return SDL_FALSE; return SDL_FALSE;
} }
void void SDL_IME_Quit(void)
SDL_IME_Quit(void)
{ {
if (SDL_IME_Quit_Real) { if (SDL_IME_Quit_Real) {
SDL_IME_Quit_Real(); SDL_IME_Quit_Real();
} }
} }
void void SDL_IME_SetFocus(SDL_bool focused)
SDL_IME_SetFocus(SDL_bool focused)
{ {
if (SDL_IME_SetFocus_Real) { if (SDL_IME_SetFocus_Real) {
SDL_IME_SetFocus_Real(focused); SDL_IME_SetFocus_Real(focused);
} }
} }
void void SDL_IME_Reset(void)
SDL_IME_Reset(void)
{ {
if (SDL_IME_Reset_Real) { if (SDL_IME_Reset_Real) {
SDL_IME_Reset_Real(); SDL_IME_Reset_Real();
@ -141,16 +137,14 @@ SDL_IME_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state)
return SDL_FALSE; return SDL_FALSE;
} }
void void SDL_IME_UpdateTextRect(const SDL_Rect *rect)
SDL_IME_UpdateTextRect(const SDL_Rect *rect)
{ {
if (SDL_IME_UpdateTextRect_Real) { if (SDL_IME_UpdateTextRect_Real) {
SDL_IME_UpdateTextRect_Real(rect); SDL_IME_UpdateTextRect_Real(rect);
} }
} }
void void SDL_IME_PumpEvents()
SDL_IME_PumpEvents()
{ {
if (SDL_IME_PumpEvents_Real) { if (SDL_IME_PumpEvents_Real) {
SDL_IME_PumpEvents_Real(); SDL_IME_PumpEvents_Real();

View File

@ -24,7 +24,6 @@
#include "SDL_internal.h" #include "SDL_internal.h"
extern SDL_bool SDL_IME_Init(void); extern SDL_bool SDL_IME_Init(void);
extern void SDL_IME_Quit(void); extern void SDL_IME_Quit(void);
extern void SDL_IME_SetFocus(SDL_bool focused); extern void SDL_IME_SetFocus(SDL_bool focused);

View File

@ -33,9 +33,7 @@ SDL_Sandbox SDL_DetectSandbox(void)
/* For Snap, we check multiple variables because they might be set for /* For Snap, we check multiple variables because they might be set for
* unrelated reasons. This is the same thing WebKitGTK does. */ * unrelated reasons. This is the same thing WebKitGTK does. */
if (SDL_getenv("SNAP") != NULL if (SDL_getenv("SNAP") != NULL && SDL_getenv("SNAP_NAME") != NULL && SDL_getenv("SNAP_REVISION") != NULL) {
&& SDL_getenv("SNAP_NAME") != NULL
&& SDL_getenv("SNAP_REVISION") != NULL) {
return SDL_SANDBOX_SNAP; return SDL_SANDBOX_SNAP;
} }

View File

@ -22,7 +22,6 @@
#ifdef __LINUX__ #ifdef __LINUX__
#if !SDL_THREADS_DISABLED #if !SDL_THREADS_DISABLED
#include <sys/time.h> #include <sys/time.h>
#include <sys/resource.h> #include <sys/resource.h>
@ -68,16 +67,14 @@ static Sint64 rtkit_max_rttime_usec = 200000;
* - The desktop portal exists and supports the realtime interface. * - The desktop portal exists and supports the realtime interface.
* - The realtime interface is new enough to have the required bug fixes applied. * - The realtime interface is new enough to have the required bug fixes applied.
*/ */
static SDL_bool static SDL_bool realtime_portal_supported(DBusConnection *conn)
realtime_portal_supported(DBusConnection *conn)
{ {
Sint64 res; Sint64 res;
return SDL_DBus_QueryPropertyOnConnection(conn, XDG_PORTAL_DBUS_NODE, XDG_PORTAL_DBUS_PATH, XDG_PORTAL_DBUS_INTERFACE, return SDL_DBus_QueryPropertyOnConnection(conn, XDG_PORTAL_DBUS_NODE, XDG_PORTAL_DBUS_PATH, XDG_PORTAL_DBUS_INTERFACE,
"RTTimeUSecMax", DBUS_TYPE_INT64, &res); "RTTimeUSecMax", DBUS_TYPE_INT64, &res);
} }
static void static void set_rtkit_interface()
set_rtkit_interface()
{ {
SDL_DBusContext *dbus = SDL_DBus_GetContext(); SDL_DBusContext *dbus = SDL_DBus_GetContext();
@ -95,8 +92,7 @@ set_rtkit_interface()
} }
} }
static DBusConnection* static DBusConnection *get_rtkit_dbus_connection()
get_rtkit_dbus_connection()
{ {
SDL_DBusContext *dbus = SDL_DBus_GetContext(); SDL_DBusContext *dbus = SDL_DBus_GetContext();
@ -107,8 +103,7 @@ get_rtkit_dbus_connection()
return NULL; return NULL;
} }
static void static void rtkit_initialize()
rtkit_initialize()
{ {
DBusConnection *dbus_conn; DBusConnection *dbus_conn;
@ -134,8 +129,7 @@ rtkit_initialize()
} }
} }
static SDL_bool static SDL_bool rtkit_initialize_realtime_thread()
rtkit_initialize_realtime_thread()
{ {
// Following is an excerpt from rtkit README that outlines the requirements // Following is an excerpt from rtkit README that outlines the requirements
// a thread must meet before making rtkit requests: // a thread must meet before making rtkit requests:
@ -194,8 +188,7 @@ rtkit_initialize_realtime_thread()
return SDL_TRUE; return SDL_TRUE;
} }
static SDL_bool static SDL_bool rtkit_setpriority_nice(pid_t thread, int nice_level)
rtkit_setpriority_nice(pid_t thread, int nice_level)
{ {
DBusConnection *dbus_conn; DBusConnection *dbus_conn;
Uint64 pid = (Uint64)getpid(); Uint64 pid = (Uint64)getpid();
@ -218,8 +211,7 @@ rtkit_setpriority_nice(pid_t thread, int nice_level)
return SDL_TRUE; return SDL_TRUE;
} }
static SDL_bool static SDL_bool rtkit_setpriority_realtime(pid_t thread, int rt_priority)
rtkit_setpriority_realtime(pid_t thread, int rt_priority)
{ {
DBusConnection *dbus_conn; DBusConnection *dbus_conn;
Uint64 pid = (Uint64)getpid(); Uint64 pid = (Uint64)getpid();
@ -257,8 +249,7 @@ rtkit_setpriority_realtime(pid_t thread, int rt_priority)
#endif /* threads */ #endif /* threads */
/* this is a public symbol, so it has to exist even if threads are disabled. */ /* this is a public symbol, so it has to exist even if threads are disabled. */
int int SDL_LinuxSetThreadPriority(Sint64 threadID, int priority)
SDL_LinuxSetThreadPriority(Sint64 threadID, int priority)
{ {
#if SDL_THREADS_DISABLED #if SDL_THREADS_DISABLED
return SDL_Unsupported(); return SDL_Unsupported();
@ -290,8 +281,7 @@ SDL_LinuxSetThreadPriority(Sint64 threadID, int priority)
} }
/* this is a public symbol, so it has to exist even if threads are disabled. */ /* this is a public symbol, so it has to exist even if threads are disabled. */
int int SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy)
SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy)
{ {
#if SDL_THREADS_DISABLED #if SDL_THREADS_DISABLED
return SDL_Unsupported(); return SDL_Unsupported();

View File

@ -45,8 +45,7 @@ static int SDL_UDEV_load_syms(void);
static SDL_bool SDL_UDEV_hotplug_update_available(void); static SDL_bool SDL_UDEV_hotplug_update_available(void);
static void device_event(SDL_UDEV_deviceevent type, struct udev_device *dev); static void device_event(SDL_UDEV_deviceevent type, struct udev_device *dev);
static SDL_bool static SDL_bool SDL_UDEV_load_sym(const char *fn, void **addr)
SDL_UDEV_load_sym(const char *fn, void **addr)
{ {
*addr = SDL_LoadFunction(_this->udev_handle, fn); *addr = SDL_LoadFunction(_this->udev_handle, fn);
if (*addr == NULL) { if (*addr == NULL) {
@ -57,12 +56,12 @@ SDL_UDEV_load_sym(const char *fn, void **addr)
return SDL_TRUE; return SDL_TRUE;
} }
static int static int SDL_UDEV_load_syms(void)
SDL_UDEV_load_syms(void)
{ {
/* 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_UDEV_SYM(x) \ #define SDL_UDEV_SYM(x) \
if (!SDL_UDEV_load_sym(#x, (void **) (char *) & _this->syms.x)) return -1 if (!SDL_UDEV_load_sym(#x, (void **)(char *)&_this->syms.x)) \
return -1
SDL_UDEV_SYM(udev_device_get_action); SDL_UDEV_SYM(udev_device_get_action);
SDL_UDEV_SYM(udev_device_get_devnode); SDL_UDEV_SYM(udev_device_get_devnode);
@ -95,8 +94,7 @@ SDL_UDEV_load_syms(void)
return 0; return 0;
} }
static SDL_bool static SDL_bool SDL_UDEV_hotplug_update_available(void)
SDL_UDEV_hotplug_update_available(void)
{ {
if (_this->udev_mon != NULL) { if (_this->udev_mon != NULL) {
const int fd = _this->syms.udev_monitor_get_fd(_this->udev_mon); const int fd = _this->syms.udev_monitor_get_fd(_this->udev_mon);
@ -107,9 +105,7 @@ SDL_UDEV_hotplug_update_available(void)
return SDL_FALSE; return SDL_FALSE;
} }
int SDL_UDEV_Init(void)
int
SDL_UDEV_Init(void)
{ {
int retval = 0; int retval = 0;
@ -147,7 +143,6 @@ SDL_UDEV_Init(void)
/* Do an initial scan of existing devices */ /* Do an initial scan of existing devices */
SDL_UDEV_Scan(); SDL_UDEV_Scan();
} }
_this->ref_count += 1; _this->ref_count += 1;
@ -155,8 +150,7 @@ SDL_UDEV_Init(void)
return retval; return retval;
} }
void void SDL_UDEV_Quit(void)
SDL_UDEV_Quit(void)
{ {
SDL_UDEV_CallbackList *item; SDL_UDEV_CallbackList *item;
@ -190,8 +184,7 @@ SDL_UDEV_Quit(void)
} }
} }
void void SDL_UDEV_Scan(void)
SDL_UDEV_Scan(void)
{ {
struct udev_enumerate *enumerate = NULL; struct udev_enumerate *enumerate = NULL;
struct udev_list_entry *devs = NULL; struct udev_list_entry *devs = NULL;
@ -279,11 +272,7 @@ SDL_UDEV_GetProductInfo(const char *device_path, Uint16 *vendor, Uint16 *product
return found; return found;
} }
void SDL_UDEV_UnloadLibrary(void)
void
SDL_UDEV_UnloadLibrary(void)
{ {
if (_this == NULL) { if (_this == NULL) {
return; return;
@ -295,8 +284,7 @@ SDL_UDEV_UnloadLibrary(void)
} }
} }
int int SDL_UDEV_LoadLibrary(void)
SDL_UDEV_LoadLibrary(void)
{ {
int retval = 0, i; int retval = 0, i;
@ -374,8 +362,7 @@ static void get_caps(struct udev_device *dev, struct udev_device *pdev, const ch
} }
} }
static int static int guess_device_class(struct udev_device *dev)
guess_device_class(struct udev_device *dev)
{ {
struct udev_device *pdev; struct udev_device *pdev;
unsigned long bitmask_ev[NBITS(EV_MAX)]; unsigned long bitmask_ev[NBITS(EV_MAX)];
@ -404,8 +391,7 @@ guess_device_class(struct udev_device *dev)
&bitmask_rel[0]); &bitmask_rel[0]);
} }
static void static void device_event(SDL_UDEV_deviceevent type, struct udev_device *dev)
device_event(SDL_UDEV_deviceevent type, struct udev_device *dev)
{ {
const char *subsystem; const char *subsystem;
const char *val = NULL; const char *val = NULL;
@ -484,8 +470,7 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev)
} }
} }
void void SDL_UDEV_Poll(void)
SDL_UDEV_Poll(void)
{ {
struct udev_device *dev = NULL; struct udev_device *dev = NULL;
const char *action = NULL; const char *action = NULL;
@ -513,8 +498,7 @@ SDL_UDEV_Poll(void)
} }
} }
int int SDL_UDEV_AddCallback(SDL_UDEV_Callback cb)
SDL_UDEV_AddCallback(SDL_UDEV_Callback cb)
{ {
SDL_UDEV_CallbackList *item; SDL_UDEV_CallbackList *item;
item = (SDL_UDEV_CallbackList *)SDL_calloc(1, sizeof(SDL_UDEV_CallbackList)); item = (SDL_UDEV_CallbackList *)SDL_calloc(1, sizeof(SDL_UDEV_CallbackList));
@ -534,8 +518,7 @@ SDL_UDEV_AddCallback(SDL_UDEV_Callback cb)
return 1; return 1;
} }
void void SDL_UDEV_DelCallback(SDL_UDEV_Callback cb)
SDL_UDEV_DelCallback(SDL_UDEV_Callback cb)
{ {
SDL_UDEV_CallbackList *item; SDL_UDEV_CallbackList *item;
SDL_UDEV_CallbackList *prev = NULL; SDL_UDEV_CallbackList *prev = NULL;
@ -574,8 +557,7 @@ SDL_UDEV_GetUdevSyms(void)
return &_this->syms; return &_this->syms;
} }
void void SDL_UDEV_ReleaseUdevSyms(void)
SDL_UDEV_ReleaseUdevSyms(void)
{ {
SDL_UDEV_Quit(); SDL_UDEV_Quit();
} }

View File

@ -46,12 +46,14 @@ typedef enum
typedef void (*SDL_UDEV_Callback)(SDL_UDEV_deviceevent udev_type, int udev_class, const char *devpath); typedef void (*SDL_UDEV_Callback)(SDL_UDEV_deviceevent udev_type, int udev_class, const char *devpath);
typedef struct SDL_UDEV_CallbackList { typedef struct SDL_UDEV_CallbackList
{
SDL_UDEV_Callback callback; SDL_UDEV_Callback callback;
struct SDL_UDEV_CallbackList *next; struct SDL_UDEV_CallbackList *next;
} SDL_UDEV_CallbackList; } SDL_UDEV_CallbackList;
typedef struct SDL_UDEV_Symbols { typedef struct SDL_UDEV_Symbols
{
const char *(*udev_device_get_action)(struct udev_device *); const char *(*udev_device_get_action)(struct udev_device *);
const char *(*udev_device_get_devnode)(struct udev_device *); const char *(*udev_device_get_devnode)(struct udev_device *);
const char *(*udev_device_get_subsystem)(struct udev_device *); const char *(*udev_device_get_subsystem)(struct udev_device *);
@ -105,7 +107,6 @@ extern void SDL_UDEV_DelCallback(SDL_UDEV_Callback cb);
extern const SDL_UDEV_Symbols *SDL_UDEV_GetUdevSyms(void); extern const SDL_UDEV_Symbols *SDL_UDEV_GetUdevSyms(void);
extern void SDL_UDEV_ReleaseUdevSyms(void); extern void SDL_UDEV_ReleaseUdevSyms(void);
#endif /* HAVE_LIBUDEV_H && HAVE_LINUX_INPUT_H */ #endif /* HAVE_LIBUDEV_H && HAVE_LINUX_INPUT_H */
#endif /* SDL_udev_h_ */ #endif /* SDL_udev_h_ */

View File

@ -19,9 +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.
*/ */
void SDL_WSCONS_Init(); void SDL_WSCONS_Init();
void SDL_WSCONS_Quit(); void SDL_WSCONS_Quit();
void SDL_WSCONS_PumpEvents(); void SDL_WSCONS_PumpEvents();

View File

@ -40,7 +40,12 @@
#define KS_Cmd_ScrollFwd KS_Cmd_ScrollFastDown #define KS_Cmd_ScrollFwd KS_Cmd_ScrollFastDown
#endif #endif
#define RETIFIOCTLERR(x) if (x == -1) { free(input); input = NULL; return NULL;} #define RETIFIOCTLERR(x) \
if (x == -1) { \
free(input); \
input = NULL; \
return NULL; \
}
typedef struct SDL_WSCONS_mouse_input_data SDL_WSCONS_mouse_input_data; typedef struct SDL_WSCONS_mouse_input_data SDL_WSCONS_mouse_input_data;
extern SDL_WSCONS_mouse_input_data *SDL_WSCONS_Init_Mouse(); extern SDL_WSCONS_mouse_input_data *SDL_WSCONS_Init_Mouse();
@ -85,7 +90,8 @@ static const unsigned char latin1_to_upper[256] = {
}; };
/* Compose table courtesy of /usr/src/sys/dev/wscons/wskbdutil.c */ /* Compose table courtesy of /usr/src/sys/dev/wscons/wskbdutil.c */
static struct SDL_wscons_compose_tab_s { static struct SDL_wscons_compose_tab_s
{
keysym_t elem[2]; keysym_t elem[2];
keysym_t result; keysym_t result;
} compose_tab[] = { } compose_tab[] = {
@ -239,7 +245,8 @@ static keysym_t ksym_upcase(keysym_t ksym)
return ksym; return ksym;
} }
static struct wscons_keycode_to_SDL { static struct wscons_keycode_to_SDL
{
keysym_t sourcekey; keysym_t sourcekey;
SDL_Scancode targetKey; SDL_Scancode targetKey;
} conversion_table[] = { } conversion_table[] = {
@ -378,7 +385,8 @@ static struct wscons_keycode_to_SDL {
{ KS_backslash, SDL_SCANCODE_BACKSLASH } { KS_backslash, SDL_SCANCODE_BACKSLASH }
}; };
typedef struct { typedef struct
{
int fd; int fd;
struct wskbd_map_data keymap; struct wskbd_map_data keymap;
int ledstate; int ledstate;
@ -543,11 +551,13 @@ static void Translate_to_keycode(SDL_WSCONS_input_data* input, int type, keysym_
/* Check command first, then group[0]*/ /* Check command first, then group[0]*/
switch (keyDesc.command) { switch (keyDesc.command) {
case KS_Cmd_ScrollBack: { case KS_Cmd_ScrollBack:
{
SDL_SendKeyboardKey(type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_PAGEUP); SDL_SendKeyboardKey(type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_PAGEUP);
return; return;
} }
case KS_Cmd_ScrollFwd: { case KS_Cmd_ScrollFwd:
{
SDL_SendKeyboardKey(type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_PAGEDOWN); SDL_SendKeyboardKey(type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_PAGEDOWN);
return; return;
} }
@ -559,7 +569,6 @@ static void Translate_to_keycode(SDL_WSCONS_input_data* input, int type, keysym_
} }
} }
SDL_SendKeyboardKey(type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_UNKNOWN); SDL_SendKeyboardKey(type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_UNKNOWN);
} }
static void updateKeyboard(SDL_WSCONS_input_data *input) static void updateKeyboard(SDL_WSCONS_input_data *input)
@ -578,9 +587,11 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
type = events[i].type; type = events[i].type;
switch (type) { switch (type) {
case WSCONS_EVENT_KEY_DOWN: { case WSCONS_EVENT_KEY_DOWN:
{
switch (input->keymap.map[events[i].value].group1[0]) { switch (input->keymap.map[events[i].value].group1[0]) {
case KS_Hold_Screen: { case KS_Hold_Screen:
{
if (input->lockheldstate[0] >= 1) { if (input->lockheldstate[0] >= 1) {
break; break;
} }
@ -589,7 +600,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->lockheldstate[0] = 1; input->lockheldstate[0] = 1;
break; break;
} }
case KS_Num_Lock: { case KS_Num_Lock:
{
if (input->lockheldstate[1] >= 1) { if (input->lockheldstate[1] >= 1) {
break; break;
} }
@ -598,7 +610,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->lockheldstate[1] = 1; input->lockheldstate[1] = 1;
break; break;
} }
case KS_Caps_Lock: { case KS_Caps_Lock:
{
if (input->lockheldstate[2] >= 1) { if (input->lockheldstate[2] >= 1) {
break; break;
} }
@ -608,7 +621,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
break; break;
} }
#ifndef __NetBSD__ #ifndef __NetBSD__
case KS_Mode_Lock: { case KS_Mode_Lock:
{
if (input->lockheldstate[3] >= 1) { if (input->lockheldstate[3] >= 1) {
break; break;
} }
@ -618,7 +632,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
break; break;
} }
#endif #endif
case KS_Shift_Lock: { case KS_Shift_Lock:
{
if (input->lockheldstate[4] >= 1) { if (input->lockheldstate[4] >= 1) {
break; break;
} }
@ -627,7 +642,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->lockheldstate[4] = 1; input->lockheldstate[4] = 1;
break; break;
} }
case KS_Shift_L: { case KS_Shift_L:
{
if (input->shiftheldstate[0]) { if (input->shiftheldstate[0]) {
break; break;
} }
@ -635,7 +651,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->shiftheldstate[0] = 1; input->shiftheldstate[0] = 1;
break; break;
} }
case KS_Shift_R: { case KS_Shift_R:
{
if (input->shiftheldstate[1]) { if (input->shiftheldstate[1]) {
break; break;
} }
@ -643,7 +660,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->shiftheldstate[1] = 1; input->shiftheldstate[1] = 1;
break; break;
} }
case KS_Alt_L: { case KS_Alt_L:
{
if (input->shiftheldstate[2]) { if (input->shiftheldstate[2]) {
break; break;
} }
@ -651,7 +669,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->shiftheldstate[2] = 1; input->shiftheldstate[2] = 1;
break; break;
} }
case KS_Alt_R: { case KS_Alt_R:
{
if (input->shiftheldstate[3]) { if (input->shiftheldstate[3]) {
break; break;
} }
@ -659,7 +678,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->shiftheldstate[3] = 1; input->shiftheldstate[3] = 1;
break; break;
} }
case KS_Control_L: { case KS_Control_L:
{
if (input->shiftheldstate[4]) { if (input->shiftheldstate[4]) {
break; break;
} }
@ -667,7 +687,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->shiftheldstate[4] = 1; input->shiftheldstate[4] = 1;
break; break;
} }
case KS_Control_R: { case KS_Control_R:
{
if (input->shiftheldstate[5]) { if (input->shiftheldstate[5]) {
break; break;
} }
@ -675,7 +696,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->shiftheldstate[5] = 1; input->shiftheldstate[5] = 1;
break; break;
} }
case KS_Mode_switch: { case KS_Mode_switch:
{
if (input->shiftheldstate[6]) { if (input->shiftheldstate[6]) {
break; break;
} }
@ -684,85 +706,92 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
break; break;
} }
} }
} } break;
break; case WSCONS_EVENT_KEY_UP:
case WSCONS_EVENT_KEY_UP: { {
switch (input->keymap.map[events[i].value].group1[0]) { switch (input->keymap.map[events[i].value].group1[0]) {
case KS_Hold_Screen: { case KS_Hold_Screen:
{
if (input->lockheldstate[0]) { if (input->lockheldstate[0]) {
input->lockheldstate[0] = 0; input->lockheldstate[0] = 0;
} }
} } break;
break; case KS_Num_Lock:
case KS_Num_Lock: { {
if (input->lockheldstate[1]) { if (input->lockheldstate[1]) {
input->lockheldstate[1] = 0; input->lockheldstate[1] = 0;
} }
} } break;
break; case KS_Caps_Lock:
case KS_Caps_Lock: { {
if (input->lockheldstate[2]) { if (input->lockheldstate[2]) {
input->lockheldstate[2] = 0; input->lockheldstate[2] = 0;
} }
} } break;
break;
#ifndef __NetBSD__ #ifndef __NetBSD__
case KS_Mode_Lock: { case KS_Mode_Lock:
{
if (input->lockheldstate[3]) { if (input->lockheldstate[3]) {
input->lockheldstate[3] = 0; input->lockheldstate[3] = 0;
} }
} } break;
break;
#endif #endif
case KS_Shift_Lock: { case KS_Shift_Lock:
{
if (input->lockheldstate[4]) { if (input->lockheldstate[4]) {
input->lockheldstate[4] = 0; input->lockheldstate[4] = 0;
} }
} } break;
break; case KS_Shift_L:
case KS_Shift_L: { {
input->shiftheldstate[0] = 0; input->shiftheldstate[0] = 0;
if (input->shiftstate[0]) { if (input->shiftstate[0]) {
input->shiftstate[0]--; input->shiftstate[0]--;
} }
break; break;
} }
case KS_Shift_R: { case KS_Shift_R:
{
input->shiftheldstate[1] = 0; input->shiftheldstate[1] = 0;
if (input->shiftstate[0]) { if (input->shiftstate[0]) {
input->shiftstate[0]--; input->shiftstate[0]--;
} }
break; break;
} }
case KS_Alt_L: { case KS_Alt_L:
{
input->shiftheldstate[2] = 0; input->shiftheldstate[2] = 0;
if (input->shiftstate[1]) { if (input->shiftstate[1]) {
input->shiftstate[1]--; input->shiftstate[1]--;
} }
break; break;
} }
case KS_Alt_R: { case KS_Alt_R:
{
input->shiftheldstate[3] = 0; input->shiftheldstate[3] = 0;
if (input->shiftstate[1]) { if (input->shiftstate[1]) {
input->shiftstate[1]--; input->shiftstate[1]--;
} }
break; break;
} }
case KS_Control_L: { case KS_Control_L:
{
input->shiftheldstate[4] = 0; input->shiftheldstate[4] = 0;
if (input->shiftstate[2]) { if (input->shiftstate[2]) {
input->shiftstate[2]--; input->shiftstate[2]--;
} }
break; break;
} }
case KS_Control_R: { case KS_Control_R:
{
input->shiftheldstate[5] = 0; input->shiftheldstate[5] = 0;
if (input->shiftstate[2]) { if (input->shiftstate[2]) {
input->shiftstate[2]--; input->shiftstate[2]--;
} }
break; break;
} }
case KS_Mode_switch: { case KS_Mode_switch:
{
input->shiftheldstate[6] = 0; input->shiftheldstate[6] = 0;
if (input->shiftstate[3]) { if (input->shiftstate[3]) {
input->shiftstate[3]--; input->shiftstate[3]--;
@ -770,8 +799,7 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
break; break;
} }
} }
} } break;
break;
case WSCONS_EVENT_ALL_KEYS_UP: case WSCONS_EVENT_ALL_KEYS_UP:
for (i = 0; i < SDL_NUM_SCANCODES; i++) { for (i = 0; i < SDL_NUM_SCANCODES; i++) {
SDL_SendKeyboardKey(SDL_RELEASED, i); SDL_SendKeyboardKey(SDL_RELEASED, i);
@ -828,7 +856,8 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->composelen = 1; input->composelen = 1;
input->composebuffer[0] = ksym; input->composebuffer[0] = ksym;
input->composebuffer[1] = 0; input->composebuffer[1] = 0;
} else result = ksym; } else
result = ksym;
break; break;
} }
if (result == KS_voidSymbol) { if (result == KS_voidSymbol) {
@ -850,15 +879,13 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->ledstate &= ~WSKBD_LED_COMPOSE; input->ledstate &= ~WSKBD_LED_COMPOSE;
ioctl(input->fd, WSKBDIO_SETLEDS, &input->ledstate); ioctl(input->fd, WSKBDIO_SETLEDS, &input->ledstate);
for (acc_i = 0; acc_i < SDL_arraysize(compose_tab); acc_i++) { for (acc_i = 0; acc_i < SDL_arraysize(compose_tab); acc_i++) {
if ((compose_tab[acc_i].elem[0] == input->composebuffer[0] if ((compose_tab[acc_i].elem[0] == input->composebuffer[0] && compose_tab[acc_i].elem[1] == input->composebuffer[1]) || (compose_tab[acc_i].elem[0] == input->composebuffer[1] && compose_tab[acc_i].elem[1] == input->composebuffer[0])) {
&& compose_tab[acc_i].elem[1] == input->composebuffer[1])
|| (compose_tab[acc_i].elem[0] == input->composebuffer[1]
&& compose_tab[acc_i].elem[1] == input->composebuffer[0])) {
result = compose_tab[acc_i].result; result = compose_tab[acc_i].result;
break; break;
} }
} }
} else continue; } else
continue;
} }
} }

View File

@ -45,7 +45,10 @@ SDL_WSCONS_mouse_input_data* SDL_WSCONS_Init_Mouse()
return NULL; return NULL;
} }
mouseInputData->fd = open("/dev/wsmouse", O_RDWR | O_NONBLOCK | O_CLOEXEC); mouseInputData->fd = open("/dev/wsmouse", O_RDWR | O_NONBLOCK | O_CLOEXEC);
if (mouseInputData->fd == -1) {free(mouseInputData); return NULL; } if (mouseInputData->fd == -1) {
free(mouseInputData);
return NULL;
}
#ifdef WSMOUSEIO_SETMODE #ifdef WSMOUSEIO_SETMODE
ioctl(mouseInputData->fd, WSMOUSEIO_SETMODE, WSMOUSE_COMPAT); ioctl(mouseInputData->fd, WSMOUSEIO_SETMODE, WSMOUSE_COMPAT);
#endif #endif
@ -66,12 +69,10 @@ void updateMouse(SDL_WSCONS_mouse_input_data* inputData)
n /= sizeof(struct wscons_event); n /= sizeof(struct wscons_event);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
type = events[i].type; type = events[i].type;
switch(type) switch (type) {
{
case WSCONS_EVENT_MOUSE_DOWN: case WSCONS_EVENT_MOUSE_DOWN:
{ {
switch (events[i].value) switch (events[i].value) {
{
case 0: /* Left Mouse Button. */ case 0: /* Left Mouse Button. */
SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_LEFT); SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_LEFT);
break; break;
@ -82,12 +83,10 @@ void updateMouse(SDL_WSCONS_mouse_input_data* inputData)
SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_RIGHT); SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_RIGHT);
break; break;
} }
} } break;
break;
case WSCONS_EVENT_MOUSE_UP: case WSCONS_EVENT_MOUSE_UP:
{ {
switch (events[i].value) switch (events[i].value) {
{
case 0: /* Left Mouse Button. */ case 0: /* Left Mouse Button. */
SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_LEFT); SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_LEFT);
break; break;
@ -98,8 +97,7 @@ void updateMouse(SDL_WSCONS_mouse_input_data* inputData)
SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_RIGHT); SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_RIGHT);
break; break;
} }
} } break;
break;
case WSCONS_EVENT_MOUSE_DELTA_X: case WSCONS_EVENT_MOUSE_DELTA_X:
{ {
SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 1, events[i].value, 0); SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 1, events[i].value, 0);

View File

@ -32,17 +32,14 @@
#endif #endif
#include <errno.h> #include <errno.h>
int SDL_IOReady(int fd, int flags, int timeoutMS)
int
SDL_IOReady(int fd, int flags, int timeoutMS)
{ {
int result; int result;
SDL_assert(flags & (SDL_IOR_READ | SDL_IOR_WRITE)); SDL_assert(flags & (SDL_IOR_READ | SDL_IOR_WRITE));
/* Note: We don't bother to account for elapsed time if we get EINTR */ /* Note: We don't bother to account for elapsed time if we get EINTR */
do do {
{
#ifdef HAVE_POLL #ifdef HAVE_POLL
struct pollfd info; struct pollfd info;

View File

@ -24,7 +24,6 @@
#ifndef SDL_poll_h_ #ifndef SDL_poll_h_
#define SDL_poll_h_ #define SDL_poll_h_
#define SDL_IOR_READ 0x1 #define SDL_IOR_READ 0x1
#define SDL_IOR_WRITE 0x2 #define SDL_IOR_WRITE 0x2
#define SDL_IOR_NO_RETRY 0x4 #define SDL_IOR_NO_RETRY 0x4

View File

@ -103,7 +103,10 @@
#ifdef HAVE_DINPUT_H #ifdef HAVE_DINPUT_H
#include <dinput.h> #include <dinput.h>
#else #else
typedef struct { int unused; } DIDEVICEINSTANCE; typedef struct
{
int unused;
} DIDEVICEINSTANCE;
#endif #endif
#endif /* SDL_directx_h_ */ #endif /* SDL_directx_h_ */

View File

@ -24,7 +24,6 @@
#include "SDL_hid.h" #include "SDL_hid.h"
HidD_GetString_t SDL_HidD_GetManufacturerString; HidD_GetString_t SDL_HidD_GetManufacturerString;
HidD_GetString_t SDL_HidD_GetProductString; HidD_GetString_t SDL_HidD_GetProductString;
HidP_GetCaps_t SDL_HidP_GetCaps; HidP_GetCaps_t SDL_HidP_GetCaps;
@ -36,9 +35,7 @@ HidP_GetData_t SDL_HidP_GetData;
static HMODULE s_pHIDDLL = 0; static HMODULE s_pHIDDLL = 0;
static int s_HIDDLLRefCount = 0; static int s_HIDDLLRefCount = 0;
int WIN_LoadHIDDLL(void)
int
WIN_LoadHIDDLL(void)
{ {
if (s_pHIDDLL) { if (s_pHIDDLL) {
SDL_assert(s_HIDDLLRefCount > 0); SDL_assert(s_HIDDLLRefCount > 0);
@ -71,8 +68,7 @@ WIN_LoadHIDDLL(void)
return 0; return 0;
} }
void void WIN_UnloadHIDDLL(void)
WIN_UnloadHIDDLL(void)
{ {
if (s_pHIDDLL) { if (s_pHIDDLL) {
SDL_assert(s_HIDDLLRefCount > 0); SDL_assert(s_HIDDLLRefCount > 0);

View File

@ -39,13 +39,15 @@ typedef struct _HIDD_ATTRIBUTES
USHORT VersionNumber; USHORT VersionNumber;
} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES; } HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES;
typedef enum { typedef enum
{
HidP_Input = 0, HidP_Input = 0,
HidP_Output = 1, HidP_Output = 1,
HidP_Feature = 2 HidP_Feature = 2
} HIDP_REPORT_TYPE; } HIDP_REPORT_TYPE;
typedef struct { typedef struct
{
USAGE UsagePage; USAGE UsagePage;
UCHAR ReportID; UCHAR ReportID;
BOOLEAN IsAlias; BOOLEAN IsAlias;
@ -58,8 +60,10 @@ typedef struct {
BOOLEAN IsDesignatorRange; BOOLEAN IsDesignatorRange;
BOOLEAN IsAbsolute; BOOLEAN IsAbsolute;
ULONG Reserved[10]; ULONG Reserved[10];
union { union
struct { {
struct
{
USAGE UsageMin; USAGE UsageMin;
USAGE UsageMax; USAGE UsageMax;
USHORT StringMin; USHORT StringMin;
@ -69,7 +73,8 @@ typedef struct {
USHORT DataIndexMin; USHORT DataIndexMin;
USHORT DataIndexMax; USHORT DataIndexMax;
} Range; } Range;
struct { struct
{
USAGE Usage; USAGE Usage;
USAGE Reserved1; USAGE Reserved1;
USHORT StringIndex; USHORT StringIndex;
@ -82,7 +87,8 @@ typedef struct {
}; };
} HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS; } HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS;
typedef struct { typedef struct
{
USAGE UsagePage; USAGE UsagePage;
UCHAR ReportID; UCHAR ReportID;
BOOLEAN IsAlias; BOOLEAN IsAlias;
@ -105,8 +111,10 @@ typedef struct {
LONG LogicalMax; LONG LogicalMax;
LONG PhysicalMin; LONG PhysicalMin;
LONG PhysicalMax; LONG PhysicalMax;
union { union
struct { {
struct
{
USAGE UsageMin; USAGE UsageMin;
USAGE UsageMax; USAGE UsageMax;
USHORT StringMin; USHORT StringMin;
@ -116,7 +124,8 @@ typedef struct {
USHORT DataIndexMin; USHORT DataIndexMin;
USHORT DataIndexMax; USHORT DataIndexMax;
} Range; } Range;
struct { struct
{
USAGE Usage; USAGE Usage;
USAGE Reserved1; USAGE Reserved1;
USHORT StringIndex; USHORT StringIndex;
@ -129,7 +138,8 @@ typedef struct {
}; };
} HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS; } HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS;
typedef struct { typedef struct
{
USAGE Usage; USAGE Usage;
USAGE UsagePage; USAGE UsagePage;
USHORT InputReportByteLength; USHORT InputReportByteLength;
@ -148,10 +158,12 @@ typedef struct {
USHORT NumberFeatureDataIndices; USHORT NumberFeatureDataIndices;
} HIDP_CAPS, *PHIDP_CAPS; } HIDP_CAPS, *PHIDP_CAPS;
typedef struct { typedef struct
{
USHORT DataIndex; USHORT DataIndex;
USHORT Reserved; USHORT Reserved;
union { union
{
ULONG RawValue; ULONG RawValue;
BOOLEAN On; BOOLEAN On;
}; };
@ -178,7 +190,6 @@ typedef struct {
#define HIDP_STATUS_REPORT_DOES_NOT_EXIST HIDP_ERROR_CODES(0xC, 0x0010) #define HIDP_STATUS_REPORT_DOES_NOT_EXIST HIDP_ERROR_CODES(0xC, 0x0010)
#define HIDP_STATUS_NOT_IMPLEMENTED HIDP_ERROR_CODES(0xC, 0x0020) #define HIDP_STATUS_NOT_IMPLEMENTED HIDP_ERROR_CODES(0xC, 0x0020)
extern int WIN_LoadHIDDLL(void); extern int WIN_LoadHIDDLL(void);
extern void WIN_UnloadHIDDLL(void); extern void WIN_UnloadHIDDLL(void);

View File

@ -39,6 +39,7 @@ static IMMDeviceEnumerator *enumerator = NULL;
#define PropVariantInit(p) SDL_zerop(p) #define PropVariantInit(p) SDL_zerop(p)
/* 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. */
/* *INDENT-OFF* */ /* clang-format off */
static const CLSID SDL_CLSID_MMDeviceEnumerator = { 0xbcde0395, 0xe52f, 0x467c,{ 0x8e, 0x3d, 0xc4, 0x57, 0x92, 0x91, 0x69, 0x2e } }; static const CLSID SDL_CLSID_MMDeviceEnumerator = { 0xbcde0395, 0xe52f, 0x467c,{ 0x8e, 0x3d, 0xc4, 0x57, 0x92, 0x91, 0x69, 0x2e } };
static const IID SDL_IID_IMMDeviceEnumerator = { 0xa95664d2, 0x9614, 0x4f35,{ 0xa7, 0x46, 0xde, 0x8d, 0xb6, 0x36, 0x17, 0xe6 } }; static const IID SDL_IID_IMMDeviceEnumerator = { 0xa95664d2, 0x9614, 0x4f35,{ 0xa7, 0x46, 0xde, 0x8d, 0xb6, 0x36, 0x17, 0xe6 } };
static const IID SDL_IID_IMMNotificationClient = { 0x7991eec9, 0x7e89, 0x4d85,{ 0x83, 0x90, 0x6c, 0x70, 0x3c, 0xec, 0x60, 0xc0 } }; static const IID SDL_IID_IMMNotificationClient = { 0x7991eec9, 0x7e89, 0x4d85,{ 0x83, 0x90, 0x6c, 0x70, 0x3c, 0xec, 0x60, 0xc0 } };
@ -48,13 +49,13 @@ static const PROPERTYKEY SDL_PKEY_AudioEngine_DeviceFormat = { { 0xf19f064d, 0x8
static const PROPERTYKEY SDL_PKEY_AudioEndpoint_GUID = { { 0x1da5d803, 0xd492, 0x4edd,{ 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, } }, 4 }; static const PROPERTYKEY SDL_PKEY_AudioEndpoint_GUID = { { 0x1da5d803, 0xd492, 0x4edd,{ 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, } }, 4 };
static const GUID SDL_KSDATAFORMAT_SUBTYPE_PCM = { 0x00000001, 0x0000, 0x0010,{ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } }; static const GUID SDL_KSDATAFORMAT_SUBTYPE_PCM = { 0x00000001, 0x0000, 0x0010,{ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } };
static const GUID SDL_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = { 0x00000003, 0x0000, 0x0010,{ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } }; static const GUID SDL_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = { 0x00000003, 0x0000, 0x0010,{ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } };
/* *INDENT-ON* */ /* clang-format on */
/* these increment as default devices change. Opened default devices pick up changes in their threads. */ /* these increment as default devices change. Opened default devices pick up changes in their threads. */
SDL_atomic_t SDL_IMMDevice_DefaultPlaybackGeneration; SDL_atomic_t SDL_IMMDevice_DefaultPlaybackGeneration;
SDL_atomic_t SDL_IMMDevice_DefaultCaptureGeneration; SDL_atomic_t SDL_IMMDevice_DefaultCaptureGeneration;
static void static void GetMMDeviceInfo(IMMDevice *device, char **utf8dev, WAVEFORMATEXTENSIBLE *fmt, GUID *guid)
GetMMDeviceInfo(IMMDevice *device, char **utf8dev, WAVEFORMATEXTENSIBLE *fmt, GUID *guid)
{ {
/* PKEY_Device_FriendlyName gives you "Speakers (SoundBlaster Pro)" which drives me nuts. I'd rather it be /* PKEY_Device_FriendlyName gives you "Speakers (SoundBlaster Pro)" which drives me nuts. I'd rather it be
"SoundBlaster Pro (Speakers)" but I guess that's developers vs users. Windows uses the FriendlyName in "SoundBlaster Pro (Speakers)" but I guess that's developers vs users. Windows uses the FriendlyName in
@ -91,8 +92,7 @@ typedef struct DevIdList
static DevIdList *deviceid_list = NULL; static DevIdList *deviceid_list = NULL;
static void static void SDL_IMMDevice_Remove(const SDL_bool iscapture, LPCWSTR devid, SDL_bool useguid)
SDL_IMMDevice_Remove(const SDL_bool iscapture, LPCWSTR devid, SDL_bool useguid)
{ {
DevIdList *i; DevIdList *i;
DevIdList *next; DevIdList *next;
@ -114,8 +114,7 @@ SDL_IMMDevice_Remove(const SDL_bool iscapture, LPCWSTR devid, SDL_bool useguid)
} }
} }
static void static void SDL_IMMDevice_Add(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENSIBLE *fmt, LPCWSTR devid, GUID *dsoundguid, SDL_bool useguid)
SDL_IMMDevice_Add(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENSIBLE *fmt, LPCWSTR devid, GUID *dsoundguid, SDL_bool useguid)
{ {
DevIdList *devidlist; DevIdList *devidlist;
SDL_AudioSpec spec; SDL_AudioSpec spec;
@ -185,8 +184,7 @@ typedef struct SDLMMNotificationClient
SDL_bool useguid; SDL_bool useguid;
} SDLMMNotificationClient; } SDLMMNotificationClient;
static HRESULT STDMETHODCALLTYPE static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_QueryInterface(IMMNotificationClient *this, REFIID iid, void **ppv)
SDLMMNotificationClient_QueryInterface(IMMNotificationClient *this, REFIID iid, void **ppv)
{ {
if ((WIN_IsEqualIID(iid, &IID_IUnknown)) || (WIN_IsEqualIID(iid, &SDL_IID_IMMNotificationClient))) { if ((WIN_IsEqualIID(iid, &IID_IUnknown)) || (WIN_IsEqualIID(iid, &SDL_IID_IMMNotificationClient))) {
*ppv = this; *ppv = this;
@ -198,15 +196,13 @@ SDLMMNotificationClient_QueryInterface(IMMNotificationClient *this, REFIID iid,
return E_NOINTERFACE; return E_NOINTERFACE;
} }
static ULONG STDMETHODCALLTYPE static ULONG STDMETHODCALLTYPE SDLMMNotificationClient_AddRef(IMMNotificationClient *ithis)
SDLMMNotificationClient_AddRef(IMMNotificationClient *ithis)
{ {
SDLMMNotificationClient *this = (SDLMMNotificationClient *)ithis; SDLMMNotificationClient *this = (SDLMMNotificationClient *)ithis;
return (ULONG)(SDL_AtomicIncRef(&this->refcount) + 1); return (ULONG)(SDL_AtomicIncRef(&this->refcount) + 1);
} }
static ULONG STDMETHODCALLTYPE static ULONG STDMETHODCALLTYPE SDLMMNotificationClient_Release(IMMNotificationClient *ithis)
SDLMMNotificationClient_Release(IMMNotificationClient *ithis)
{ {
/* this is a static object; we don't ever free it. */ /* this is a static object; we don't ever free it. */
SDLMMNotificationClient *this = (SDLMMNotificationClient *)ithis; SDLMMNotificationClient *this = (SDLMMNotificationClient *)ithis;
@ -219,8 +215,7 @@ SDLMMNotificationClient_Release(IMMNotificationClient *ithis)
} }
/* These are the entry points called when WASAPI device endpoints change. */ /* These are the entry points called when WASAPI device endpoints change. */
static HRESULT STDMETHODCALLTYPE static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_OnDefaultDeviceChanged(IMMNotificationClient *ithis, EDataFlow flow, ERole role, LPCWSTR pwstrDeviceId)
SDLMMNotificationClient_OnDefaultDeviceChanged(IMMNotificationClient *ithis, EDataFlow flow, ERole role, LPCWSTR pwstrDeviceId)
{ {
if (role != SDL_IMMDevice_role) { if (role != SDL_IMMDevice_role) {
return S_OK; /* ignore it. */ return S_OK; /* ignore it. */
@ -249,8 +244,7 @@ SDLMMNotificationClient_OnDefaultDeviceChanged(IMMNotificationClient *ithis, EDa
return S_OK; return S_OK;
} }
static HRESULT STDMETHODCALLTYPE static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_OnDeviceAdded(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId)
SDLMMNotificationClient_OnDeviceAdded(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId)
{ {
/* we ignore this; devices added here then progress to ACTIVE, if appropriate, in /* we ignore this; devices added here then progress to ACTIVE, if appropriate, in
OnDeviceStateChange, making that a better place to deal with device adds. More OnDeviceStateChange, making that a better place to deal with device adds. More
@ -260,15 +254,13 @@ SDLMMNotificationClient_OnDeviceAdded(IMMNotificationClient *ithis, LPCWSTR pwst
return S_OK; return S_OK;
} }
static HRESULT STDMETHODCALLTYPE static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_OnDeviceRemoved(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId)
SDLMMNotificationClient_OnDeviceRemoved(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId)
{ {
/* See notes in OnDeviceAdded handler about why we ignore this. */ /* See notes in OnDeviceAdded handler about why we ignore this. */
return S_OK; return S_OK;
} }
static HRESULT STDMETHODCALLTYPE static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_OnDeviceStateChanged(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId, DWORD dwNewState)
SDLMMNotificationClient_OnDeviceStateChanged(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId, DWORD dwNewState)
{ {
IMMDevice *device = NULL; IMMDevice *device = NULL;
@ -300,8 +292,7 @@ SDLMMNotificationClient_OnDeviceStateChanged(IMMNotificationClient *ithis, LPCWS
return S_OK; return S_OK;
} }
static HRESULT STDMETHODCALLTYPE static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_OnPropertyValueChanged(IMMNotificationClient *this, LPCWSTR pwstrDeviceId, const PROPERTYKEY key)
SDLMMNotificationClient_OnPropertyValueChanged(IMMNotificationClient *this, LPCWSTR pwstrDeviceId, const PROPERTYKEY key)
{ {
return S_OK; /* we don't care about these. */ return S_OK; /* we don't care about these. */
} }
@ -319,8 +310,7 @@ static const IMMNotificationClientVtbl notification_client_vtbl = {
static SDLMMNotificationClient notification_client = { &notification_client_vtbl, { 1 } }; static SDLMMNotificationClient notification_client = { &notification_client_vtbl, { 1 } };
int int SDL_IMMDevice_Init(void)
SDL_IMMDevice_Init(void)
{ {
HRESULT ret; HRESULT ret;
@ -344,8 +334,7 @@ SDL_IMMDevice_Init(void)
return 0; return 0;
} }
void void SDL_IMMDevice_Quit(void)
SDL_IMMDevice_Quit(void)
{ {
DevIdList *devidlist; DevIdList *devidlist;
DevIdList *next; DevIdList *next;
@ -366,8 +355,7 @@ SDL_IMMDevice_Quit(void)
deviceid_list = NULL; deviceid_list = NULL;
} }
int int SDL_IMMDevice_Get(LPCWSTR devid, IMMDevice **device, SDL_bool iscapture)
SDL_IMMDevice_Get(LPCWSTR devid, IMMDevice **device, SDL_bool iscapture)
{ {
HRESULT ret; HRESULT ret;
@ -422,8 +410,7 @@ static int SDLCALL sort_endpoints(const void *_a, const void *_b)
return 0; return 0;
} }
static void static void EnumerateEndpointsForFlow(const SDL_bool iscapture)
EnumerateEndpointsForFlow(const SDL_bool iscapture)
{ {
IMMDeviceCollection *collection = NULL; IMMDeviceCollection *collection = NULL;
EndpointItem *items; EndpointItem *items;
@ -474,8 +461,7 @@ EnumerateEndpointsForFlow(const SDL_bool iscapture)
IMMDeviceCollection_Release(collection); IMMDeviceCollection_Release(collection);
} }
void void SDL_IMMDevice_EnumerateEndpoints(SDL_bool useguid)
SDL_IMMDevice_EnumerateEndpoints(SDL_bool useguid)
{ {
notification_client.useguid = useguid; notification_client.useguid = useguid;
@ -486,8 +472,7 @@ SDL_IMMDevice_EnumerateEndpoints(SDL_bool useguid)
IMMDeviceEnumerator_RegisterEndpointNotificationCallback(enumerator, (IMMNotificationClient *)&notification_client); IMMDeviceEnumerator_RegisterEndpointNotificationCallback(enumerator, (IMMNotificationClient *)&notification_client);
} }
int int SDL_IMMDevice_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
SDL_IMMDevice_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture)
{ {
WAVEFORMATEXTENSIBLE fmt; WAVEFORMATEXTENSIBLE fmt;
IMMDevice *device = NULL; IMMDevice *device = NULL;

View File

@ -22,7 +22,6 @@
#ifndef SDL_IMMDEVICE_H #ifndef SDL_IMMDEVICE_H
#define SDL_IMMDEVICE_H #define SDL_IMMDEVICE_H
#define COBJMACROS #define COBJMACROS
#include <mmdeviceapi.h> #include <mmdeviceapi.h>
#include <mmreg.h> #include <mmreg.h>

View File

@ -28,7 +28,8 @@
#if defined(HAVE_ROAPI_H) #if defined(HAVE_ROAPI_H)
#include <roapi.h> /* For RoInitialize/RoUninitialize (Win32 only) */ #include <roapi.h> /* For RoInitialize/RoUninitialize (Win32 only) */
#else #else
typedef enum RO_INIT_TYPE { typedef enum RO_INIT_TYPE
{
RO_INIT_SINGLETHREADED = 0, RO_INIT_SINGLETHREADED = 0,
RO_INIT_MULTITHREADED = 1 RO_INIT_MULTITHREADED = 1
} RO_INIT_TYPE; } RO_INIT_TYPE;
@ -48,10 +49,8 @@ typedef enum RO_INIT_TYPE {
#define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 #define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800
#endif #endif
/* Sets an error message based on an HRESULT */ /* Sets an error message based on an HRESULT */
int int WIN_SetErrorFromHRESULT(const char *prefix, HRESULT hr)
WIN_SetErrorFromHRESULT(const char *prefix, HRESULT hr)
{ {
TCHAR buffer[1024]; TCHAR buffer[1024];
char *message; char *message;
@ -74,8 +73,7 @@ WIN_SetErrorFromHRESULT(const char *prefix, HRESULT hr)
} }
/* Sets an error message based on GetLastError() */ /* Sets an error message based on GetLastError() */
int int WIN_SetError(const char *prefix)
WIN_SetError(const char *prefix)
{ {
return WIN_SetErrorFromHRESULT(prefix, GetLastError()); return WIN_SetErrorFromHRESULT(prefix, GetLastError());
} }
@ -114,8 +112,7 @@ WIN_CoInitialize(void)
#endif #endif
} }
void void WIN_CoUninitialize(void)
WIN_CoUninitialize(void)
{ {
#ifndef __WINRT__ #ifndef __WINRT__
CoUninitialize(); CoUninitialize();
@ -169,8 +166,7 @@ WIN_RoInitialize(void)
#endif #endif
} }
void void WIN_RoUninitialize(void)
WIN_RoUninitialize(void)
{ {
#ifndef __WINRT__ #ifndef __WINRT__
typedef void(WINAPI * RoUninitialize_t)(void); typedef void(WINAPI * RoUninitialize_t)(void);
@ -182,8 +178,7 @@ WIN_RoUninitialize(void)
} }
#if !defined(__WINRT__) && !defined(__XBOXONE__) && !defined(__XBOXSERIES__) #if !defined(__WINRT__) && !defined(__XBOXONE__) && !defined(__XBOXSERIES__)
static BOOL static BOOL IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor)
IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor)
{ {
OSVERSIONINFOEXW osvi; OSVERSIONINFOEXW osvi;
DWORDLONG const dwlConditionMask = VerSetConditionMask( DWORDLONG const dwlConditionMask = VerSetConditionMask(
@ -310,20 +305,17 @@ WIN_LookupAudioDeviceName(const WCHAR *name, const GUID *guid)
#endif /* if __WINRT__ / else */ #endif /* if __WINRT__ / else */
} }
BOOL BOOL WIN_IsEqualGUID(const GUID *a, const GUID *b)
WIN_IsEqualGUID(const GUID * a, const GUID * b)
{ {
return SDL_memcmp(a, b, sizeof(*a)) == 0; return SDL_memcmp(a, b, sizeof(*a)) == 0;
} }
BOOL BOOL WIN_IsEqualIID(REFIID a, REFIID b)
WIN_IsEqualIID(REFIID a, REFIID b)
{ {
return SDL_memcmp(a, b, sizeof(*a)) == 0; return SDL_memcmp(a, b, sizeof(*a)) == 0;
} }
void void WIN_RECTToRect(const RECT *winrect, SDL_Rect *sdlrect)
WIN_RECTToRect(const RECT *winrect, SDL_Rect *sdlrect)
{ {
sdlrect->x = winrect->left; sdlrect->x = winrect->left;
sdlrect->w = (winrect->right - winrect->left) + 1; sdlrect->w = (winrect->right - winrect->left) + 1;
@ -331,8 +323,7 @@ WIN_RECTToRect(const RECT *winrect, SDL_Rect *sdlrect)
sdlrect->h = (winrect->bottom - winrect->top) + 1; sdlrect->h = (winrect->bottom - winrect->top) + 1;
} }
void void WIN_RectToRECT(const SDL_Rect *sdlrect, RECT *winrect)
WIN_RectToRECT(const SDL_Rect *sdlrect, RECT *winrect)
{ {
winrect->left = sdlrect->x; winrect->left = sdlrect->x;
winrect->right = sdlrect->x + sdlrect->w - 1; winrect->right = sdlrect->x + sdlrect->w - 1;
@ -342,15 +333,13 @@ WIN_RectToRECT(const SDL_Rect *sdlrect, RECT *winrect)
#endif /* defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__) */ #endif /* defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__) */
/* /*
* Public APIs * Public APIs
*/ */
#if !defined(SDL_VIDEO_DRIVER_WINDOWS) #if !defined(SDL_VIDEO_DRIVER_WINDOWS)
#if defined(__WIN32__) || defined(__GDK__) #if defined(__WIN32__) || defined(__GDK__)
int int SDL_RegisterApp(const char *name, Uint32 style, void *hInst)
SDL_RegisterApp(const char *name, Uint32 style, void *hInst)
{ {
(void)name; (void)name;
(void)style; (void)style;
@ -358,8 +347,7 @@ SDL_RegisterApp(const char *name, Uint32 style, void *hInst)
return 0; return 0;
} }
void void SDL_UnregisterApp(void)
SDL_UnregisterApp(void)
{ {
} }
@ -369,8 +357,7 @@ void SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata)
#endif /* __WIN32__ || __GDK__ */ #endif /* __WIN32__ || __GDK__ */
#if defined(__WIN32__) || defined(__WINGDK__) #if defined(__WIN32__) || defined(__WINGDK__)
int int SDL_Direct3D9GetAdapterIndex(int displayIndex)
SDL_Direct3D9GetAdapterIndex(int displayIndex)
{ {
(void)displayIndex; (void)displayIndex;
return 0; /* D3DADAPTER_DEFAULT */ return 0; /* D3DADAPTER_DEFAULT */

View File

@ -36,11 +36,9 @@ DWORD SDL_XInputVersion = 0;
static HANDLE s_pXInputDLL = 0; static HANDLE s_pXInputDLL = 0;
static int s_XInputDLLRefCount = 0; static int s_XInputDLLRefCount = 0;
#if defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__) #if defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)
int int WIN_LoadXInputDLL(void)
WIN_LoadXInputDLL(void)
{ {
/* Getting handles to system dlls (via LoadLibrary and its variants) is not /* Getting handles to system dlls (via LoadLibrary and its variants) is not
* supported on WinRT, thus, pointers to XInput's functions can't be * supported on WinRT, thus, pointers to XInput's functions can't be
@ -65,15 +63,13 @@ WIN_LoadXInputDLL(void)
return 0; return 0;
} }
void void WIN_UnloadXInputDLL(void)
WIN_UnloadXInputDLL(void)
{ {
} }
#else /* !(defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)) */ #else /* !(defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)) */
int int WIN_LoadXInputDLL(void)
WIN_LoadXInputDLL(void)
{ {
DWORD version = 0; DWORD version = 0;
@ -124,8 +120,7 @@ WIN_LoadXInputDLL(void)
return 0; return 0;
} }
void void WIN_UnloadXInputDLL(void)
WIN_UnloadXInputDLL(void)
{ {
if (s_pXInputDLL) { if (s_pXInputDLL) {
SDL_assert(s_XInputDLLRefCount > 0); SDL_assert(s_XInputDLLRefCount > 0);

View File

@ -222,31 +222,26 @@ typedef struct
#endif /* HAVE_XINPUT_H */ #endif /* HAVE_XINPUT_H */
/* Forward decl's for XInput API's we load dynamically and use if available */ /* Forward decl's for XInput API's we load dynamically and use if available */
typedef DWORD (WINAPI *XInputGetState_t) typedef DWORD(WINAPI *XInputGetState_t)(
(
DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */ DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */
XINPUT_STATE_EX *pState /* [out] Receives the current state */ XINPUT_STATE_EX *pState /* [out] Receives the current state */
); );
typedef DWORD (WINAPI *XInputSetState_t) typedef DWORD(WINAPI *XInputSetState_t)(
(
DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */ DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */
XINPUT_VIBRATION *pVibration /* [in, out] The vibration information to send to the controller */ XINPUT_VIBRATION *pVibration /* [in, out] The vibration information to send to the controller */
); );
typedef DWORD (WINAPI *XInputGetCapabilities_t) typedef DWORD(WINAPI *XInputGetCapabilities_t)(
(
DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */ DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */
DWORD dwFlags, /* [in] Input flags that identify the device type */ DWORD dwFlags, /* [in] Input flags that identify the device type */
XINPUT_CAPABILITIES *pCapabilities /* [out] Receives the capabilities */ XINPUT_CAPABILITIES *pCapabilities /* [out] Receives the capabilities */
); );
typedef DWORD (WINAPI *XInputGetBatteryInformation_t) typedef DWORD(WINAPI *XInputGetBatteryInformation_t)(
(
DWORD dwUserIndex, DWORD dwUserIndex,
BYTE devType, BYTE devType,
XINPUT_BATTERY_INFORMATION_EX *pBatteryInformation XINPUT_BATTERY_INFORMATION_EX *pBatteryInformation);
);
extern int WIN_LoadXInputDLL(void); extern int WIN_LoadXInputDLL(void);
extern void WIN_UnloadXInputDLL(void); extern void WIN_UnloadXInputDLL(void);

View File

@ -40,7 +40,6 @@ SDL_WinRTRunApp(SDL_main_func mainFunction, void * xamlBackgroundPanel)
} }
} }
extern "C" DECLSPEC SDL_WinRT_DeviceFamily extern "C" DECLSPEC SDL_WinRT_DeviceFamily
SDL_WinRTGetDeviceFamily() SDL_WinRTGetDeviceFamily()
{ {

View File

@ -26,7 +26,6 @@
#include <sstream> #include <sstream>
using namespace std; using namespace std;
/* Windows includes */ /* Windows includes */
#include "ppltasks.h" #include "ppltasks.h"
using namespace concurrency; using namespace concurrency;
@ -44,7 +43,6 @@ using namespace Windows::UI::Input;
using namespace Windows::Phone::UI::Input; using namespace Windows::Phone::UI::Input;
#endif #endif
/* SDL includes */ /* SDL includes */
extern "C" { extern "C" {
#include "../../video/SDL_sysvideo.h" #include "../../video/SDL_sysvideo.h"
@ -69,14 +67,12 @@ extern "C" {
extern "C" void D3D11_Trim(SDL_Renderer *); extern "C" void D3D11_Trim(SDL_Renderer *);
#endif #endif
// Compile-time debugging options: // Compile-time debugging options:
// To enable, uncomment; to disable, comment them out. // To enable, uncomment; to disable, comment them out.
//#define LOG_POINTER_EVENTS 1 //#define LOG_POINTER_EVENTS 1
//#define LOG_WINDOW_EVENTS 1 //#define LOG_WINDOW_EVENTS 1
//#define LOG_ORIENTATION_EVENTS 1 //#define LOG_ORIENTATION_EVENTS 1
// HACK, DLudwig: record a reference to the global, WinRT 'app'/view. // HACK, DLudwig: record a reference to the global, WinRT 'app'/view.
// SDL/WinRT will use this throughout its code. // SDL/WinRT will use this throughout its code.
// //
@ -113,8 +109,7 @@ int SDL_WinRTInitNonXAMLApp(int (*mainFunction)(int, char **))
return 0; return 0;
} }
static void static void WINRT_ProcessWindowSizeChange() // TODO: Pass an SDL_Window-identifying thing into WINRT_ProcessWindowSizeChange()
WINRT_ProcessWindowSizeChange() // TODO: Pass an SDL_Window-identifying thing into WINRT_ProcessWindowSizeChange()
{ {
CoreWindow ^ coreWindow = CoreWindow::GetForCurrentThread(); CoreWindow ^ coreWindow = CoreWindow::GetForCurrentThread();
if (coreWindow) { if (coreWindow) {
@ -140,7 +135,8 @@ WINRT_ProcessWindowSizeChange() // TODO: Pass an SDL_Window-identifying thing in
const DisplayOrientations currentOrientation = WINRT_DISPLAY_PROPERTY(CurrentOrientation); const DisplayOrientations currentOrientation = WINRT_DISPLAY_PROPERTY(CurrentOrientation);
switch (currentOrientation) { switch (currentOrientation) {
case DisplayOrientations::Landscape: case DisplayOrientations::Landscape:
case DisplayOrientations::LandscapeFlipped: { case DisplayOrientations::LandscapeFlipped:
{
int tmp = w; int tmp = w;
w = h; w = h;
h = tmp; h = tmp;
@ -165,8 +161,7 @@ WINRT_ProcessWindowSizeChange() // TODO: Pass an SDL_Window-identifying thing in
} }
} }
SDL_WinRTApp::SDL_WinRTApp() : SDL_WinRTApp::SDL_WinRTApp() : m_windowClosed(false),
m_windowClosed(false),
m_windowVisible(true) m_windowVisible(true)
{ {
} }
@ -193,8 +188,7 @@ void SDL_WinRTApp::Initialize(CoreApplicationView^ applicationView)
*/ */
Windows::Gaming::Input::Gamepad::GamepadAdded += Windows::Gaming::Input::Gamepad::GamepadAdded +=
ref new Windows::Foundation::EventHandler<Windows::Gaming::Input::Gamepad ^>( ref new Windows::Foundation::EventHandler<Windows::Gaming::Input::Gamepad ^>(
this, &SDL_WinRTApp::OnGamepadAdded this, &SDL_WinRTApp::OnGamepadAdded);
);
#endif #endif
} }
@ -247,7 +241,6 @@ void SDL_WinRTApp::OnOrientationChanged(Object^ sender)
SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_SIZE_CHANGED, w, h); SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_SIZE_CHANGED, w, h);
} }
#endif #endif
} }
void SDL_WinRTApp::SetWindow(CoreWindow ^ window) void SDL_WinRTApp::SetWindow(CoreWindow ^ window)
@ -335,8 +328,7 @@ void SDL_WinRTApp::SetWindow(CoreWindow^ window)
// to be done for network-enabled apps, as per Windows Store requirements. // to be done for network-enabled apps, as per Windows Store requirements.
using namespace Windows::UI::ApplicationSettings; using namespace Windows::UI::ApplicationSettings;
SettingsPane::GetForCurrentView()->CommandsRequested += SettingsPane::GetForCurrentView()->CommandsRequested +=
ref new TypedEventHandler<SettingsPane^, SettingsPaneCommandsRequestedEventArgs^> ref new TypedEventHandler<SettingsPane ^, SettingsPaneCommandsRequestedEventArgs ^>(this, &SDL_WinRTApp::OnSettingsPaneCommandsRequested);
(this, &SDL_WinRTApp::OnSettingsPaneCommandsRequested);
#endif #endif
} }
@ -619,8 +611,7 @@ void SDL_WinRTApp::OnSuspending(Platform::Object^ sender, SuspendingEventArgs^ a
SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND); SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
SuspendingDeferral ^ deferral = args->SuspendingOperation->GetDeferral(); SuspendingDeferral ^ deferral = args->SuspendingOperation->GetDeferral();
create_task([this, deferral]() create_task([this, deferral]() {
{
// Send an app did-enter-background event immediately to observers. // Send an app did-enter-background event immediately to observers.
// CoreDispatcher::ProcessEvents, which is the backbone on which // CoreDispatcher::ProcessEvents, which is the backbone on which
// SDL_WinRTApp::PumpEvents is built, will not return to its caller // SDL_WinRTApp::PumpEvents is built, will not return to its caller
@ -660,8 +651,7 @@ void SDL_WinRTApp::OnExiting(Platform::Object^ sender, Platform::Object^ args)
SDL_SendAppEvent(SDL_APP_TERMINATING); SDL_SendAppEvent(SDL_APP_TERMINATING);
} }
static void static void WINRT_LogPointerEvent(const char *header, Windows::UI::Core::PointerEventArgs ^ args, Windows::Foundation::Point transformedPoint)
WINRT_LogPointerEvent(const char * header, Windows::UI::Core::PointerEventArgs ^ args, Windows::Foundation::Point transformedPoint)
{ {
Uint8 button, pressed; Uint8 button, pressed;
Windows::UI::Input::PointerPoint ^ pt = args->CurrentPoint; Windows::UI::Input::PointerPoint ^ pt = args->CurrentPoint;

View File

@ -36,7 +36,8 @@ public:
internal : internal :
// SDL-specific methods // SDL-specific methods
void PumpEvents(); void
PumpEvents();
protected: protected:
bool ShouldWaitForAppResumeEvents(); bool ShouldWaitForAppResumeEvents();

View File

@ -28,77 +28,64 @@
#include <windows.ui.xaml.media.dxinterop.h> #include <windows.ui.xaml.media.dxinterop.h>
#endif #endif
/* SDL includes */ /* SDL includes */
#include "../../video/winrt/SDL_winrtevents_c.h" #include "../../video/winrt/SDL_winrtevents_c.h"
#include "../../video/winrt/SDL_winrtvideo_cpp.h" #include "../../video/winrt/SDL_winrtvideo_cpp.h"
#include "SDL_winrtapp_common.h" #include "SDL_winrtapp_common.h"
#include "SDL_winrtapp_xaml.h" #include "SDL_winrtapp_xaml.h"
/* SDL-internal globals: */ /* SDL-internal globals: */
SDL_bool WINRT_XAMLWasEnabled = SDL_FALSE; SDL_bool WINRT_XAMLWasEnabled = SDL_FALSE;
#if WINAPI_FAMILY == WINAPI_FAMILY_APP #if WINAPI_FAMILY == WINAPI_FAMILY_APP
extern "C" extern "C" ISwapChainBackgroundPanelNative *WINRT_GlobalSwapChainBackgroundPanelNative = NULL;
ISwapChainBackgroundPanelNative * WINRT_GlobalSwapChainBackgroundPanelNative = NULL;
static Windows::Foundation::EventRegistrationToken WINRT_XAMLAppEventToken; static Windows::Foundation::EventRegistrationToken WINRT_XAMLAppEventToken;
#endif #endif
/* /*
* Input event handlers (XAML) * Input event handlers (XAML)
*/ */
#if WINAPI_FAMILY == WINAPI_FAMILY_APP #if WINAPI_FAMILY == WINAPI_FAMILY_APP
static void static void WINRT_OnPointerPressedViaXAML(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ args)
WINRT_OnPointerPressedViaXAML(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
{ {
WINRT_ProcessPointerPressedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr)); WINRT_ProcessPointerPressedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
} }
static void static void WINRT_OnPointerMovedViaXAML(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ args)
WINRT_OnPointerMovedViaXAML(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
{ {
WINRT_ProcessPointerMovedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr)); WINRT_ProcessPointerMovedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
} }
static void static void WINRT_OnPointerReleasedViaXAML(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ args)
WINRT_OnPointerReleasedViaXAML(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
{ {
WINRT_ProcessPointerReleasedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr)); WINRT_ProcessPointerReleasedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
} }
static void static void WINRT_OnPointerWheelChangedViaXAML(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ args)
WINRT_OnPointerWheelChangedViaXAML(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
{ {
WINRT_ProcessPointerWheelChangedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr)); WINRT_ProcessPointerWheelChangedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
} }
#endif // WINAPI_FAMILY == WINAPI_FAMILY_APP #endif // WINAPI_FAMILY == WINAPI_FAMILY_APP
/* /*
* XAML-to-SDL Rendering Callback * XAML-to-SDL Rendering Callback
*/ */
#if WINAPI_FAMILY == WINAPI_FAMILY_APP #if WINAPI_FAMILY == WINAPI_FAMILY_APP
static void static void WINRT_OnRenderViaXAML(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ args)
WINRT_OnRenderViaXAML(_In_ Platform::Object^ sender, _In_ Platform::Object^ args)
{ {
WINRT_CycleXAMLThread(); WINRT_CycleXAMLThread();
} }
#endif // WINAPI_FAMILY == WINAPI_FAMILY_APP #endif // WINAPI_FAMILY == WINAPI_FAMILY_APP
/* /*
* SDL + XAML Initialization * SDL + XAML Initialization
*/ */
int int SDL_WinRTInitXAMLApp(int (*mainFunction)(int, char **), void *backgroundPanelAsIInspectable)
SDL_WinRTInitXAMLApp(int (*mainFunction)(int, char **), void * backgroundPanelAsIInspectable)
{ {
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
return SDL_SetError("XAML support is not yet available in Windows Phone."); return SDL_SetError("XAML support is not yet available in Windows Phone.");

View File

@ -23,7 +23,6 @@
#ifndef SDL_winrtapp_xaml_h_ #ifndef SDL_winrtapp_xaml_h_
#define SDL_winrtapp_xaml_h_ #define SDL_winrtapp_xaml_h_
#ifdef __cplusplus #ifdef __cplusplus
extern SDL_bool WINRT_XAMLWasEnabled; extern SDL_bool WINRT_XAMLWasEnabled;
extern int SDL_WinRTInitXAMLApp(int (*mainFunction)(int, char **), void *backgroundPanelAsIInspectable); extern int SDL_WinRTInitXAMLApp(int (*mainFunction)(int, char **), void *backgroundPanelAsIInspectable);

View File

@ -26,7 +26,6 @@
/* CPU feature detection for SDL */ /* CPU feature detection for SDL */
#ifdef HAVE_SYSCONF #ifdef HAVE_SYSCONF
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -110,15 +109,13 @@
the idea is borrowed from the libmpeg2 library - thanks! the idea is borrowed from the libmpeg2 library - thanks!
*/ */
static jmp_buf jmpbuf; static jmp_buf jmpbuf;
static void static void illegal_instruction(int sig)
illegal_instruction(int sig)
{ {
longjmp(jmpbuf, 1); longjmp(jmpbuf, 1);
} }
#endif /* HAVE_SETJMP */ #endif /* HAVE_SETJMP */
static int static int CPU_haveCPUID(void)
CPU_haveCPUID(void)
{ {
int has_CPUID = 0; int has_CPUID = 0;
@ -222,8 +219,9 @@ done:
" xorl %%ecx,%%ecx \n" \ " xorl %%ecx,%%ecx \n" \
" cpuid \n" \ " cpuid \n" \
" movl %%ebx, %%esi \n" \ " movl %%ebx, %%esi \n" \
" popl %%ebx \n" : \ " popl %%ebx \n" \
"=a" (a), "=S" (b), "=c" (c), "=d" (d) : "a" (func)) : "=a"(a), "=S"(b), "=c"(c), "=d"(d) \
: "a"(func))
#elif (defined(__GNUC__) || defined(__llvm__)) && defined(__x86_64__) #elif (defined(__GNUC__) || defined(__llvm__)) && defined(__x86_64__)
#define cpuid(func, a, b, c, d) \ #define cpuid(func, a, b, c, d) \
__asm__ __volatile__( \ __asm__ __volatile__( \
@ -231,8 +229,9 @@ done:
" xorq %%rcx,%%rcx \n" \ " xorq %%rcx,%%rcx \n" \
" cpuid \n" \ " cpuid \n" \
" movq %%rbx, %%rsi \n" \ " movq %%rbx, %%rsi \n" \
" popq %%rbx \n" : \ " popq %%rbx \n" \
"=a" (a), "=S" (b), "=c" (c), "=d" (d) : "a" (func)) : "=a"(a), "=S"(b), "=c"(c), "=d"(d) \
: "a"(func))
#elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) #elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__)
#define cpuid(func, a, b, c, d) \ #define cpuid(func, a, b, c, d) \
__asm { \ __asm { \
@ -256,7 +255,13 @@ done:
} }
#else #else
#define cpuid(func, a, b, c, d) \ #define cpuid(func, a, b, c, d) \
do { a = b = c = d = 0; (void) a; (void) b; (void) c; (void) d; } while (0) do { \
a = b = c = d = 0; \
(void)a; \
(void)b; \
(void)c; \
(void)d; \
} while (0)
#endif #endif
static int CPU_CPUIDFeatures[4]; static int CPU_CPUIDFeatures[4];
@ -264,8 +269,7 @@ static int CPU_CPUIDMaxFunction = 0;
static SDL_bool CPU_OSSavesYMM = SDL_FALSE; static SDL_bool CPU_OSSavesYMM = SDL_FALSE;
static SDL_bool CPU_OSSavesZMM = SDL_FALSE; static SDL_bool CPU_OSSavesZMM = SDL_FALSE;
static void static void CPU_calcCPUIDFeatures(void)
CPU_calcCPUIDFeatures(void)
{ {
static SDL_bool checked = SDL_FALSE; static SDL_bool checked = SDL_FALSE;
if (!checked) { if (!checked) {
@ -285,7 +289,10 @@ CPU_calcCPUIDFeatures(void)
if (c & 0x08000000) { if (c & 0x08000000) {
/* Call xgetbv to see if YMM (etc) register state is saved */ /* Call xgetbv to see if YMM (etc) register state is saved */
#if (defined(__GNUC__) || defined(__llvm__)) && (defined(__i386__) || defined(__x86_64__)) #if (defined(__GNUC__) || defined(__llvm__)) && (defined(__i386__) || defined(__x86_64__))
__asm__(".byte 0x0f, 0x01, 0xd0" : "=a" (a) : "c" (0) : "%edx"); __asm__(".byte 0x0f, 0x01, 0xd0"
: "=a"(a)
: "c"(0)
: "%edx");
#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) && (_MSC_FULL_VER >= 160040219) /* VS2010 SP1 */ #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) && (_MSC_FULL_VER >= 160040219) /* VS2010 SP1 */
a = (int)_xgetbv(0); a = (int)_xgetbv(0);
#elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) #elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__)
@ -304,8 +311,7 @@ CPU_calcCPUIDFeatures(void)
} }
} }
static int static int CPU_haveAltiVec(void)
CPU_haveAltiVec(void)
{ {
volatile int altivec = 0; volatile int altivec = 0;
#ifndef SDL_CPUINFO_DISABLED #ifndef SDL_CPUINFO_DISABLED
@ -330,7 +336,8 @@ CPU_haveAltiVec(void)
void (*handler)(int sig); void (*handler)(int sig);
handler = signal(SIGILL, illegal_instruction); handler = signal(SIGILL, illegal_instruction);
if (setjmp(jmpbuf) == 0) { if (setjmp(jmpbuf) == 0) {
asm volatile ("mtspr 256, %0\n\t" "vand %%v0, %%v0, %%v0"::"r" (-1)); asm volatile("mtspr 256, %0\n\t"
"vand %%v0, %%v0, %%v0" ::"r"(-1));
altivec = 1; altivec = 1;
} }
signal(SIGILL, handler); signal(SIGILL, handler);
@ -340,22 +347,19 @@ CPU_haveAltiVec(void)
} }
#if (defined(__ARM_ARCH) && (__ARM_ARCH >= 6)) || defined(__aarch64__) #if (defined(__ARM_ARCH) && (__ARM_ARCH >= 6)) || defined(__aarch64__)
static int static int CPU_haveARMSIMD(void)
CPU_haveARMSIMD(void)
{ {
return 1; return 1;
} }
#elif !defined(__arm__) #elif !defined(__arm__)
static int static int CPU_haveARMSIMD(void)
CPU_haveARMSIMD(void)
{ {
return 0; return 0;
} }
#elif defined(__LINUX__) #elif defined(__LINUX__)
static int static int CPU_haveARMSIMD(void)
CPU_haveARMSIMD(void)
{ {
int arm_simd = 0; int arm_simd = 0;
int fd; int fd;
@ -378,8 +382,7 @@ CPU_haveARMSIMD(void)
} }
#elif defined(__RISCOS__) #elif defined(__RISCOS__)
static int static int CPU_haveARMSIMD(void)
CPU_haveARMSIMD(void)
{ {
_kernel_swi_regs regs; _kernel_swi_regs regs;
regs.r[0] = 0; regs.r[0] = 0;
@ -401,8 +404,7 @@ CPU_haveARMSIMD(void)
} }
#else #else
static int static int CPU_haveARMSIMD(void)
CPU_haveARMSIMD(void)
{ {
#warning SDL_HasARMSIMD is not implemented for this ARM platform. Write me. #warning SDL_HasARMSIMD is not implemented for this ARM platform. Write me.
return 0; return 0;
@ -410,8 +412,7 @@ CPU_haveARMSIMD(void)
#endif #endif
#if defined(__LINUX__) && defined(__arm__) && !defined(HAVE_GETAUXVAL) #if defined(__LINUX__) && defined(__arm__) && !defined(HAVE_GETAUXVAL)
static int static int readProcAuxvForNeon(void)
readProcAuxvForNeon(void)
{ {
int neon = 0; int neon = 0;
int fd; int fd;
@ -431,8 +432,7 @@ readProcAuxvForNeon(void)
} }
#endif #endif
static int static int CPU_haveNEON(void)
CPU_haveNEON(void)
{ {
/* The way you detect NEON is a privileged instruction on ARM, so you have /* The way you detect NEON is a privileged instruction on ARM, so you have
query the OS kernel in a platform-specific way. :/ */ query the OS kernel in a platform-specific way. :/ */
@ -501,16 +501,14 @@ CPU_haveNEON(void)
#endif #endif
} }
static int static int CPU_readCPUCFG(void)
CPU_readCPUCFG(void)
{ {
uint32_t cfg2 = 0; uint32_t cfg2 = 0;
#if defined __loongarch__ #if defined __loongarch__
__asm__ volatile( __asm__ volatile(
"cpucfg %0, %1 \n\t" "cpucfg %0, %1 \n\t"
: "+&r"(cfg2) : "+&r"(cfg2)
: "r"(CPU_CFG2) : "r"(CPU_CFG2));
);
#endif #endif
return cfg2; return cfg2;
} }
@ -529,8 +527,7 @@ CPU_have3DNow(void)
#endif #endif
} }
#else #else
static int static int CPU_have3DNow(void)
CPU_have3DNow(void)
{ {
if (CPU_CPUIDMaxFunction > 0) { /* that is, do we have CPUID at all? */ if (CPU_CPUIDMaxFunction > 0) { /* that is, do we have CPUID at all? */
int a, b, c, d; int a, b, c, d;
@ -603,12 +600,14 @@ CPU_haveAVX2(void)
#endif #endif
} }
#else #else
static int static int CPU_haveAVX2(void)
CPU_haveAVX2(void)
{ {
if (CPU_OSSavesYMM && (CPU_CPUIDMaxFunction >= 7)) { if (CPU_OSSavesYMM && (CPU_CPUIDMaxFunction >= 7)) {
int a, b, c, d; int a, b, c, d;
(void) a; (void) b; (void) c; (void) d; /* compiler warnings... */ (void)a;
(void)b;
(void)c;
(void)d; /* compiler warnings... */
cpuid(7, a, b, c, d); cpuid(7, a, b, c, d);
return b & 0x00000020; return b & 0x00000020;
} }
@ -623,12 +622,14 @@ CPU_haveAVX512F(void)
return 0; return 0;
} }
#else #else
static int static int CPU_haveAVX512F(void)
CPU_haveAVX512F(void)
{ {
if (CPU_OSSavesZMM && (CPU_CPUIDMaxFunction >= 7)) { if (CPU_OSSavesZMM && (CPU_CPUIDMaxFunction >= 7)) {
int a, b, c, d; int a, b, c, d;
(void) a; (void) b; (void) c; (void) d; /* compiler warnings... */ (void)a;
(void)b;
(void)c;
(void)d; /* compiler warnings... */
cpuid(7, a, b, c, d); cpuid(7, a, b, c, d);
return b & 0x00010000; return b & 0x00010000;
} }
@ -638,8 +639,7 @@ CPU_haveAVX512F(void)
static int SDL_CPUCount = 0; static int SDL_CPUCount = 0;
int int SDL_GetCPUCount(void)
SDL_GetCPUCount(void)
{ {
if (!SDL_CPUCount) { if (!SDL_CPUCount) {
#ifndef SDL_CPUINFO_DISABLED #ifndef SDL_CPUINFO_DISABLED
@ -682,8 +682,7 @@ SDL_GetCPUType(void)
} }
#else #else
/* Oh, such a sweet sweet trick, just not very useful. :) */ /* Oh, such a sweet sweet trick, just not very useful. :) */
static const char * static const char *SDL_GetCPUType(void)
SDL_GetCPUType(void)
{ {
static char SDL_CPUType[13]; static char SDL_CPUType[13];
@ -695,19 +694,28 @@ SDL_GetCPUType(void)
int a, b, c, d; int a, b, c, d;
cpuid(0x00000000, a, b, c, d); cpuid(0x00000000, a, b, c, d);
(void)a; (void)a;
SDL_CPUType[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUType[i++] = (char)(b & 0xff);
SDL_CPUType[i++] = (char)(b & 0xff); b >>= 8; b >>= 8;
SDL_CPUType[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUType[i++] = (char)(b & 0xff);
b >>= 8;
SDL_CPUType[i++] = (char)(b & 0xff);
b >>= 8;
SDL_CPUType[i++] = (char)(b & 0xff); SDL_CPUType[i++] = (char)(b & 0xff);
SDL_CPUType[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUType[i++] = (char)(d & 0xff);
SDL_CPUType[i++] = (char)(d & 0xff); d >>= 8; d >>= 8;
SDL_CPUType[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUType[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUType[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUType[i++] = (char)(d & 0xff); SDL_CPUType[i++] = (char)(d & 0xff);
SDL_CPUType[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUType[i++] = (char)(c & 0xff);
SDL_CPUType[i++] = (char)(c & 0xff); c >>= 8; c >>= 8;
SDL_CPUType[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUType[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUType[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUType[i++] = (char)(c & 0xff); SDL_CPUType[i++] = (char)(c & 0xff);
} }
if (!SDL_CPUType[0]) { if (!SDL_CPUType[0]) {
@ -718,7 +726,6 @@ SDL_GetCPUType(void)
} }
#endif #endif
#ifdef TEST_MAIN /* !!! FIXME: only used for test at the moment. */ #ifdef TEST_MAIN /* !!! FIXME: only used for test at the moment. */
#if defined(__e2k__) #if defined(__e2k__)
inline const char * inline const char *
@ -731,8 +738,7 @@ SDL_GetCPUName(void)
return SDL_CPUName; return SDL_CPUName;
} }
#else #else
static const char * static const char *SDL_GetCPUName(void)
SDL_GetCPUName(void)
{ {
static char SDL_CPUName[48]; static char SDL_CPUName[48];
@ -745,56 +751,104 @@ SDL_GetCPUName(void)
cpuid(0x80000000, a, b, c, d); cpuid(0x80000000, a, b, c, d);
if (a >= 0x80000004) { if (a >= 0x80000004) {
cpuid(0x80000002, a, b, c, d); cpuid(0x80000002, a, b, c, d);
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
cpuid(0x80000003, a, b, c, d); cpuid(0x80000003, a, b, c, d);
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
cpuid(0x80000004, a, b, c, d); cpuid(0x80000004, a, b, c, d);
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(a & 0xff); a >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUName[i++] = (char)(a & 0xff);
SDL_CPUName[i++] = (char)(b & 0xff); b >>= 8; a >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(c & 0xff); c >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUName[i++] = (char)(b & 0xff);
SDL_CPUName[i++] = (char)(d & 0xff); d >>= 8; b >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(c & 0xff);
c >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
SDL_CPUName[i++] = (char)(d & 0xff);
d >>= 8;
} }
} }
if (!SDL_CPUName[0]) { if (!SDL_CPUName[0]) {
@ -806,12 +860,14 @@ SDL_GetCPUName(void)
#endif #endif
#endif #endif
int int SDL_GetCPUCacheLineSize(void)
SDL_GetCPUCacheLineSize(void)
{ {
const char *cpuType = SDL_GetCPUType(); const char *cpuType = SDL_GetCPUType();
int a, b, c, d; int a, b, c, d;
(void) a; (void) b; (void) c; (void) d; (void)a;
(void)b;
(void)c;
(void)d;
if (SDL_strcmp(cpuType, "GenuineIntel") == 0 || SDL_strcmp(cpuType, "CentaurHauls") == 0 || SDL_strcmp(cpuType, " Shanghai ") == 0) { if (SDL_strcmp(cpuType, "GenuineIntel") == 0 || SDL_strcmp(cpuType, "CentaurHauls") == 0 || SDL_strcmp(cpuType, " Shanghai ") == 0) {
cpuid(0x00000001, a, b, c, d); cpuid(0x00000001, a, b, c, d);
return ((b >> 8) & 0xff) * 8; return ((b >> 8) & 0xff) * 8;
@ -827,8 +883,7 @@ SDL_GetCPUCacheLineSize(void)
static Uint32 SDL_CPUFeatures = 0xFFFFFFFF; static Uint32 SDL_CPUFeatures = 0xFFFFFFFF;
static Uint32 SDL_SIMDAlignment = 0xFFFFFFFF; static Uint32 SDL_SIMDAlignment = 0xFFFFFFFF;
static Uint32 static Uint32 SDL_GetCPUFeatures(void)
SDL_GetCPUFeatures(void)
{ {
if (SDL_CPUFeatures == 0xFFFFFFFF) { if (SDL_CPUFeatures == 0xFFFFFFFF) {
CPU_calcCPUIDFeatures(); CPU_calcCPUIDFeatures();
@ -1000,8 +1055,7 @@ SDL_HasLASX(void)
static int SDL_SystemRAM = 0; static int SDL_SystemRAM = 0;
int int SDL_GetSystemRAM(void)
SDL_GetSystemRAM(void)
{ {
if (!SDL_SystemRAM) { if (!SDL_SystemRAM) {
#ifndef SDL_CPUINFO_DISABLED #ifndef SDL_CPUINFO_DISABLED
@ -1066,7 +1120,6 @@ SDL_GetSystemRAM(void)
return SDL_SystemRAM; return SDL_SystemRAM;
} }
size_t size_t
SDL_SIMDGetAlignment(void) SDL_SIMDGetAlignment(void)
{ {
@ -1155,21 +1208,18 @@ SDL_SIMDRealloc(void *mem, const size_t len)
return retval; return retval;
} }
void void SDL_SIMDFree(void *ptr)
SDL_SIMDFree(void *ptr)
{ {
if (ptr) { if (ptr) {
SDL_free(*(((void **)ptr) - 1)); SDL_free(*(((void **)ptr) - 1));
} }
} }
#ifdef TEST_MAIN #ifdef TEST_MAIN
#include <stdio.h> #include <stdio.h>
int int main()
main()
{ {
printf("CPU count: %d\n", SDL_GetCPUCount()); printf("CPU count: %d\n", SDL_GetCPUCount());
printf("CPU type: %s\n", SDL_GetCPUType()); printf("CPU type: %s\n", SDL_GetCPUType());

View File

@ -52,7 +52,6 @@ static void SDL_InitDynamicAPI(void);
/* BE CAREFUL CALLING ANY SDL CODE IN HERE, IT WILL BLOW UP. /* BE CAREFUL CALLING ANY SDL CODE IN HERE, IT WILL BLOW UP.
Even self-contained stuff might call SDL_Error and break everything. */ Even self-contained stuff might call SDL_Error and break everything. */
/* behold, the macro salsa! */ /* behold, the macro salsa! */
/* !!! FIXME: ...disabled...until we write it. :) */ /* !!! FIXME: ...disabled...until we write it. :) */
@ -61,17 +60,22 @@ static void SDL_InitDynamicAPI(void);
#if DISABLE_JUMP_MAGIC #if DISABLE_JUMP_MAGIC
/* Can't use the macro for varargs nonsense. This is atrocious. */ /* Can't use the macro for varargs nonsense. This is atrocious. */
#define SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, logname, prio) \ #define SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, logname, prio) \
_static void SDLCALL SDL_Log##logname##name(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ _static void SDLCALL SDL_Log##logname##name(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) \
va_list ap; initcall; va_start(ap, fmt); \ { \
va_list ap; \
initcall; \
va_start(ap, fmt); \
jump_table.SDL_LogMessageV(category, SDL_LOG_PRIORITY_##prio, fmt, ap); \ jump_table.SDL_LogMessageV(category, SDL_LOG_PRIORITY_##prio, fmt, ap); \
va_end(ap); \ va_end(ap); \
} }
#define SDL_DYNAPI_VARARGS(_static, name, initcall) \ #define SDL_DYNAPI_VARARGS(_static, name, initcall) \
_static int SDLCALL SDL_SetError##name(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ _static int SDLCALL SDL_SetError##name(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) \
{ \
char buf[128], *str = buf; \ char buf[128], *str = buf; \
int result; \ int result; \
va_list ap; initcall; \ va_list ap; \
initcall; \
va_start(ap, fmt); \ va_start(ap, fmt); \
result = jump_table.SDL_vsnprintf(buf, sizeof(buf), fmt, ap); \ result = jump_table.SDL_vsnprintf(buf, sizeof(buf), fmt, ap); \
va_end(ap); \ va_end(ap); \
@ -92,31 +96,49 @@ static void SDL_InitDynamicAPI(void);
} \ } \
return result; \ return result; \
} \ } \
_static int SDLCALL SDL_sscanf##name(const char *buf, SDL_SCANF_FORMAT_STRING const char *fmt, ...) { \ _static int SDLCALL SDL_sscanf##name(const char *buf, SDL_SCANF_FORMAT_STRING const char *fmt, ...) \
int retval; va_list ap; initcall; va_start(ap, fmt); \ { \
int retval; \
va_list ap; \
initcall; \
va_start(ap, fmt); \
retval = jump_table.SDL_vsscanf(buf, fmt, ap); \ retval = jump_table.SDL_vsscanf(buf, fmt, ap); \
va_end(ap); \ va_end(ap); \
return retval; \ return retval; \
} \ } \
_static int SDLCALL SDL_snprintf##name(SDL_OUT_Z_CAP(maxlen) char *buf, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ _static int SDLCALL SDL_snprintf##name(SDL_OUT_Z_CAP(maxlen) char *buf, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) \
int retval; va_list ap; initcall; va_start(ap, fmt); \ { \
int retval; \
va_list ap; \
initcall; \
va_start(ap, fmt); \
retval = jump_table.SDL_vsnprintf(buf, maxlen, fmt, ap); \ retval = jump_table.SDL_vsnprintf(buf, maxlen, fmt, ap); \
va_end(ap); \ va_end(ap); \
return retval; \ return retval; \
} \ } \
_static int SDLCALL SDL_asprintf##name(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ _static int SDLCALL SDL_asprintf##name(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) \
int retval; va_list ap; initcall; va_start(ap, fmt); \ { \
int retval; \
va_list ap; \
initcall; \
va_start(ap, fmt); \
retval = jump_table.SDL_vasprintf(strp, fmt, ap); \ retval = jump_table.SDL_vasprintf(strp, fmt, ap); \
va_end(ap); \ va_end(ap); \
return retval; \ return retval; \
} \ } \
_static void SDLCALL SDL_Log##name(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ _static void SDLCALL SDL_Log##name(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) \
va_list ap; initcall; va_start(ap, fmt); \ { \
va_list ap; \
initcall; \
va_start(ap, fmt); \
jump_table.SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, fmt, ap); \ jump_table.SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, fmt, ap); \
va_end(ap); \ va_end(ap); \
} \ } \
_static void SDLCALL SDL_LogMessage##name(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ _static void SDLCALL SDL_LogMessage##name(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) \
va_list ap; initcall; va_start(ap, fmt); \ { \
va_list ap; \
initcall; \
va_start(ap, fmt); \
jump_table.SDL_LogMessageV(category, priority, fmt, ap); \ jump_table.SDL_LogMessageV(category, priority, fmt, ap); \
va_end(ap); \ va_end(ap); \
} \ } \
@ -128,7 +150,6 @@ static void SDL_InitDynamicAPI(void);
SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, Critical, CRITICAL) SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, Critical, CRITICAL)
#endif #endif
/* Typedefs for function pointers for jump table, and predeclare funcs */ /* Typedefs for function pointers for jump table, and predeclare funcs */
/* The DEFAULT funcs will init jump table and then call real function. */ /* The DEFAULT funcs will init jump table and then call real function. */
/* The REAL funcs are the actual functions, name-mangled to not clash. */ /* The REAL funcs are the actual functions, name-mangled to not clash. */
@ -140,7 +161,8 @@ static void SDL_InitDynamicAPI(void);
#undef SDL_DYNAPI_PROC #undef SDL_DYNAPI_PROC
/* The jump table! */ /* The jump table! */
typedef struct { typedef struct
{
#define SDL_DYNAPI_PROC(rc, fn, params, args, ret) SDL_DYNAPIFN_##fn fn; #define SDL_DYNAPI_PROC(rc, fn, params, args, ret) SDL_DYNAPIFN_##fn fn;
#include "SDL_dynapi_procs.h" #include "SDL_dynapi_procs.h"
#undef SDL_DYNAPI_PROC #undef SDL_DYNAPI_PROC
@ -161,7 +183,8 @@ static SDL_DYNAPI_jump_table jump_table = {
/* Default functions init the function table then call right thing. */ /* Default functions init the function table then call right thing. */
#if DISABLE_JUMP_MAGIC #if DISABLE_JUMP_MAGIC
#define SDL_DYNAPI_PROC(rc, fn, params, args, ret) \ #define SDL_DYNAPI_PROC(rc, fn, params, args, ret) \
static rc SDLCALL fn##_DEFAULT params { \ static rc SDLCALL fn##_DEFAULT params \
{ \
SDL_InitDynamicAPI(); \ SDL_InitDynamicAPI(); \
ret jump_table.fn args; \ ret jump_table.fn args; \
} }
@ -191,8 +214,9 @@ SDL_DYNAPI_VARARGS(,,)
#define ENABLE_SDL_CALL_LOGGING 0 #define ENABLE_SDL_CALL_LOGGING 0
#if ENABLE_SDL_CALL_LOGGING #if ENABLE_SDL_CALL_LOGGING
static int SDLCALL SDL_SetError_LOGSDLCALLS(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { static int SDLCALL SDL_SetError_LOGSDLCALLS(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
char buf[512]; /* !!! FIXME: dynamic allocation */ \ {
char buf[512]; /* !!! FIXME: dynamic allocation */
va_list ap; va_list ap;
SDL_Log_REAL("SDL3CALL SDL_SetError"); SDL_Log_REAL("SDL3CALL SDL_SetError");
va_start(ap, fmt); va_start(ap, fmt);
@ -200,7 +224,8 @@ static int SDLCALL SDL_SetError_LOGSDLCALLS(SDL_PRINTF_FORMAT_STRING const char
va_end(ap); va_end(ap);
return SDL_SetError_REAL("%s", buf); return SDL_SetError_REAL("%s", buf);
} }
static int SDLCALL SDL_sscanf_LOGSDLCALLS(const char *buf, SDL_SCANF_FORMAT_STRING const char *fmt, ...) { static int SDLCALL SDL_sscanf_LOGSDLCALLS(const char *buf, SDL_SCANF_FORMAT_STRING const char *fmt, ...)
{
int retval; int retval;
va_list ap; va_list ap;
SDL_Log_REAL("SDL3CALL SDL_sscanf"); SDL_Log_REAL("SDL3CALL SDL_sscanf");
@ -209,7 +234,8 @@ static int SDLCALL SDL_sscanf_LOGSDLCALLS(const char *buf, SDL_SCANF_FORMAT_STRI
va_end(ap); va_end(ap);
return retval; return retval;
} }
static int SDLCALL SDL_snprintf_LOGSDLCALLS(SDL_OUT_Z_CAP(maxlen) char *buf, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { static int SDLCALL SDL_snprintf_LOGSDLCALLS(SDL_OUT_Z_CAP(maxlen) char *buf, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{
int retval; int retval;
va_list ap; va_list ap;
SDL_Log_REAL("SDL3CALL SDL_snprintf"); SDL_Log_REAL("SDL3CALL SDL_snprintf");
@ -218,7 +244,8 @@ static int SDLCALL SDL_snprintf_LOGSDLCALLS(SDL_OUT_Z_CAP(maxlen) char *buf, siz
va_end(ap); va_end(ap);
return retval; return retval;
} }
static int SDLCALL SDL_asprintf_LOGSDLCALLS(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { static int SDLCALL SDL_asprintf_LOGSDLCALLS(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{
int retval; int retval;
va_list ap; va_list ap;
SDL_Log_REAL("SDL3CALL SDL_asprintf"); SDL_Log_REAL("SDL3CALL SDL_asprintf");
@ -227,14 +254,16 @@ static int SDLCALL SDL_asprintf_LOGSDLCALLS(char **strp, SDL_PRINTF_FORMAT_STRIN
va_end(ap); va_end(ap);
return retval; return retval;
} }
static void SDLCALL SDL_Log_LOGSDLCALLS(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { static void SDLCALL SDL_Log_LOGSDLCALLS(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{
va_list ap; va_list ap;
SDL_Log_REAL("SDL3CALL SDL_Log"); SDL_Log_REAL("SDL3CALL SDL_Log");
va_start(ap, fmt); va_start(ap, fmt);
SDL_LogMessageV_REAL(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, fmt, ap); \ SDL_LogMessageV_REAL(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, fmt, ap);
va_end(ap); va_end(ap);
} }
static void SDLCALL SDL_LogMessage_LOGSDLCALLS(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { static void SDLCALL SDL_LogMessage_LOGSDLCALLS(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{
va_list ap; va_list ap;
SDL_Log_REAL("SDL3CALL SDL_LogMessage"); SDL_Log_REAL("SDL3CALL SDL_LogMessage");
va_start(ap, fmt); va_start(ap, fmt);
@ -242,8 +271,10 @@ static void SDLCALL SDL_LogMessage_LOGSDLCALLS(int category, SDL_LogPriority pri
va_end(ap); va_end(ap);
} }
#define SDL_DYNAPI_VARARGS_LOGFN_LOGSDLCALLS(logname, prio) \ #define SDL_DYNAPI_VARARGS_LOGFN_LOGSDLCALLS(logname, prio) \
static void SDLCALL SDL_Log##logname##_LOGSDLCALLS(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ static void SDLCALL SDL_Log##logname##_LOGSDLCALLS(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) \
va_list ap; va_start(ap, fmt); \ { \
va_list ap; \
va_start(ap, fmt); \
SDL_Log_REAL("SDL3CALL SDL_Log%s", #logname); \ SDL_Log_REAL("SDL3CALL SDL_Log%s", #logname); \
SDL_LogMessageV_REAL(category, SDL_LOG_PRIORITY_##prio, fmt, ap); \ SDL_LogMessageV_REAL(category, SDL_LOG_PRIORITY_##prio, fmt, ap); \
va_end(ap); \ va_end(ap); \
@ -255,7 +286,11 @@ SDL_DYNAPI_VARARGS_LOGFN_LOGSDLCALLS(Warn, WARN)
SDL_DYNAPI_VARARGS_LOGFN_LOGSDLCALLS(Error, ERROR) SDL_DYNAPI_VARARGS_LOGFN_LOGSDLCALLS(Error, ERROR)
SDL_DYNAPI_VARARGS_LOGFN_LOGSDLCALLS(Critical, CRITICAL) SDL_DYNAPI_VARARGS_LOGFN_LOGSDLCALLS(Critical, CRITICAL)
#define SDL_DYNAPI_PROC(rc, fn, params, args, ret) \ #define SDL_DYNAPI_PROC(rc, fn, params, args, ret) \
rc SDLCALL fn##_LOGSDLCALLS params { SDL_Log_REAL("SDL3CALL %s", #fn); ret fn##_REAL args; } rc SDLCALL fn##_LOGSDLCALLS params \
{ \
SDL_Log_REAL("SDL3CALL %s", #fn); \
ret fn##_REAL args; \
}
#define SDL_DYNAPI_PROC_NO_VARARGS 1 #define SDL_DYNAPI_PROC_NO_VARARGS 1
#include "SDL_dynapi_procs.h" #include "SDL_dynapi_procs.h"
#undef SDL_DYNAPI_PROC #undef SDL_DYNAPI_PROC
@ -264,8 +299,7 @@ SDL_DYNAPI_VARARGS_LOGFN_LOGSDLCALLS(Critical, CRITICAL)
/* we make this a static function so we can call the correct one without the /* we make this a static function so we can call the correct one without the
system's dynamic linker resolving to the wrong version of this. */ system's dynamic linker resolving to the wrong version of this. */
static Sint32 static Sint32 initialize_jumptable(Uint32 apiver, void *table, Uint32 tablesize)
initialize_jumptable(Uint32 apiver, void *table, Uint32 tablesize)
{ {
SDL_DYNAPI_jump_table *output_jump_table = (SDL_DYNAPI_jump_table *)table; SDL_DYNAPI_jump_table *output_jump_table = (SDL_DYNAPI_jump_table *)table;
@ -307,7 +341,6 @@ initialize_jumptable(Uint32 apiver, void *table, Uint32 tablesize)
return 0; /* success! */ return 0; /* success! */
} }
/* Here's the exported entry point that fills in the jump table. */ /* Here's the exported entry point that fills in the jump table. */
/* Use specific types when an "int" might suffice to keep this sane. */ /* Use specific types when an "int" might suffice to keep this sane. */
typedef Sint32(SDLCALL *SDL_DYNAPI_ENTRYFN)(Uint32 apiver, void *table, Uint32 tablesize); typedef Sint32(SDLCALL *SDL_DYNAPI_ENTRYFN)(Uint32 apiver, void *table, Uint32 tablesize);
@ -319,7 +352,6 @@ SDL_DYNAPI_entry(Uint32 apiver, void *table, Uint32 tablesize)
return initialize_jumptable(apiver, table, tablesize); return initialize_jumptable(apiver, table, tablesize);
} }
/* Obviously we can't use SDL_LoadObject() to load SDL. :) */ /* Obviously we can't use SDL_LoadObject() to load SDL. :) */
/* Also obviously, we never close the loaded library. */ /* Also obviously, we never close the loaded library. */
#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) #if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
@ -359,7 +391,6 @@ static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym)
#error Please define your platform. #error Please define your platform.
#endif #endif
static void dynapi_warn(const char *msg) static void dynapi_warn(const char *msg)
{ {
const char *caption = "SDL Dynamic API Failure!"; const char *caption = "SDL Dynamic API Failure!";
@ -381,9 +412,7 @@ void SDL_ExitProcess(int exitcode);
#endif #endif
SDL_NORETURN void SDL_ExitProcess(int exitcode); SDL_NORETURN void SDL_ExitProcess(int exitcode);
static void SDL_InitDynamicAPILocked(void)
static void
SDL_InitDynamicAPILocked(void)
{ {
const char *libname = SDL_getenv_REAL(SDL_DYNAMIC_API_ENVVAR); const char *libname = SDL_getenv_REAL(SDL_DYNAMIC_API_ENVVAR);
SDL_DYNAPI_ENTRYFN entry = NULL; /* funcs from here by default. */ SDL_DYNAPI_ENTRYFN entry = NULL; /* funcs from here by default. */
@ -418,8 +447,7 @@ SDL_InitDynamicAPILocked(void)
/* we intentionally never close the newly-loaded lib, of course. */ /* we intentionally never close the newly-loaded lib, of course. */
} }
static void static void SDL_InitDynamicAPI(void)
SDL_InitDynamicAPI(void)
{ {
/* So the theory is that every function in the jump table defaults to /* So the theory is that every function in the jump table defaults to
* calling this function, and then replaces itself with a version that * calling this function, and then replaces itself with a version that

View File

@ -25,9 +25,7 @@
#include "SDL_events_c.h" #include "SDL_events_c.h"
#include "SDL_clipboardevents_c.h" #include "SDL_clipboardevents_c.h"
int SDL_SendClipboardUpdate(void)
int
SDL_SendClipboardUpdate(void)
{ {
int posted; int posted;

View File

@ -24,9 +24,7 @@
#include "SDL_events_c.h" #include "SDL_events_c.h"
int SDL_SendDisplayEvent(SDL_VideoDisplay *display, Uint8 displayevent, int data1)
int
SDL_SendDisplayEvent(SDL_VideoDisplay *display, Uint8 displayevent, int data1)
{ {
int posted; int posted;

View File

@ -27,9 +27,7 @@
#include "../video/SDL_sysvideo.h" /* for SDL_Window internals. */ #include "../video/SDL_sysvideo.h" /* for SDL_Window internals. */
static int SDL_SendDrop(SDL_Window *window, const SDL_EventType evtype, const char *data)
static int
SDL_SendDrop(SDL_Window *window, const SDL_EventType evtype, const char *data)
{ {
static SDL_bool app_is_dropping = SDL_FALSE; static SDL_bool app_is_dropping = SDL_FALSE;
int posted = 0; int posted = 0;
@ -75,23 +73,19 @@ SDL_SendDrop(SDL_Window *window, const SDL_EventType evtype, const char *data)
return posted; return posted;
} }
int int SDL_SendDropFile(SDL_Window *window, const char *file)
SDL_SendDropFile(SDL_Window *window, const char *file)
{ {
return SDL_SendDrop(window, SDL_DROPFILE, file); return SDL_SendDrop(window, SDL_DROPFILE, file);
} }
int int SDL_SendDropText(SDL_Window *window, const char *text)
SDL_SendDropText(SDL_Window *window, const char *text)
{ {
return SDL_SendDrop(window, SDL_DROPTEXT, text); return SDL_SendDrop(window, SDL_DROPTEXT, text);
} }
int int SDL_SendDropComplete(SDL_Window *window)
SDL_SendDropComplete(SDL_Window *window)
{ {
return SDL_SendDrop(window, SDL_DROPCOMPLETE, NULL); return SDL_SendDrop(window, SDL_DROPCOMPLETE, NULL);
} }
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -44,7 +44,8 @@
/* Determines how often we wake to call SDL_PumpEvents() in SDL_WaitEventTimeout_Device() */ /* Determines how often we wake to call SDL_PumpEvents() in SDL_WaitEventTimeout_Device() */
#define PERIODIC_POLL_INTERVAL_MS 3000 #define PERIODIC_POLL_INTERVAL_MS 3000
typedef struct SDL_EventWatcher { typedef struct SDL_EventWatcher
{
SDL_EventFilter callback; SDL_EventFilter callback;
void *userdata; void *userdata;
SDL_bool removed; SDL_bool removed;
@ -58,7 +59,8 @@ static SDL_bool SDL_event_watchers_dispatching = SDL_FALSE;
static SDL_bool SDL_event_watchers_removed = SDL_FALSE; static SDL_bool SDL_event_watchers_removed = SDL_FALSE;
static SDL_atomic_t SDL_sentinel_pending; static SDL_atomic_t SDL_sentinel_pending;
typedef struct { typedef struct
{
Uint32 bits[8]; Uint32 bits[8];
} SDL_DisabledEventBlock; } SDL_DisabledEventBlock;
@ -93,13 +95,11 @@ static struct
SDL_SysWMEntry *wmmsg_free; SDL_SysWMEntry *wmmsg_free;
} SDL_EventQ = { NULL, SDL_FALSE, { 0 }, 0, NULL, NULL, NULL, NULL, NULL }; } SDL_EventQ = { NULL, SDL_FALSE, { 0 }, 0, NULL, NULL, NULL, NULL, NULL };
#if !SDL_JOYSTICK_DISABLED #if !SDL_JOYSTICK_DISABLED
static SDL_bool SDL_update_joysticks = SDL_TRUE; static SDL_bool SDL_update_joysticks = SDL_TRUE;
static void static void SDL_CalculateShouldUpdateJoysticks(SDL_bool hint_value)
SDL_CalculateShouldUpdateJoysticks(SDL_bool hint_value)
{ {
if (hint_value && if (hint_value &&
(!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] || SDL_JoystickEventState(SDL_QUERY))) { (!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] || SDL_JoystickEventState(SDL_QUERY))) {
@ -109,21 +109,18 @@ SDL_CalculateShouldUpdateJoysticks(SDL_bool hint_value)
} }
} }
static void SDLCALL static void SDLCALL SDL_AutoUpdateJoysticksChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
SDL_AutoUpdateJoysticksChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{ {
SDL_CalculateShouldUpdateJoysticks(SDL_GetStringBoolean(hint, SDL_TRUE)); SDL_CalculateShouldUpdateJoysticks(SDL_GetStringBoolean(hint, SDL_TRUE));
} }
#endif /* !SDL_JOYSTICK_DISABLED */ #endif /* !SDL_JOYSTICK_DISABLED */
#if !SDL_SENSOR_DISABLED #if !SDL_SENSOR_DISABLED
static SDL_bool SDL_update_sensors = SDL_TRUE; static SDL_bool SDL_update_sensors = SDL_TRUE;
static void static void SDL_CalculateShouldUpdateSensors(SDL_bool hint_value)
SDL_CalculateShouldUpdateSensors(SDL_bool hint_value)
{ {
if (hint_value && if (hint_value &&
!SDL_disabled_events[SDL_SENSORUPDATE >> 8]) { !SDL_disabled_events[SDL_SENSORUPDATE >> 8]) {
@ -133,16 +130,14 @@ SDL_CalculateShouldUpdateSensors(SDL_bool hint_value)
} }
} }
static void SDLCALL static void SDLCALL SDL_AutoUpdateSensorsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
SDL_AutoUpdateSensorsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{ {
SDL_CalculateShouldUpdateSensors(SDL_GetStringBoolean(hint, SDL_TRUE)); SDL_CalculateShouldUpdateSensors(SDL_GetStringBoolean(hint, SDL_TRUE));
} }
#endif /* !SDL_SENSOR_DISABLED */ #endif /* !SDL_SENSOR_DISABLED */
static void SDLCALL static void SDLCALL SDL_PollSentinelChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
SDL_PollSentinelChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{ {
(void)SDL_EventState(SDL_POLLSENTINEL, SDL_GetStringBoolean(hint, SDL_TRUE) ? SDL_ENABLE : SDL_DISABLE); (void)SDL_EventState(SDL_POLLSENTINEL, SDL_GetStringBoolean(hint, SDL_TRUE) ? SDL_ENABLE : SDL_DISABLE);
} }
@ -156,14 +151,12 @@ SDL_PollSentinelChanged(void *userdata, const char *name, const char *oldValue,
*/ */
static int SDL_EventLoggingVerbosity = 0; static int SDL_EventLoggingVerbosity = 0;
static void SDLCALL static void SDLCALL SDL_EventLoggingChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
SDL_EventLoggingChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{ {
SDL_EventLoggingVerbosity = (hint && *hint) ? SDL_clamp(SDL_atoi(hint), 0, 3) : 0; SDL_EventLoggingVerbosity = (hint && *hint) ? SDL_clamp(SDL_atoi(hint), 0, 3) : 0;
} }
static void static void SDL_LogEvent(const SDL_Event *event)
SDL_LogEvent(const SDL_Event *event)
{ {
char name[32]; char name[32];
char details[128]; char details[128];
@ -205,42 +198,73 @@ SDL_LogEvent(const SDL_Event *event)
} }
switch (event->type) { switch (event->type) {
#define SDL_EVENT_CASE(x) case x: SDL_strlcpy(name, #x, sizeof (name)); #define SDL_EVENT_CASE(x) \
SDL_EVENT_CASE(SDL_FIRSTEVENT) SDL_strlcpy(details, " (THIS IS PROBABLY A BUG!)", sizeof (details)); break; case x: \
SDL_EVENT_CASE(SDL_QUIT) SDL_snprintf(details, sizeof (details), " (timestamp=%u)", (uint) event->quit.timestamp); break; SDL_strlcpy(name, #x, sizeof(name));
SDL_EVENT_CASE(SDL_APP_TERMINATING) break; SDL_EVENT_CASE(SDL_FIRSTEVENT)
SDL_EVENT_CASE(SDL_APP_LOWMEMORY) break; SDL_strlcpy(details, " (THIS IS PROBABLY A BUG!)", sizeof(details));
SDL_EVENT_CASE(SDL_APP_WILLENTERBACKGROUND) break; break;
SDL_EVENT_CASE(SDL_APP_DIDENTERBACKGROUND) break; SDL_EVENT_CASE(SDL_QUIT)
SDL_EVENT_CASE(SDL_APP_WILLENTERFOREGROUND) break; SDL_snprintf(details, sizeof(details), " (timestamp=%u)", (uint)event->quit.timestamp);
SDL_EVENT_CASE(SDL_APP_DIDENTERFOREGROUND) break; break;
SDL_EVENT_CASE(SDL_LOCALECHANGED) break; SDL_EVENT_CASE(SDL_APP_TERMINATING)
SDL_EVENT_CASE(SDL_KEYMAPCHANGED) break; break;
SDL_EVENT_CASE(SDL_CLIPBOARDUPDATE) break; SDL_EVENT_CASE(SDL_APP_LOWMEMORY)
SDL_EVENT_CASE(SDL_RENDER_TARGETS_RESET) break; break;
SDL_EVENT_CASE(SDL_RENDER_DEVICE_RESET) break; SDL_EVENT_CASE(SDL_APP_WILLENTERBACKGROUND)
break;
SDL_EVENT_CASE(SDL_APP_DIDENTERBACKGROUND)
break;
SDL_EVENT_CASE(SDL_APP_WILLENTERFOREGROUND)
break;
SDL_EVENT_CASE(SDL_APP_DIDENTERFOREGROUND)
break;
SDL_EVENT_CASE(SDL_LOCALECHANGED)
break;
SDL_EVENT_CASE(SDL_KEYMAPCHANGED)
break;
SDL_EVENT_CASE(SDL_CLIPBOARDUPDATE)
break;
SDL_EVENT_CASE(SDL_RENDER_TARGETS_RESET)
break;
SDL_EVENT_CASE(SDL_RENDER_DEVICE_RESET)
break;
SDL_EVENT_CASE(SDL_DISPLAYEVENT) { SDL_EVENT_CASE(SDL_DISPLAYEVENT)
{
char name2[64]; char name2[64];
switch (event->display.event) { switch (event->display.event) {
case SDL_DISPLAYEVENT_NONE: SDL_strlcpy(name2, "SDL_DISPLAYEVENT_NONE (THIS IS PROBABLY A BUG!)", sizeof(name2)); break; case SDL_DISPLAYEVENT_NONE:
#define SDL_DISPLAYEVENT_CASE(x) case x: SDL_strlcpy(name2, #x, sizeof (name2)); break SDL_strlcpy(name2, "SDL_DISPLAYEVENT_NONE (THIS IS PROBABLY A BUG!)", sizeof(name2));
break;
#define SDL_DISPLAYEVENT_CASE(x) \
case x: \
SDL_strlcpy(name2, #x, sizeof(name2)); \
break
SDL_DISPLAYEVENT_CASE(SDL_DISPLAYEVENT_ORIENTATION); SDL_DISPLAYEVENT_CASE(SDL_DISPLAYEVENT_ORIENTATION);
SDL_DISPLAYEVENT_CASE(SDL_DISPLAYEVENT_CONNECTED); SDL_DISPLAYEVENT_CASE(SDL_DISPLAYEVENT_CONNECTED);
SDL_DISPLAYEVENT_CASE(SDL_DISPLAYEVENT_DISCONNECTED); SDL_DISPLAYEVENT_CASE(SDL_DISPLAYEVENT_DISCONNECTED);
#undef SDL_DISPLAYEVENT_CASE #undef SDL_DISPLAYEVENT_CASE
default: SDL_strlcpy(name2, "UNKNOWN (bug? fixme?)", sizeof(name2)); break; default:
SDL_strlcpy(name2, "UNKNOWN (bug? fixme?)", sizeof(name2));
break;
} }
SDL_snprintf(details, sizeof(details), " (timestamp=%u display=%u event=%s data1=%d)", SDL_snprintf(details, sizeof(details), " (timestamp=%u display=%u event=%s data1=%d)",
(uint)event->display.timestamp, (uint)event->display.display, name2, (int)event->display.data1); (uint)event->display.timestamp, (uint)event->display.display, name2, (int)event->display.data1);
break; break;
} }
SDL_EVENT_CASE(SDL_WINDOWEVENT) { SDL_EVENT_CASE(SDL_WINDOWEVENT)
{
char name2[64]; char name2[64];
switch (event->window.event) { switch (event->window.event) {
case SDL_WINDOWEVENT_NONE: SDL_strlcpy(name2, "SDL_WINDOWEVENT_NONE (THIS IS PROBABLY A BUG!)", sizeof (name2)); break; case SDL_WINDOWEVENT_NONE:
#define SDL_WINDOWEVENT_CASE(x) case x: SDL_strlcpy(name2, #x, sizeof (name2)); break SDL_strlcpy(name2, "SDL_WINDOWEVENT_NONE (THIS IS PROBABLY A BUG!)", sizeof(name2));
break;
#define SDL_WINDOWEVENT_CASE(x) \
case x: \
SDL_strlcpy(name2, #x, sizeof(name2)); \
break
SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_SHOWN); SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_SHOWN);
SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_HIDDEN); SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_HIDDEN);
SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_EXPOSED); SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_EXPOSED);
@ -260,7 +284,9 @@ SDL_LogEvent(const SDL_Event *event)
SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_ICCPROF_CHANGED); SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_ICCPROF_CHANGED);
SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_DISPLAY_CHANGED); SDL_WINDOWEVENT_CASE(SDL_WINDOWEVENT_DISPLAY_CHANGED);
#undef SDL_WINDOWEVENT_CASE #undef SDL_WINDOWEVENT_CASE
default: SDL_strlcpy(name2, "UNKNOWN (bug? fixme?)", sizeof (name2)); break; default:
SDL_strlcpy(name2, "UNKNOWN (bug? fixme?)", sizeof(name2));
break;
} }
SDL_snprintf(details, sizeof(details), " (timestamp=%u windowid=%u event=%s data1=%d data2=%d)", SDL_snprintf(details, sizeof(details), " (timestamp=%u windowid=%u event=%s data1=%d data2=%d)",
(uint)event->window.timestamp, (uint)event->window.windowID, name2, (int)event->window.data1, (int)event->window.data2); (uint)event->window.timestamp, (uint)event->window.windowID, name2, (int)event->window.data1, (int)event->window.data2);
@ -280,8 +306,12 @@ SDL_LogEvent(const SDL_Event *event)
(uint)event->key.keysym.scancode, \ (uint)event->key.keysym.scancode, \
(uint)event->key.keysym.sym, \ (uint)event->key.keysym.sym, \
(uint)event->key.keysym.mod) (uint)event->key.keysym.mod)
SDL_EVENT_CASE(SDL_KEYDOWN) PRINT_KEY_EVENT(event); break; SDL_EVENT_CASE(SDL_KEYDOWN)
SDL_EVENT_CASE(SDL_KEYUP) PRINT_KEY_EVENT(event); break; PRINT_KEY_EVENT(event);
break;
SDL_EVENT_CASE(SDL_KEYUP)
PRINT_KEY_EVENT(event);
break;
#undef PRINT_KEY_EVENT #undef PRINT_KEY_EVENT
SDL_EVENT_CASE(SDL_TEXTEDITING) SDL_EVENT_CASE(SDL_TEXTEDITING)
@ -294,7 +324,6 @@ SDL_LogEvent(const SDL_Event *event)
SDL_snprintf(details, sizeof(details), " (timestamp=%u windowid=%u text='%s')", (uint)event->text.timestamp, (uint)event->text.windowID, event->text.text); SDL_snprintf(details, sizeof(details), " (timestamp=%u windowid=%u text='%s')", (uint)event->text.timestamp, (uint)event->text.windowID, event->text.text);
break; break;
SDL_EVENT_CASE(SDL_MOUSEMOTION) SDL_EVENT_CASE(SDL_MOUSEMOTION)
SDL_snprintf(details, sizeof(details), " (timestamp=%u windowid=%u which=%u state=%u x=%d y=%d xrel=%d yrel=%d)", SDL_snprintf(details, sizeof(details), " (timestamp=%u windowid=%u which=%u state=%u x=%d y=%d xrel=%d yrel=%d)",
(uint)event->motion.timestamp, (uint)event->motion.windowID, (uint)event->motion.timestamp, (uint)event->motion.windowID,
@ -309,11 +338,14 @@ SDL_LogEvent(const SDL_Event *event)
(uint)event->button.which, (uint)event->button.button, \ (uint)event->button.which, (uint)event->button.button, \
event->button.state == SDL_PRESSED ? "pressed" : "released", \ event->button.state == SDL_PRESSED ? "pressed" : "released", \
(uint)event->button.clicks, (int)event->button.x, (int)event->button.y) (uint)event->button.clicks, (int)event->button.x, (int)event->button.y)
SDL_EVENT_CASE(SDL_MOUSEBUTTONDOWN) PRINT_MBUTTON_EVENT(event); break; SDL_EVENT_CASE(SDL_MOUSEBUTTONDOWN)
SDL_EVENT_CASE(SDL_MOUSEBUTTONUP) PRINT_MBUTTON_EVENT(event); break; PRINT_MBUTTON_EVENT(event);
break;
SDL_EVENT_CASE(SDL_MOUSEBUTTONUP)
PRINT_MBUTTON_EVENT(event);
break;
#undef PRINT_MBUTTON_EVENT #undef PRINT_MBUTTON_EVENT
SDL_EVENT_CASE(SDL_MOUSEWHEEL) SDL_EVENT_CASE(SDL_MOUSEWHEEL)
SDL_snprintf(details, sizeof(details), " (timestamp=%u windowid=%u which=%u x=%d y=%d preciseX=%f preciseY=%f direction=%s)", SDL_snprintf(details, sizeof(details), " (timestamp=%u windowid=%u which=%u x=%d y=%d preciseX=%f preciseY=%f direction=%s)",
(uint)event->wheel.timestamp, (uint)event->wheel.windowID, (uint)event->wheel.timestamp, (uint)event->wheel.windowID,
@ -344,13 +376,21 @@ SDL_LogEvent(const SDL_Event *event)
SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d button=%u state=%s)", \ SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d button=%u state=%s)", \
(uint)event->jbutton.timestamp, (int)event->jbutton.which, \ (uint)event->jbutton.timestamp, (int)event->jbutton.which, \
(uint)event->jbutton.button, event->jbutton.state == SDL_PRESSED ? "pressed" : "released") (uint)event->jbutton.button, event->jbutton.state == SDL_PRESSED ? "pressed" : "released")
SDL_EVENT_CASE(SDL_JOYBUTTONDOWN) PRINT_JBUTTON_EVENT(event); break; SDL_EVENT_CASE(SDL_JOYBUTTONDOWN)
SDL_EVENT_CASE(SDL_JOYBUTTONUP) PRINT_JBUTTON_EVENT(event); break; PRINT_JBUTTON_EVENT(event);
break;
SDL_EVENT_CASE(SDL_JOYBUTTONUP)
PRINT_JBUTTON_EVENT(event);
break;
#undef PRINT_JBUTTON_EVENT #undef PRINT_JBUTTON_EVENT
#define PRINT_JOYDEV_EVENT(event) SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d)", (uint)event->jdevice.timestamp, (int)event->jdevice.which) #define PRINT_JOYDEV_EVENT(event) SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d)", (uint)event->jdevice.timestamp, (int)event->jdevice.which)
SDL_EVENT_CASE(SDL_JOYDEVICEADDED) PRINT_JOYDEV_EVENT(event); break; SDL_EVENT_CASE(SDL_JOYDEVICEADDED)
SDL_EVENT_CASE(SDL_JOYDEVICEREMOVED) PRINT_JOYDEV_EVENT(event); break; PRINT_JOYDEV_EVENT(event);
break;
SDL_EVENT_CASE(SDL_JOYDEVICEREMOVED)
PRINT_JOYDEV_EVENT(event);
break;
#undef PRINT_JOYDEV_EVENT #undef PRINT_JOYDEV_EVENT
SDL_EVENT_CASE(SDL_CONTROLLERAXISMOTION) SDL_EVENT_CASE(SDL_CONTROLLERAXISMOTION)
@ -363,14 +403,24 @@ SDL_LogEvent(const SDL_Event *event)
SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d button=%u state=%s)", \ SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d button=%u state=%s)", \
(uint)event->cbutton.timestamp, (int)event->cbutton.which, \ (uint)event->cbutton.timestamp, (int)event->cbutton.which, \
(uint)event->cbutton.button, event->cbutton.state == SDL_PRESSED ? "pressed" : "released") (uint)event->cbutton.button, event->cbutton.state == SDL_PRESSED ? "pressed" : "released")
SDL_EVENT_CASE(SDL_CONTROLLERBUTTONDOWN) PRINT_CBUTTON_EVENT(event); break; SDL_EVENT_CASE(SDL_CONTROLLERBUTTONDOWN)
SDL_EVENT_CASE(SDL_CONTROLLERBUTTONUP) PRINT_CBUTTON_EVENT(event); break; PRINT_CBUTTON_EVENT(event);
break;
SDL_EVENT_CASE(SDL_CONTROLLERBUTTONUP)
PRINT_CBUTTON_EVENT(event);
break;
#undef PRINT_CBUTTON_EVENT #undef PRINT_CBUTTON_EVENT
#define PRINT_CONTROLLERDEV_EVENT(event) SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d)", (uint)event->cdevice.timestamp, (int)event->cdevice.which) #define PRINT_CONTROLLERDEV_EVENT(event) SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d)", (uint)event->cdevice.timestamp, (int)event->cdevice.which)
SDL_EVENT_CASE(SDL_CONTROLLERDEVICEADDED) PRINT_CONTROLLERDEV_EVENT(event); break; SDL_EVENT_CASE(SDL_CONTROLLERDEVICEADDED)
SDL_EVENT_CASE(SDL_CONTROLLERDEVICEREMOVED) PRINT_CONTROLLERDEV_EVENT(event); break; PRINT_CONTROLLERDEV_EVENT(event);
SDL_EVENT_CASE(SDL_CONTROLLERDEVICEREMAPPED) PRINT_CONTROLLERDEV_EVENT(event); break; break;
SDL_EVENT_CASE(SDL_CONTROLLERDEVICEREMOVED)
PRINT_CONTROLLERDEV_EVENT(event);
break;
SDL_EVENT_CASE(SDL_CONTROLLERDEVICEREMAPPED)
PRINT_CONTROLLERDEV_EVENT(event);
break;
#undef PRINT_CONTROLLERDEV_EVENT #undef PRINT_CONTROLLERDEV_EVENT
#define PRINT_CTOUCHPAD_EVENT(event) \ #define PRINT_CTOUCHPAD_EVENT(event) \
@ -378,14 +428,20 @@ SDL_LogEvent(const SDL_Event *event)
(uint)event->ctouchpad.timestamp, (int)event->ctouchpad.which, \ (uint)event->ctouchpad.timestamp, (int)event->ctouchpad.which, \
(int)event->ctouchpad.touchpad, (int)event->ctouchpad.finger, \ (int)event->ctouchpad.touchpad, (int)event->ctouchpad.finger, \
event->ctouchpad.x, event->ctouchpad.y, event->ctouchpad.pressure) event->ctouchpad.x, event->ctouchpad.y, event->ctouchpad.pressure)
SDL_EVENT_CASE(SDL_CONTROLLERTOUCHPADDOWN) PRINT_CTOUCHPAD_EVENT(event); break; SDL_EVENT_CASE(SDL_CONTROLLERTOUCHPADDOWN)
SDL_EVENT_CASE(SDL_CONTROLLERTOUCHPADUP) PRINT_CTOUCHPAD_EVENT(event); break; PRINT_CTOUCHPAD_EVENT(event);
SDL_EVENT_CASE(SDL_CONTROLLERTOUCHPADMOTION) PRINT_CTOUCHPAD_EVENT(event); break; break;
SDL_EVENT_CASE(SDL_CONTROLLERTOUCHPADUP)
PRINT_CTOUCHPAD_EVENT(event);
break;
SDL_EVENT_CASE(SDL_CONTROLLERTOUCHPADMOTION)
PRINT_CTOUCHPAD_EVENT(event);
break;
#undef PRINT_CTOUCHPAD_EVENT #undef PRINT_CTOUCHPAD_EVENT
SDL_EVENT_CASE(SDL_CONTROLLERSENSORUPDATE) SDL_EVENT_CASE(SDL_CONTROLLERSENSORUPDATE)
SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d sensor=%d data[0]=%f data[1]=%f data[2]=%f)", \ SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d sensor=%d data[0]=%f data[1]=%f data[2]=%f)",
(uint) event->csensor.timestamp, (int) event->csensor.which, (int) event->csensor.sensor, \ (uint)event->csensor.timestamp, (int)event->csensor.which, (int)event->csensor.sensor,
event->csensor.data[0], event->csensor.data[1], event->csensor.data[2]); event->csensor.data[0], event->csensor.data[1], event->csensor.data[2]);
break; break;
@ -394,9 +450,15 @@ SDL_LogEvent(const SDL_Event *event)
(uint)event->tfinger.timestamp, (long long)event->tfinger.touchId, \ (uint)event->tfinger.timestamp, (long long)event->tfinger.touchId, \
(long long)event->tfinger.fingerId, event->tfinger.x, event->tfinger.y, \ (long long)event->tfinger.fingerId, event->tfinger.x, event->tfinger.y, \
event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure) event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure)
SDL_EVENT_CASE(SDL_FINGERDOWN) PRINT_FINGER_EVENT(event); break; SDL_EVENT_CASE(SDL_FINGERDOWN)
SDL_EVENT_CASE(SDL_FINGERUP) PRINT_FINGER_EVENT(event); break; PRINT_FINGER_EVENT(event);
SDL_EVENT_CASE(SDL_FINGERMOTION) PRINT_FINGER_EVENT(event); break; break;
SDL_EVENT_CASE(SDL_FINGERUP)
PRINT_FINGER_EVENT(event);
break;
SDL_EVENT_CASE(SDL_FINGERMOTION)
PRINT_FINGER_EVENT(event);
break;
#undef PRINT_FINGER_EVENT #undef PRINT_FINGER_EVENT
#define PRINT_DOLLAR_EVENT(event) \ #define PRINT_DOLLAR_EVENT(event) \
@ -404,8 +466,12 @@ SDL_LogEvent(const SDL_Event *event)
(uint)event->dgesture.timestamp, (long long)event->dgesture.touchId, \ (uint)event->dgesture.timestamp, (long long)event->dgesture.touchId, \
(long long)event->dgesture.gestureId, (uint)event->dgesture.numFingers, \ (long long)event->dgesture.gestureId, (uint)event->dgesture.numFingers, \
event->dgesture.error, event->dgesture.x, event->dgesture.y) event->dgesture.error, event->dgesture.x, event->dgesture.y)
SDL_EVENT_CASE(SDL_DOLLARGESTURE) PRINT_DOLLAR_EVENT(event); break; SDL_EVENT_CASE(SDL_DOLLARGESTURE)
SDL_EVENT_CASE(SDL_DOLLARRECORD) PRINT_DOLLAR_EVENT(event); break; PRINT_DOLLAR_EVENT(event);
break;
SDL_EVENT_CASE(SDL_DOLLARRECORD)
PRINT_DOLLAR_EVENT(event);
break;
#undef PRINT_DOLLAR_EVENT #undef PRINT_DOLLAR_EVENT
SDL_EVENT_CASE(SDL_MULTIGESTURE) SDL_EVENT_CASE(SDL_MULTIGESTURE)
@ -416,21 +482,33 @@ SDL_LogEvent(const SDL_Event *event)
break; break;
#define PRINT_DROP_EVENT(event) SDL_snprintf(details, sizeof(details), " (file='%s' timestamp=%u windowid=%u)", event->drop.file, (uint)event->drop.timestamp, (uint)event->drop.windowID) #define PRINT_DROP_EVENT(event) SDL_snprintf(details, sizeof(details), " (file='%s' timestamp=%u windowid=%u)", event->drop.file, (uint)event->drop.timestamp, (uint)event->drop.windowID)
SDL_EVENT_CASE(SDL_DROPFILE) PRINT_DROP_EVENT(event); break; SDL_EVENT_CASE(SDL_DROPFILE)
SDL_EVENT_CASE(SDL_DROPTEXT) PRINT_DROP_EVENT(event); break; PRINT_DROP_EVENT(event);
SDL_EVENT_CASE(SDL_DROPBEGIN) PRINT_DROP_EVENT(event); break; break;
SDL_EVENT_CASE(SDL_DROPCOMPLETE) PRINT_DROP_EVENT(event); break; SDL_EVENT_CASE(SDL_DROPTEXT)
PRINT_DROP_EVENT(event);
break;
SDL_EVENT_CASE(SDL_DROPBEGIN)
PRINT_DROP_EVENT(event);
break;
SDL_EVENT_CASE(SDL_DROPCOMPLETE)
PRINT_DROP_EVENT(event);
break;
#undef PRINT_DROP_EVENT #undef PRINT_DROP_EVENT
#define PRINT_AUDIODEV_EVENT(event) SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%u iscapture=%s)", (uint)event->adevice.timestamp, (uint)event->adevice.which, event->adevice.iscapture ? "true" : "false") #define PRINT_AUDIODEV_EVENT(event) SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%u iscapture=%s)", (uint)event->adevice.timestamp, (uint)event->adevice.which, event->adevice.iscapture ? "true" : "false")
SDL_EVENT_CASE(SDL_AUDIODEVICEADDED) PRINT_AUDIODEV_EVENT(event); break; SDL_EVENT_CASE(SDL_AUDIODEVICEADDED)
SDL_EVENT_CASE(SDL_AUDIODEVICEREMOVED) PRINT_AUDIODEV_EVENT(event); break; PRINT_AUDIODEV_EVENT(event);
break;
SDL_EVENT_CASE(SDL_AUDIODEVICEREMOVED)
PRINT_AUDIODEV_EVENT(event);
break;
#undef PRINT_AUDIODEV_EVENT #undef PRINT_AUDIODEV_EVENT
SDL_EVENT_CASE(SDL_SENSORUPDATE) SDL_EVENT_CASE(SDL_SENSORUPDATE)
SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d data[0]=%f data[1]=%f data[2]=%f data[3]=%f data[4]=%f data[5]=%f)", \ SDL_snprintf(details, sizeof(details), " (timestamp=%u which=%d data[0]=%f data[1]=%f data[2]=%f data[3]=%f data[4]=%f data[5]=%f)",
(uint) event->sensor.timestamp, (int) event->sensor.which, \ (uint)event->sensor.timestamp, (int)event->sensor.which,
event->sensor.data[0], event->sensor.data[1], event->sensor.data[2], \ event->sensor.data[0], event->sensor.data[1], event->sensor.data[2],
event->sensor.data[3], event->sensor.data[4], event->sensor.data[5]); event->sensor.data[3], event->sensor.data[4], event->sensor.data[5]);
break; break;
@ -455,12 +533,9 @@ SDL_LogEvent(const SDL_Event *event)
#undef uint #undef uint
} }
/* Public functions */ /* Public functions */
void void SDL_StopEventLoop(void)
SDL_StopEventLoop(void)
{ {
const char *report = SDL_GetHint("SDL_EVENT_QUEUE_STATISTICS"); const char *report = SDL_GetHint("SDL_EVENT_QUEUE_STATISTICS");
int i; int i;
@ -534,8 +609,7 @@ SDL_StopEventLoop(void)
} }
/* This function (and associated calls) may be called more than once */ /* This function (and associated calls) may be called more than once */
int int SDL_StartEventLoop(void)
SDL_StartEventLoop(void)
{ {
/* We'll leave the event queue alone, since we might have gotten /* We'll leave the event queue alone, since we might have gotten
some important events at launch (like SDL_DROPFILE) some important events at launch (like SDL_DROPFILE)
@ -578,10 +652,8 @@ SDL_StartEventLoop(void)
return 0; return 0;
} }
/* Add an event to the event queue -- called with the queue locked */ /* Add an event to the event queue -- called with the queue locked */
static int static int SDL_AddEvent(SDL_Event *event)
SDL_AddEvent(SDL_Event * event)
{ {
SDL_EventEntry *entry; SDL_EventEntry *entry;
const int initial_count = SDL_AtomicGet(&SDL_EventQ.count); const int initial_count = SDL_AtomicGet(&SDL_EventQ.count);
@ -636,8 +708,7 @@ SDL_AddEvent(SDL_Event * event)
} }
/* Remove an event from the queue -- called with the queue locked */ /* Remove an event from the queue -- called with the queue locked */
static void static void SDL_CutEvent(SDL_EventEntry *entry)
SDL_CutEvent(SDL_EventEntry *entry)
{ {
if (entry->prev) { if (entry->prev) {
entry->prev->next = entry->next; entry->prev->next = entry->next;
@ -665,8 +736,7 @@ SDL_CutEvent(SDL_EventEntry *entry)
SDL_AtomicAdd(&SDL_EventQ.count, -1); SDL_AtomicAdd(&SDL_EventQ.count, -1);
} }
static int static int SDL_SendWakeupEvent()
SDL_SendWakeupEvent()
{ {
SDL_VideoDevice *_this = SDL_GetVideoDevice(); SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (_this == NULL || !_this->SendWakeupEvent) { if (_this == NULL || !_this->SendWakeupEvent) {
@ -687,8 +757,7 @@ SDL_SendWakeupEvent()
} }
/* Lock the event queue, take a peep at it, and unlock it */ /* Lock the event queue, take a peep at it, and unlock it */
static int static int SDL_PeepEventsInternal(SDL_Event *events, int numevents, SDL_eventaction action,
SDL_PeepEventsInternal(SDL_Event * events, int numevents, SDL_eventaction action,
Uint32 minType, Uint32 maxType, SDL_bool include_sentinel) Uint32 minType, Uint32 maxType, SDL_bool include_sentinel)
{ {
int i, used, sentinels_expected = 0; int i, used, sentinels_expected = 0;
@ -786,8 +855,7 @@ SDL_PeepEventsInternal(SDL_Event * events, int numevents, SDL_eventaction action
return used; return used;
} }
int int SDL_PeepEvents(SDL_Event *events, int numevents, SDL_eventaction action,
SDL_PeepEvents(SDL_Event * events, int numevents, SDL_eventaction action,
Uint32 minType, Uint32 maxType) Uint32 minType, Uint32 maxType)
{ {
return SDL_PeepEventsInternal(events, numevents, action, minType, maxType, SDL_FALSE); return SDL_PeepEventsInternal(events, numevents, action, minType, maxType, SDL_FALSE);
@ -805,14 +873,12 @@ SDL_HasEvents(Uint32 minType, Uint32 maxType)
return SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, minType, maxType) > 0; return SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, minType, maxType) > 0;
} }
void void SDL_FlushEvent(Uint32 type)
SDL_FlushEvent(Uint32 type)
{ {
SDL_FlushEvents(type, type); SDL_FlushEvents(type, type);
} }
void void SDL_FlushEvents(Uint32 minType, Uint32 maxType)
SDL_FlushEvents(Uint32 minType, Uint32 maxType)
{ {
SDL_EventEntry *entry, *next; SDL_EventEntry *entry, *next;
Uint32 type; Uint32 type;
@ -851,8 +917,7 @@ SDL_FlushEvents(Uint32 minType, Uint32 maxType)
} }
/* Run the system dependent event loops */ /* Run the system dependent event loops */
static void static void SDL_PumpEventsInternal(SDL_bool push_sentinel)
SDL_PumpEventsInternal(SDL_bool push_sentinel)
{ {
SDL_VideoDevice *_this = SDL_GetVideoDevice(); SDL_VideoDevice *_this = SDL_GetVideoDevice();
@ -889,22 +954,20 @@ SDL_PumpEventsInternal(SDL_bool push_sentinel)
} }
} }
void void SDL_PumpEvents()
SDL_PumpEvents()
{ {
SDL_PumpEventsInternal(SDL_FALSE); SDL_PumpEventsInternal(SDL_FALSE);
} }
/* Public functions */ /* Public functions */
int int SDL_PollEvent(SDL_Event *event)
SDL_PollEvent(SDL_Event * event)
{ {
return SDL_WaitEventTimeout(event, 0); return SDL_WaitEventTimeout(event, 0);
} }
static SDL_bool static SDL_bool SDL_events_need_periodic_poll()
SDL_events_need_periodic_poll() { {
SDL_bool need_periodic_poll = SDL_FALSE; SDL_bool need_periodic_poll = SDL_FALSE;
#if !SDL_JOYSTICK_DISABLED #if !SDL_JOYSTICK_DISABLED
@ -920,8 +983,7 @@ SDL_events_need_periodic_poll() {
return need_periodic_poll; return need_periodic_poll;
} }
static int static int SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Event *event, Uint32 start, int timeout)
SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Event * event, Uint32 start, int timeout)
{ {
int loop_timeout = timeout; int loop_timeout = timeout;
SDL_bool need_periodic_poll = SDL_events_need_periodic_poll(); SDL_bool need_periodic_poll = SDL_events_need_periodic_poll();
@ -992,8 +1054,8 @@ SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Event * event,
return 0; return 0;
} }
static SDL_bool static SDL_bool SDL_events_need_polling()
SDL_events_need_polling() { {
SDL_bool need_polling = SDL_FALSE; SDL_bool need_polling = SDL_FALSE;
#if !SDL_JOYSTICK_DISABLED #if !SDL_JOYSTICK_DISABLED
@ -1011,8 +1073,7 @@ SDL_events_need_polling() {
return need_polling; return need_polling;
} }
static SDL_Window * static SDL_Window *SDL_find_active_window(SDL_VideoDevice *_this)
SDL_find_active_window(SDL_VideoDevice * _this)
{ {
SDL_Window *window; SDL_Window *window;
for (window = _this->windows; window; window = window->next) { for (window = _this->windows; window; window = window->next) {
@ -1023,14 +1084,12 @@ SDL_find_active_window(SDL_VideoDevice * _this)
return NULL; return NULL;
} }
int int SDL_WaitEvent(SDL_Event *event)
SDL_WaitEvent(SDL_Event * event)
{ {
return SDL_WaitEventTimeout(event, -1); return SDL_WaitEventTimeout(event, -1);
} }
int int SDL_WaitEventTimeout(SDL_Event *event, int timeout)
SDL_WaitEventTimeout(SDL_Event * event, int timeout)
{ {
SDL_VideoDevice *_this = SDL_GetVideoDevice(); SDL_VideoDevice *_this = SDL_GetVideoDevice();
SDL_Window *wakeup_window; SDL_Window *wakeup_window;
@ -1119,8 +1178,7 @@ SDL_WaitEventTimeout(SDL_Event * event, int timeout)
} }
} }
int int SDL_PushEvent(SDL_Event *event)
SDL_PushEvent(SDL_Event * event)
{ {
event->common.timestamp = SDL_GetTicks(); event->common.timestamp = SDL_GetTicks();
@ -1173,8 +1231,7 @@ SDL_PushEvent(SDL_Event * event)
return 1; return 1;
} }
void void SDL_SetEventFilter(SDL_EventFilter filter, void *userdata)
SDL_SetEventFilter(SDL_EventFilter filter, void *userdata)
{ {
if (SDL_event_watchers_lock == NULL || SDL_LockMutex(SDL_event_watchers_lock) == 0) { if (SDL_event_watchers_lock == NULL || SDL_LockMutex(SDL_event_watchers_lock) == 0) {
/* Set filter and discard pending events */ /* Set filter and discard pending events */
@ -1212,8 +1269,7 @@ SDL_GetEventFilter(SDL_EventFilter * filter, void **userdata)
return event_ok.callback ? SDL_TRUE : SDL_FALSE; return event_ok.callback ? SDL_TRUE : SDL_FALSE;
} }
void void SDL_AddEventWatch(SDL_EventFilter filter, void *userdata)
SDL_AddEventWatch(SDL_EventFilter filter, void *userdata)
{ {
if (SDL_event_watchers_lock == NULL || SDL_LockMutex(SDL_event_watchers_lock) == 0) { if (SDL_event_watchers_lock == NULL || SDL_LockMutex(SDL_event_watchers_lock) == 0) {
SDL_EventWatcher *event_watchers; SDL_EventWatcher *event_watchers;
@ -1236,8 +1292,7 @@ SDL_AddEventWatch(SDL_EventFilter filter, void *userdata)
} }
} }
void void SDL_DelEventWatch(SDL_EventFilter filter, void *userdata)
SDL_DelEventWatch(SDL_EventFilter filter, void *userdata)
{ {
if (SDL_event_watchers_lock == NULL || SDL_LockMutex(SDL_event_watchers_lock) == 0) { if (SDL_event_watchers_lock == NULL || SDL_LockMutex(SDL_event_watchers_lock) == 0) {
int i; int i;
@ -1263,8 +1318,7 @@ SDL_DelEventWatch(SDL_EventFilter filter, void *userdata)
} }
} }
void void SDL_FilterEvents(SDL_EventFilter filter, void *userdata)
SDL_FilterEvents(SDL_EventFilter filter, void *userdata)
{ {
if (!SDL_EventQ.lock || SDL_LockMutex(SDL_EventQ.lock) == 0) { if (!SDL_EventQ.lock || SDL_LockMutex(SDL_EventQ.lock) == 0) {
SDL_EventEntry *entry, *next; SDL_EventEntry *entry, *next;
@ -1280,8 +1334,7 @@ SDL_FilterEvents(SDL_EventFilter filter, void *userdata)
} }
} }
Uint8 Uint8 SDL_EventState(Uint32 type, int state)
SDL_EventState(Uint32 type, int state)
{ {
const SDL_bool isde = (state == SDL_DISABLE) || (state == SDL_ENABLE); const SDL_bool isde = (state == SDL_DISABLE) || (state == SDL_ENABLE);
Uint8 current_state; Uint8 current_state;
@ -1341,8 +1394,7 @@ SDL_RegisterEvents(int numevents)
return event_base; return event_base;
} }
int int SDL_SendAppEvent(SDL_EventType eventType)
SDL_SendAppEvent(SDL_EventType eventType)
{ {
int posted; int posted;
@ -1355,8 +1407,7 @@ SDL_SendAppEvent(SDL_EventType eventType)
return posted; return posted;
} }
int int SDL_SendSysWMEvent(SDL_SysWMmsg *message)
SDL_SendSysWMEvent(SDL_SysWMmsg * message)
{ {
int posted; int posted;
@ -1372,20 +1423,17 @@ SDL_SendSysWMEvent(SDL_SysWMmsg * message)
return posted; return posted;
} }
int int SDL_SendKeymapChangedEvent(void)
SDL_SendKeymapChangedEvent(void)
{ {
return SDL_SendAppEvent(SDL_KEYMAPCHANGED); return SDL_SendAppEvent(SDL_KEYMAPCHANGED);
} }
int int SDL_SendLocaleChangedEvent(void)
SDL_SendLocaleChangedEvent(void)
{ {
return SDL_SendAppEvent(SDL_LOCALECHANGED); return SDL_SendAppEvent(SDL_LOCALECHANGED);
} }
int int SDL_EventsInit(void)
SDL_EventsInit(void)
{ {
#if !SDL_JOYSTICK_DISABLED #if !SDL_JOYSTICK_DISABLED
SDL_AddHintCallback(SDL_HINT_AUTO_UPDATE_JOYSTICKS, SDL_AutoUpdateJoysticksChanged, NULL); SDL_AddHintCallback(SDL_HINT_AUTO_UPDATE_JOYSTICKS, SDL_AutoUpdateJoysticksChanged, NULL);
@ -1405,8 +1453,7 @@ SDL_EventsInit(void)
return 0; return 0;
} }
void void SDL_EventsQuit(void)
SDL_EventsQuit(void)
{ {
SDL_QuitQuit(); SDL_QuitQuit();
SDL_StopEventLoop(); SDL_StopEventLoop();

View File

@ -43,23 +43,27 @@
#define PHI 0.618033989 #define PHI 0.618033989
#endif #endif
typedef struct { typedef struct
{
float x, y; float x, y;
} SDL_FloatPoint; } SDL_FloatPoint;
typedef struct { typedef struct
{
float length; float length;
int numPoints; int numPoints;
SDL_FloatPoint p[MAXPATHSIZE]; SDL_FloatPoint p[MAXPATHSIZE];
} SDL_DollarPath; } SDL_DollarPath;
typedef struct { typedef struct
{
SDL_FloatPoint path[DOLLARNPOINTS]; SDL_FloatPoint path[DOLLARNPOINTS];
unsigned long hash; unsigned long hash;
} SDL_DollarTemplate; } SDL_DollarTemplate;
typedef struct { typedef struct
{
SDL_TouchID id; SDL_TouchID id;
SDL_FloatPoint centroid; SDL_FloatPoint centroid;
SDL_DollarPath dollarPath; SDL_DollarPath dollarPath;
@ -121,7 +125,6 @@ static unsigned long SDL_HashDollar(SDL_FloatPoint* points)
return hash; return hash;
} }
static int SaveTemplate(SDL_DollarTemplate *templ, SDL_RWops *dst) static int SaveTemplate(SDL_DollarTemplate *templ, SDL_RWops *dst)
{ {
if (dst == NULL) { if (dst == NULL) {
@ -156,7 +159,6 @@ static int SaveTemplate(SDL_DollarTemplate *templ, SDL_RWops *dst)
return 1; return 1;
} }
int SDL_SaveAllDollarTemplates(SDL_RWops *dst) int SDL_SaveAllDollarTemplates(SDL_RWops *dst)
{ {
int i, j, rtrn = 0; int i, j, rtrn = 0;
@ -286,7 +288,6 @@ int SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src)
return loaded; return loaded;
} }
#if defined(ENABLE_DOLLAR) #if defined(ENABLE_DOLLAR)
static float dollarDifference(SDL_FloatPoint *points, SDL_FloatPoint *templ, float ang) static float dollarDifference(SDL_FloatPoint *points, SDL_FloatPoint *templ, float ang)
{ {
@ -301,7 +302,6 @@ static float dollarDifference(SDL_FloatPoint* points,SDL_FloatPoint* templ,float
(p.y - templ[i].y) * (p.y - templ[i].y))); (p.y - templ[i].y) * (p.y - templ[i].y)));
} }
return dist / DOLLARNPOINTS; return dist / DOLLARNPOINTS;
} }
static float bestDollarDifference(SDL_FloatPoint *points, SDL_FloatPoint *templ) static float bestDollarDifference(SDL_FloatPoint *points, SDL_FloatPoint *templ)
@ -367,7 +367,8 @@ static int dollarNormalize(const SDL_DollarPath *path,SDL_FloatPoint *points, SD
interval = length / (DOLLARNPOINTS - 1); interval = length / (DOLLARNPOINTS - 1);
dist = interval; dist = interval;
centroid.x = 0;centroid.y = 0; centroid.x = 0;
centroid.y = 0;
/* printf("(%f,%f)\n",path->p[path->numPoints-1].x,path->p[path->numPoints-1].y); */ /* printf("(%f,%f)\n",path->p[path->numPoints-1].x,path->p[path->numPoints-1].y); */
for (i = 1; i < path->numPoints; i++) { for (i = 1; i < path->numPoints; i++) {
@ -418,7 +419,6 @@ static int dollarNormalize(const SDL_DollarPath *path,SDL_FloatPoint *points, SD
points[i].y = (float)((px - centroid.x) * SDL_sin(ang) + points[i].y = (float)((px - centroid.x) * SDL_sin(ang) +
(py - centroid.y) * SDL_cos(ang) + centroid.y); (py - centroid.y) * SDL_cos(ang) + centroid.y);
if (points[i].x < xmin) { if (points[i].x < xmin) {
xmin = points[i].x; xmin = points[i].x;
} }
@ -458,7 +458,10 @@ static float dollarRecognize(const SDL_DollarPath *path,int *bestTempl,SDL_Gestu
*bestTempl = -1; *bestTempl = -1;
for (i = 0; i < touch->numDollarTemplates; i++) { for (i = 0; i < touch->numDollarTemplates; i++) {
float diff = bestDollarDifference(points, touch->dollarTemplate[i].path); float diff = bestDollarDifference(points, touch->dollarTemplate[i].path);
if (diff < bestDiff) {bestDiff = diff; *bestTempl = i;} if (diff < bestDiff) {
bestDiff = diff;
*bestTempl = i;
}
} }
return bestDiff; return bestDiff;
} }
@ -563,7 +566,6 @@ static void SDL_SendDollarRecord(SDL_GestureTouch* touch,SDL_GestureID gestureId
} }
#endif #endif
void SDL_GestureProcessEvent(SDL_Event *event) void SDL_GestureProcessEvent(SDL_Event *event)
{ {
float x, y; float x, y;
@ -635,9 +637,11 @@ void SDL_GestureProcessEvent(SDL_Event* event)
/* inTouch->gestureLast[j] = inTouch->gestureLast[inTouch->numDownFingers]; */ /* inTouch->gestureLast[j] = inTouch->gestureLast[inTouch->numDownFingers]; */
if (inTouch->numDownFingers > 0) { if (inTouch->numDownFingers > 0) {
inTouch->centroid.x = (inTouch->centroid.x * (inTouch->numDownFingers + 1) - inTouch->centroid.x = (inTouch->centroid.x * (inTouch->numDownFingers + 1) -
x)/inTouch->numDownFingers; x) /
inTouch->numDownFingers;
inTouch->centroid.y = (inTouch->centroid.y * (inTouch->numDownFingers + 1) - inTouch->centroid.y = (inTouch->centroid.y * (inTouch->numDownFingers + 1) -
y)/inTouch->numDownFingers; y) /
inTouch->numDownFingers;
} }
} else if (event->type == SDL_FINGERMOTION) { } else if (event->type == SDL_FINGERMOTION) {
float dx = event->tfinger.dx; float dx = event->tfinger.dx;
@ -690,7 +694,6 @@ void SDL_GestureProcessEvent(SDL_Event* event)
dtheta = 0; dtheta = 0;
} }
/* inTouch->gestureLast[j].dDist = dDist; /* inTouch->gestureLast[j].dDist = dDist;
inTouch->gestureLast[j].dtheta = dtheta; inTouch->gestureLast[j].dtheta = dtheta;
@ -716,9 +719,11 @@ void SDL_GestureProcessEvent(SDL_Event* event)
inTouch->numDownFingers++; inTouch->numDownFingers++;
inTouch->centroid.x = (inTouch->centroid.x * (inTouch->numDownFingers - 1) + inTouch->centroid.x = (inTouch->centroid.x * (inTouch->numDownFingers - 1) +
x)/inTouch->numDownFingers; x) /
inTouch->numDownFingers;
inTouch->centroid.y = (inTouch->centroid.y * (inTouch->numDownFingers - 1) + inTouch->centroid.y = (inTouch->centroid.y * (inTouch->numDownFingers - 1) +
y)/inTouch->numDownFingers; y) /
inTouch->numDownFingers;
/* printf("Finger Down: (%f,%f). Centroid: (%f,%f\n",x,y, /* printf("Finger Down: (%f,%f). Centroid: (%f,%f\n",x,y,
inTouch->centroid.x,inTouch->centroid.y); */ inTouch->centroid.x,inTouch->centroid.y); */

View File

@ -26,7 +26,6 @@
#include "../video/SDL_sysvideo.h" #include "../video/SDL_sysvideo.h"
#include "scancodes_ascii.h" #include "scancodes_ascii.h"
/* #define DEBUG_KEYBOARD */ /* #define DEBUG_KEYBOARD */
/* Global keyboard information */ /* Global keyboard information */
@ -665,16 +664,14 @@ SDL_UCS4ToUTF8(Uint32 ch, char *dst)
} }
/* Public functions */ /* Public functions */
int int SDL_KeyboardInit(void)
SDL_KeyboardInit(void)
{ {
/* Set the default keymap */ /* Set the default keymap */
SDL_SetKeymap(0, SDL_default_keymap, SDL_NUM_SCANCODES, SDL_FALSE); SDL_SetKeymap(0, SDL_default_keymap, SDL_NUM_SCANCODES, SDL_FALSE);
return 0; return 0;
} }
void void SDL_ResetKeyboard(void)
SDL_ResetKeyboard(void)
{ {
SDL_Keyboard *keyboard = &SDL_keyboard; SDL_Keyboard *keyboard = &SDL_keyboard;
SDL_Scancode scancode; SDL_Scancode scancode;
@ -689,14 +686,12 @@ SDL_ResetKeyboard(void)
} }
} }
void void SDL_GetDefaultKeymap(SDL_Keycode *keymap)
SDL_GetDefaultKeymap(SDL_Keycode * keymap)
{ {
SDL_memcpy(keymap, SDL_default_keymap, sizeof(SDL_default_keymap)); SDL_memcpy(keymap, SDL_default_keymap, sizeof(SDL_default_keymap));
} }
void void SDL_SetKeymap(int start, const SDL_Keycode *keys, int length, SDL_bool send_event)
SDL_SetKeymap(int start, const SDL_Keycode * keys, int length, SDL_bool send_event)
{ {
SDL_Keyboard *keyboard = &SDL_keyboard; SDL_Keyboard *keyboard = &SDL_keyboard;
SDL_Scancode scancode; SDL_Scancode scancode;
@ -729,8 +724,7 @@ SDL_SetKeymap(int start, const SDL_Keycode * keys, int length, SDL_bool send_eve
} }
} }
void void SDL_SetScancodeName(SDL_Scancode scancode, const char *name)
SDL_SetScancodeName(SDL_Scancode scancode, const char *name)
{ {
if (scancode >= SDL_NUM_SCANCODES) { if (scancode >= SDL_NUM_SCANCODES) {
return; return;
@ -746,8 +740,7 @@ SDL_GetKeyboardFocus(void)
return keyboard->focus; return keyboard->focus;
} }
void void SDL_SetKeyboardFocus(SDL_Window *window)
SDL_SetKeyboardFocus(SDL_Window * window)
{ {
SDL_Keyboard *keyboard = &SDL_keyboard; SDL_Keyboard *keyboard = &SDL_keyboard;
@ -796,8 +789,7 @@ SDL_SetKeyboardFocus(SDL_Window * window)
} }
} }
static int static int SDL_SendKeyboardKeyInternal(Uint8 source, Uint8 state, SDL_Scancode scancode, SDL_Keycode keycode)
SDL_SendKeyboardKeyInternal(Uint8 source, Uint8 state, SDL_Scancode scancode, SDL_Keycode keycode)
{ {
SDL_Keyboard *keyboard = &SDL_keyboard; SDL_Keyboard *keyboard = &SDL_keyboard;
int posted; int posted;
@ -939,8 +931,7 @@ SDL_SendKeyboardKeyInternal(Uint8 source, Uint8 state, SDL_Scancode scancode, SD
return posted; return posted;
} }
int int SDL_SendKeyboardUnicodeKey(Uint32 ch)
SDL_SendKeyboardUnicodeKey(Uint32 ch)
{ {
SDL_Scancode code = SDL_SCANCODE_UNKNOWN; SDL_Scancode code = SDL_SCANCODE_UNKNOWN;
uint16_t mod = 0; uint16_t mod = 0;
@ -966,26 +957,22 @@ SDL_SendKeyboardUnicodeKey(Uint32 ch)
return 0; return 0;
} }
int int SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode)
SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode)
{ {
return SDL_SendKeyboardKeyInternal(KEYBOARD_HARDWARE, state, scancode, SDLK_UNKNOWN); return SDL_SendKeyboardKeyInternal(KEYBOARD_HARDWARE, state, scancode, SDLK_UNKNOWN);
} }
int int SDL_SendKeyboardKeyAndKeycode(Uint8 state, SDL_Scancode scancode, SDL_Keycode keycode)
SDL_SendKeyboardKeyAndKeycode(Uint8 state, SDL_Scancode scancode, SDL_Keycode keycode)
{ {
return SDL_SendKeyboardKeyInternal(KEYBOARD_HARDWARE, state, scancode, keycode); return SDL_SendKeyboardKeyInternal(KEYBOARD_HARDWARE, state, scancode, keycode);
} }
int int SDL_SendKeyboardKeyAutoRelease(SDL_Scancode scancode)
SDL_SendKeyboardKeyAutoRelease(SDL_Scancode scancode)
{ {
return SDL_SendKeyboardKeyInternal(KEYBOARD_AUTORELEASE, SDL_PRESSED, scancode, SDLK_UNKNOWN); return SDL_SendKeyboardKeyInternal(KEYBOARD_AUTORELEASE, SDL_PRESSED, scancode, SDLK_UNKNOWN);
} }
void void SDL_ReleaseAutoReleaseKeys(void)
SDL_ReleaseAutoReleaseKeys(void)
{ {
SDL_Keyboard *keyboard = &SDL_keyboard; SDL_Keyboard *keyboard = &SDL_keyboard;
SDL_Scancode scancode; SDL_Scancode scancode;
@ -1014,8 +1001,7 @@ SDL_HardwareKeyboardKeyPressed(void)
return SDL_FALSE; return SDL_FALSE;
} }
int int SDL_SendKeyboardText(const char *text)
SDL_SendKeyboardText(const char *text)
{ {
SDL_Keyboard *keyboard = &SDL_keyboard; SDL_Keyboard *keyboard = &SDL_keyboard;
int posted; int posted;
@ -1045,8 +1031,7 @@ SDL_SendKeyboardText(const char *text)
return posted; return posted;
} }
int int SDL_SendEditingText(const char *text, int start, int length)
SDL_SendEditingText(const char *text, int start, int length)
{ {
SDL_Keyboard *keyboard = &SDL_keyboard; SDL_Keyboard *keyboard = &SDL_keyboard;
int posted; int posted;
@ -1076,8 +1061,7 @@ SDL_SendEditingText(const char *text, int start, int length)
return posted; return posted;
} }
void void SDL_KeyboardQuit(void)
SDL_KeyboardQuit(void)
{ {
} }
@ -1100,8 +1084,7 @@ SDL_GetModState(void)
return (SDL_Keymod)keyboard->modstate; return (SDL_Keymod)keyboard->modstate;
} }
void void SDL_SetModState(SDL_Keymod modstate)
SDL_SetModState(SDL_Keymod modstate)
{ {
SDL_Keyboard *keyboard = &SDL_keyboard; SDL_Keyboard *keyboard = &SDL_keyboard;
@ -1109,8 +1092,7 @@ SDL_SetModState(SDL_Keymod modstate)
} }
/* Note that SDL_ToggleModState() is not a public API. SDL_SetModState() is. */ /* Note that SDL_ToggleModState() is not a public API. SDL_SetModState() is. */
void void SDL_ToggleModState(const SDL_Keymod modstate, const SDL_bool toggle)
SDL_ToggleModState(const SDL_Keymod modstate, const SDL_bool toggle)
{ {
SDL_Keyboard *keyboard = &SDL_keyboard; SDL_Keyboard *keyboard = &SDL_keyboard;
if (toggle) { if (toggle) {
@ -1120,7 +1102,6 @@ SDL_ToggleModState(const SDL_Keymod modstate, const SDL_bool toggle)
} }
} }
SDL_Keycode SDL_Keycode
SDL_GetKeyFromScancode(SDL_Scancode scancode) SDL_GetKeyFromScancode(SDL_Scancode scancode)
{ {

View File

@ -23,7 +23,6 @@
#ifndef SDL_keyboard_c_h_ #ifndef SDL_keyboard_c_h_
#define SDL_keyboard_c_h_ #define SDL_keyboard_c_h_
/* Initialize the keyboard subsystem */ /* Initialize the keyboard subsystem */
extern int SDL_KeyboardInit(void); extern int SDL_KeyboardInit(void);

Some files were not shown because too many files have changed in this diff Show More