mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-10-26 12:27:44 +00:00 
			
		
		
		
	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
(cherry picked from commit 5750bcb174)
			
			
This commit is contained in:
		| @@ -16,8 +16,8 @@ AllowShortFunctionsOnASingleLine: All | ||||
| AllowShortIfStatementsOnASingleLine: Never | ||||
| AllowShortLoopsOnASingleLine: false | ||||
|  | ||||
| AlwaysBreakAfterDefinitionReturnType: All | ||||
| AlwaysBreakAfterReturnType: AllDefinitions | ||||
| AlwaysBreakAfterDefinitionReturnType: None | ||||
| AlwaysBreakAfterReturnType: None | ||||
| AlwaysBreakBeforeMultilineStrings: false | ||||
| AlwaysBreakTemplateDeclarations: MultiLine | ||||
|  | ||||
| @@ -35,7 +35,7 @@ BraceWrapping: | ||||
|   AfterUnion: true | ||||
|   AfterExternBlock: false | ||||
|   BeforeElse: false | ||||
|   BeforeWhile: true | ||||
|   BeforeWhile: false | ||||
|   IndentBraces: false | ||||
|   SplitEmptyFunction: true | ||||
|   SplitEmptyRecord: true | ||||
| @@ -48,7 +48,7 @@ IncludeBlocks: Preserve | ||||
| # clang-format version 4.0 through 12.0: | ||||
| #SortIncludes: false | ||||
| # clang-format version 13.0+: | ||||
| #SortIncludes: Never | ||||
| SortIncludes: Never | ||||
|  | ||||
| # No length limit, in case it breaks macros, you can | ||||
| # disable it with /* clang-format off/on */ comments | ||||
| @@ -62,7 +62,8 @@ IndentGotoLabels: true | ||||
| IndentPPDirectives: None | ||||
| IndentExternBlock: NoIndent | ||||
|  | ||||
| SpaceAfterCStyleCast: true | ||||
| PointerAlignment: Right | ||||
| SpaceAfterCStyleCast: false | ||||
| SpacesInCStyleCastParentheses: false | ||||
| SpacesInConditionalStatement: false | ||||
| SpacesInContainerLiterals: true | ||||
|   | ||||
							
								
								
									
										32
									
								
								build-scripts/clang-format-src.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										32
									
								
								build-scripts/clang-format-src.sh
									
									
									
									
									
										Executable 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!" | ||||
							
								
								
									
										57
									
								
								src/SDL.c
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								src/SDL.c
									
									
									
									
									
								
							| @@ -55,7 +55,7 @@ | ||||
|  | ||||
| /* Initialization/Cleanup routines */ | ||||
| #if !SDL_TIMERS_DISABLED | ||||
| # include "timer/SDL_timer_c.h" | ||||
| #include "timer/SDL_timer_c.h" | ||||
| #endif | ||||
| #if SDL_VIDEO_DRIVER_WINDOWS | ||||
| extern int SDL_HelperWindowCreate(void); | ||||
| @@ -98,8 +98,8 @@ SDL_NORETURN void SDL_ExitProcess(int exitcode) | ||||
|        ExitProcess here that will never be reached but make MingW happy. */ | ||||
|     ExitProcess(exitcode); | ||||
| #elif defined(__EMSCRIPTEN__) | ||||
|     emscripten_cancel_main_loop();  /* this should "kill" the app. */ | ||||
|     emscripten_force_exit(exitcode);  /* this should "kill" the app. */ | ||||
|     emscripten_cancel_main_loop();   /* this should "kill" the app. */ | ||||
|     emscripten_force_exit(exitcode); /* this should "kill" the app. */ | ||||
|     exit(exitcode); | ||||
| #elif defined(__HAIKU__)  /* Haiku has _Exit, but it's not marked noreturn. */ | ||||
|     _exit(exitcode); | ||||
| @@ -110,7 +110,6 @@ SDL_NORETURN void SDL_ExitProcess(int exitcode) | ||||
| #endif | ||||
| } | ||||
|  | ||||
|  | ||||
| /* The initialized subsystems */ | ||||
| #ifdef SDL_MAIN_NEEDED | ||||
| static SDL_bool SDL_MainIsReady = SDL_FALSE; | ||||
| @@ -118,11 +117,10 @@ static SDL_bool SDL_MainIsReady = SDL_FALSE; | ||||
| static SDL_bool SDL_MainIsReady = SDL_TRUE; | ||||
| #endif | ||||
| 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. */ | ||||
| static void | ||||
| SDL_PrivateSubsystemRefCountIncr(Uint32 subsystem) | ||||
| static void SDL_PrivateSubsystemRefCountIncr(Uint32 subsystem) | ||||
| { | ||||
|     const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); | ||||
|     SDL_assert((subsystem_index < 0) || (SDL_SubsystemRefCount[subsystem_index] < 255)); | ||||
| @@ -132,8 +130,7 @@ SDL_PrivateSubsystemRefCountIncr(Uint32 subsystem) | ||||
| } | ||||
|  | ||||
| /* Private helper to decrement a subsystem's ref counter. */ | ||||
| static void | ||||
| SDL_PrivateSubsystemRefCountDecr(Uint32 subsystem) | ||||
| static void SDL_PrivateSubsystemRefCountDecr(Uint32 subsystem) | ||||
| { | ||||
|     const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); | ||||
|     if ((subsystem_index >= 0) && (SDL_SubsystemRefCount[subsystem_index] > 0)) { | ||||
| @@ -142,8 +139,7 @@ SDL_PrivateSubsystemRefCountDecr(Uint32 subsystem) | ||||
| } | ||||
|  | ||||
| /* Private helper to check if a system needs init. */ | ||||
| static SDL_bool | ||||
| SDL_PrivateShouldInitSubsystem(Uint32 subsystem) | ||||
| static SDL_bool SDL_PrivateShouldInitSubsystem(Uint32 subsystem) | ||||
| { | ||||
|     const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); | ||||
|     SDL_assert((subsystem_index < 0) || (SDL_SubsystemRefCount[subsystem_index] < 255)); | ||||
| @@ -151,8 +147,8 @@ SDL_PrivateShouldInitSubsystem(Uint32 subsystem) | ||||
| } | ||||
|  | ||||
| /* Private helper to check if a system needs to be quit. */ | ||||
| static SDL_bool | ||||
| SDL_PrivateShouldQuitSubsystem(Uint32 subsystem) { | ||||
| static SDL_bool SDL_PrivateShouldQuitSubsystem(Uint32 subsystem) | ||||
| { | ||||
|     const int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); | ||||
|     if ((subsystem_index >= 0) && (SDL_SubsystemRefCount[subsystem_index] == 0)) { | ||||
|         return SDL_FALSE; | ||||
| @@ -164,14 +160,12 @@ SDL_PrivateShouldQuitSubsystem(Uint32 subsystem) { | ||||
|     return (((subsystem_index >= 0) && (SDL_SubsystemRefCount[subsystem_index] == 1)) || SDL_bInMainQuit) ? SDL_TRUE : SDL_FALSE; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_SetMainReady(void) | ||||
| void SDL_SetMainReady(void) | ||||
| { | ||||
|     SDL_MainIsReady = SDL_TRUE; | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_InitSubSystem(Uint32 flags) | ||||
| int SDL_InitSubSystem(Uint32 flags) | ||||
| { | ||||
|     Uint32 flags_initialized = 0; | ||||
|  | ||||
| @@ -193,7 +187,7 @@ SDL_InitSubSystem(Uint32 flags) | ||||
|         flags |= SDL_INIT_JOYSTICK; | ||||
|     } | ||||
|  | ||||
|     if ((flags & (SDL_INIT_VIDEO|SDL_INIT_JOYSTICK|SDL_INIT_AUDIO))) { | ||||
|     if ((flags & (SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO))) { | ||||
|         /* video or joystick or audio implies events */ | ||||
|         flags |= SDL_INIT_EVENTS; | ||||
|     } | ||||
| @@ -203,7 +197,7 @@ SDL_InitSubSystem(Uint32 flags) | ||||
| #endif | ||||
|  | ||||
| #if SDL_VIDEO_DRIVER_WINDOWS | ||||
|     if ((flags & (SDL_INIT_HAPTIC|SDL_INIT_JOYSTICK))) { | ||||
|     if ((flags & (SDL_INIT_HAPTIC | SDL_INIT_JOYSTICK))) { | ||||
|         if (SDL_HelperWindowCreate() < 0) { | ||||
|             goto quit_and_error; | ||||
|         } | ||||
| @@ -282,9 +276,9 @@ SDL_InitSubSystem(Uint32 flags) | ||||
|     if ((flags & SDL_INIT_JOYSTICK)) { | ||||
| #if !SDL_JOYSTICK_DISABLED | ||||
|         if (SDL_PrivateShouldInitSubsystem(SDL_INIT_JOYSTICK)) { | ||||
|            if (SDL_JoystickInit() < 0) { | ||||
|                goto quit_and_error; | ||||
|            } | ||||
|             if (SDL_JoystickInit() < 0) { | ||||
|                 goto quit_and_error; | ||||
|             } | ||||
|         } | ||||
|         SDL_PrivateSubsystemRefCountIncr(SDL_INIT_JOYSTICK); | ||||
|         flags_initialized |= SDL_INIT_JOYSTICK; | ||||
| @@ -341,7 +335,7 @@ SDL_InitSubSystem(Uint32 flags) | ||||
| #endif | ||||
|     } | ||||
|  | ||||
|     (void) flags_initialized;  /* make static analysis happy, since this only gets used in error cases. */ | ||||
|     (void)flags_initialized; /* make static analysis happy, since this only gets used in error cases. */ | ||||
|  | ||||
|     return 0; | ||||
|  | ||||
| @@ -350,14 +344,12 @@ quit_and_error: | ||||
|     return -1; | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_Init(Uint32 flags) | ||||
| int SDL_Init(Uint32 flags) | ||||
| { | ||||
|     return SDL_InitSubSystem(flags); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_QuitSubSystem(Uint32 flags) | ||||
| void SDL_QuitSubSystem(Uint32 flags) | ||||
| { | ||||
| #if defined(__OS2__) | ||||
| #if SDL_THREAD_OS2 | ||||
| @@ -481,8 +473,7 @@ SDL_WasInit(Uint32 flags) | ||||
|     return initialized; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_Quit(void) | ||||
| void SDL_Quit(void) | ||||
| { | ||||
|     SDL_bInMainQuit = SDL_TRUE; | ||||
|  | ||||
| @@ -508,7 +499,7 @@ SDL_Quit(void) | ||||
|     /* Now that every subsystem has been quit, we reset the subsystem refcount | ||||
|      * and the list of initialized subsystems. | ||||
|      */ | ||||
|     SDL_memset( SDL_SubsystemRefCount, 0x0, sizeof(SDL_SubsystemRefCount) ); | ||||
|     SDL_memset(SDL_SubsystemRefCount, 0x0, sizeof(SDL_SubsystemRefCount)); | ||||
|  | ||||
|     SDL_TLSCleanup(); | ||||
|  | ||||
| @@ -516,13 +507,13 @@ SDL_Quit(void) | ||||
| } | ||||
|  | ||||
| /* Get the library version number */ | ||||
| void | ||||
| SDL_GetVersion(SDL_version * ver) | ||||
| void SDL_GetVersion(SDL_version *ver) | ||||
| { | ||||
|     static SDL_bool check_hint = SDL_TRUE; | ||||
|     static SDL_bool legacy_version = SDL_FALSE; | ||||
|  | ||||
|     if (ver == NULL) {        return; | ||||
|     if (ver == NULL) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     SDL_VERSION(ver); | ||||
|   | ||||
							
								
								
									
										106
									
								
								src/SDL_assert.c
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								src/SDL_assert.c
									
									
									
									
									
								
							| @@ -48,8 +48,7 @@ | ||||
| /* The size of the stack buffer to use for rendering assert messages. */ | ||||
| #define SDL_MAX_ASSERT_MESSAGE_STACK 256 | ||||
|  | ||||
| static SDL_assert_state SDLCALL | ||||
| SDL_PromptAssertion(const SDL_assert_data *data, void *userdata); | ||||
| static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data, void *userdata); | ||||
|  | ||||
| /* | ||||
|  * We keep all triggered assertions in a singly-linked list so we can | ||||
| @@ -65,12 +64,10 @@ static SDL_AssertionHandler assertion_handler = SDL_PromptAssertion; | ||||
| static void *assertion_userdata = NULL; | ||||
|  | ||||
| #ifdef __GNUC__ | ||||
| static void | ||||
| debug_print(const char *fmt, ...) __attribute__((format (printf, 1, 2))); | ||||
| static void debug_print(const char *fmt, ...) __attribute__((format(printf, 1, 2))); | ||||
| #endif | ||||
|  | ||||
| static void | ||||
| debug_print(const char *fmt, ...) | ||||
| static void debug_print(const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|     va_start(ap, fmt); | ||||
| @@ -78,31 +75,30 @@ debug_print(const char *fmt, ...) | ||||
|     va_end(ap); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void SDL_AddAssertionToReport(SDL_assert_data *data) | ||||
| { | ||||
|     /* (data) is always a static struct defined with the assert macros, so | ||||
|        we don't have to worry about copying or allocating them. */ | ||||
|     data->trigger_count++; | ||||
|     if (data->trigger_count == 1) {  /* not yet added? */ | ||||
|     if (data->trigger_count == 1) { /* not yet added? */ | ||||
|         data->next = triggered_assertions; | ||||
|         triggered_assertions = data; | ||||
|     } | ||||
| } | ||||
|  | ||||
| #if defined(__WIN32__) || defined(__GDK__) | ||||
|     #define ENDLINE "\r\n" | ||||
| #define ENDLINE "\r\n" | ||||
| #else | ||||
|     #define ENDLINE "\n" | ||||
| #define ENDLINE "\n" | ||||
| #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, | ||||
|         "Assertion failure at %s (%s:%d), triggered %u %s:" ENDLINE "  '%s'", | ||||
|         data->function, data->filename, data->linenum, | ||||
|         data->trigger_count, (data->trigger_count == 1) ? "time" : "times", | ||||
|         data->condition | ||||
|     ); | ||||
|                         "Assertion failure at %s (%s:%d), triggered %u %s:" ENDLINE "  '%s'", | ||||
|                         data->function, data->filename, data->linenum, | ||||
|                         data->trigger_count, (data->trigger_count == 1) ? "time" : "times", | ||||
|                         data->condition); | ||||
| } | ||||
|  | ||||
| static void SDL_GenerateAssertionReport(void) | ||||
| @@ -132,7 +128,6 @@ static void SDL_GenerateAssertionReport(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| /* 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 | ||||
|     extremely good reason. */ | ||||
| @@ -142,9 +137,8 @@ extern void SDL_ExitProcess(int exitcode); | ||||
| #endif | ||||
| extern SDL_NORETURN void SDL_ExitProcess(int exitcode); | ||||
|  | ||||
|  | ||||
| #if defined(__WATCOMC__) | ||||
| static void SDL_AbortAssertion (void); | ||||
| static void SDL_AbortAssertion(void); | ||||
| #pragma aux SDL_AbortAssertion aborts; | ||||
| #endif | ||||
| static SDL_NORETURN void SDL_AbortAssertion(void) | ||||
| @@ -153,21 +147,20 @@ static SDL_NORETURN void SDL_AbortAssertion(void) | ||||
|     SDL_ExitProcess(42); | ||||
| } | ||||
|  | ||||
| static SDL_assert_state SDLCALL | ||||
| SDL_PromptAssertion(const SDL_assert_data *data, void *userdata) | ||||
| static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data, void *userdata) | ||||
| { | ||||
|     const char *envr; | ||||
|     SDL_assert_state state = SDL_ASSERTION_ABORT; | ||||
|     SDL_Window *window; | ||||
|     SDL_MessageBoxData messagebox; | ||||
|     SDL_MessageBoxButtonData buttons[] = { | ||||
|         {   0,  SDL_ASSERTION_RETRY,            "Retry" }, | ||||
|         {   0,  SDL_ASSERTION_BREAK,            "Break" }, | ||||
|         {   0,  SDL_ASSERTION_ABORT,            "Abort" }, | ||||
|         {   SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, | ||||
|                 SDL_ASSERTION_IGNORE,           "Ignore" }, | ||||
|         {   SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, | ||||
|                 SDL_ASSERTION_ALWAYS_IGNORE,    "Always Ignore" } | ||||
|         { 0, SDL_ASSERTION_RETRY, "Retry" }, | ||||
|         { 0, SDL_ASSERTION_BREAK, "Break" }, | ||||
|         { 0, SDL_ASSERTION_ABORT, "Abort" }, | ||||
|         { SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, | ||||
|           SDL_ASSERTION_IGNORE, "Ignore" }, | ||||
|         { SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, | ||||
|           SDL_ASSERTION_ALWAYS_IGNORE, "Always Ignore" } | ||||
|     }; | ||||
|     int selected; | ||||
|  | ||||
| @@ -176,7 +169,7 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata) | ||||
|     size_t buf_len = sizeof(stack_buf); | ||||
|     int len; | ||||
|  | ||||
|     (void) userdata;  /* unused in default handler. */ | ||||
|     (void)userdata; /* unused in default handler. */ | ||||
|  | ||||
|     /* Assume the output will fit... */ | ||||
|     len = SDL_RenderAssertMessage(message, buf_len, data); | ||||
| @@ -221,7 +214,7 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata) | ||||
|         } else if (SDL_strcmp(envr, "always_ignore") == 0) { | ||||
|             return SDL_ASSERTION_ALWAYS_IGNORE; | ||||
|         } else { | ||||
|             return SDL_ASSERTION_ABORT;  /* oh well. */ | ||||
|             return SDL_ASSERTION_ABORT; /* oh well. */ | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -255,8 +248,9 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata) | ||||
|     } else { | ||||
| #if defined(__EMSCRIPTEN__) | ||||
|         /* This is nasty, but we can't block on a custom UI. */ | ||||
|         for ( ; ; ) { | ||||
|         for (;;) { | ||||
|             SDL_bool okay = SDL_TRUE; | ||||
|             /* *INDENT-OFF* */ /* clang-format off */ | ||||
|             char *buf = (char *) EM_ASM_INT({ | ||||
|                 var str = | ||||
|                     UTF8ToString($0) + '\n\n' + | ||||
| @@ -267,12 +261,14 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata) | ||||
|                 } | ||||
|                 return allocate(intArrayFromString(reply), 'i8', ALLOC_NORMAL); | ||||
|             }, message); | ||||
|             /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
|             if (SDL_strcmp(buf, "a") == 0) { | ||||
|                 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) { | ||||
|                 state = SDL_ASSERTION_BREAK; */ | ||||
|                 state = SDL_ASSERTION_BREAK; | ||||
| #endif | ||||
|             } else if (SDL_strcmp(buf, "r") == 0) { | ||||
|                 state = SDL_ASSERTION_RETRY; | ||||
|             } else if (SDL_strcmp(buf, "i") == 0) { | ||||
| @@ -290,11 +286,11 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata) | ||||
|         } | ||||
| #elif defined(HAVE_STDIO_H) | ||||
|         /* this is a little hacky. */ | ||||
|         for ( ; ; ) { | ||||
|         for (;;) { | ||||
|             char buf[32]; | ||||
|             fprintf(stderr, "Abort/Break/Retry/Ignore/AlwaysIgnore? [abriA] : "); | ||||
|             fflush(stderr); | ||||
|             if (fgets(buf, sizeof (buf), stdin) == NULL) { | ||||
|             if (fgets(buf, sizeof(buf), stdin) == NULL) { | ||||
|                 break; | ||||
|             } | ||||
|  | ||||
| @@ -330,7 +326,6 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata) | ||||
|     return state; | ||||
| } | ||||
|  | ||||
|  | ||||
| SDL_assert_state | ||||
| SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file, | ||||
|                     int line) | ||||
| @@ -345,13 +340,13 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file, | ||||
|         assertion_mutex = SDL_CreateMutex(); | ||||
|         if (assertion_mutex == NULL) { | ||||
|             SDL_AtomicUnlock(&spinlock); | ||||
|             return SDL_ASSERTION_IGNORE;   /* oh well, I guess. */ | ||||
|             return SDL_ASSERTION_IGNORE; /* oh well, I guess. */ | ||||
|         } | ||||
|     } | ||||
|     SDL_AtomicUnlock(&spinlock); | ||||
|  | ||||
|     if (SDL_LockMutex(assertion_mutex) < 0) { | ||||
|         return SDL_ASSERTION_IGNORE;   /* oh well, I guess. */ | ||||
|         return SDL_ASSERTION_IGNORE; /* oh well, I guess. */ | ||||
|     } | ||||
| #endif | ||||
|  | ||||
| @@ -365,13 +360,14 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file, | ||||
|     SDL_AddAssertionToReport(data); | ||||
|  | ||||
|     assertion_running++; | ||||
|     if (assertion_running > 1) {   /* assert during assert! Abort. */ | ||||
|     if (assertion_running > 1) { /* assert during assert! Abort. */ | ||||
|         if (assertion_running == 2) { | ||||
|             SDL_AbortAssertion(); | ||||
|         } else if (assertion_running == 3) {  /* Abort asserted! */ | ||||
|         } else if (assertion_running == 3) { /* Abort asserted! */ | ||||
|             SDL_ExitProcess(42); | ||||
|         } else { | ||||
|             while (1) { /* do nothing but spin; what else can you do?! */ } | ||||
|             while (1) { /* do nothing but spin; what else can you do?! */ | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -379,21 +375,20 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file, | ||||
|         state = assertion_handler(data, assertion_userdata); | ||||
|     } | ||||
|  | ||||
|     switch (state) | ||||
|     { | ||||
|         case SDL_ASSERTION_ALWAYS_IGNORE: | ||||
|             state = SDL_ASSERTION_IGNORE; | ||||
|             data->always_ignore = 1; | ||||
|             break; | ||||
|     switch (state) { | ||||
|     case SDL_ASSERTION_ALWAYS_IGNORE: | ||||
|         state = SDL_ASSERTION_IGNORE; | ||||
|         data->always_ignore = 1; | ||||
|         break; | ||||
|  | ||||
|         case SDL_ASSERTION_IGNORE: | ||||
|         case SDL_ASSERTION_RETRY: | ||||
|         case SDL_ASSERTION_BREAK: | ||||
|             break;  /* macro handles these. */ | ||||
|     case SDL_ASSERTION_IGNORE: | ||||
|     case SDL_ASSERTION_RETRY: | ||||
|     case SDL_ASSERTION_BREAK: | ||||
|         break; /* macro handles these. */ | ||||
|  | ||||
|         case SDL_ASSERTION_ABORT: | ||||
|             SDL_AbortAssertion(); | ||||
|             /*break;  ...shouldn't return, but oh well. */ | ||||
|     case SDL_ASSERTION_ABORT: | ||||
|         SDL_AbortAssertion(); | ||||
|         /*break;  ...shouldn't return, but oh well. */ | ||||
|     } | ||||
|  | ||||
|     assertion_running--; | ||||
| @@ -405,7 +400,6 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file, | ||||
|     return state; | ||||
| } | ||||
|  | ||||
|  | ||||
| void SDL_AssertionsQuit(void) | ||||
| { | ||||
| #if SDL_ASSERT_LEVEL > 0 | ||||
| @@ -440,7 +434,7 @@ void SDL_ResetAssertionReport(void) | ||||
|     SDL_assert_data *next = NULL; | ||||
|     SDL_assert_data *item; | ||||
|     for (item = triggered_assertions; item != NULL; item = next) { | ||||
|         next = (SDL_assert_data *) item->next; | ||||
|         next = (SDL_assert_data *)item->next; | ||||
|         item->always_ignore = SDL_FALSE; | ||||
|         item->trigger_count = 0; | ||||
|         item->next = NULL; | ||||
|   | ||||
| @@ -25,10 +25,10 @@ | ||||
|  | ||||
| typedef struct SDL_DataQueuePacket | ||||
| { | ||||
|     size_t datalen;  /* bytes currently in use in this packet. */ | ||||
|     size_t startpos;  /* bytes currently consumed in this packet. */ | ||||
|     struct SDL_DataQueuePacket *next;  /* next item in linked list. */ | ||||
|     Uint8 data[SDL_VARIABLE_LENGTH_ARRAY];  /* packet data */ | ||||
|     size_t datalen;                        /* bytes currently in use in this packet. */ | ||||
|     size_t startpos;                       /* bytes currently consumed in this packet. */ | ||||
|     struct SDL_DataQueuePacket *next;      /* next item in linked list. */ | ||||
|     Uint8 data[SDL_VARIABLE_LENGTH_ARRAY]; /* packet data */ | ||||
| } SDL_DataQueuePacket; | ||||
|  | ||||
| struct SDL_DataQueue | ||||
| @@ -36,12 +36,11 @@ struct SDL_DataQueue | ||||
|     SDL_DataQueuePacket *head; /* device fed from here. */ | ||||
|     SDL_DataQueuePacket *tail; /* queue fills to here. */ | ||||
|     SDL_DataQueuePacket *pool; /* these are unused packets. */ | ||||
|     size_t packet_size;   /* size of new packets */ | ||||
|     size_t queued_bytes;  /* number of bytes of data in the queue. */ | ||||
|     size_t packet_size;        /* size of new packets */ | ||||
|     size_t queued_bytes;       /* number of bytes of data in the queue. */ | ||||
| }; | ||||
|  | ||||
| static void | ||||
| SDL_FreeDataQueueList(SDL_DataQueuePacket *packet) | ||||
| static void SDL_FreeDataQueueList(SDL_DataQueuePacket *packet) | ||||
| { | ||||
|     while (packet) { | ||||
|         SDL_DataQueuePacket *next = packet->next; | ||||
| @@ -50,13 +49,12 @@ SDL_FreeDataQueueList(SDL_DataQueuePacket *packet) | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| /* this all expects that you managed thread safety elsewhere. */ | ||||
|  | ||||
| SDL_DataQueue * | ||||
| SDL_NewDataQueue(const size_t _packetlen, const size_t initialslack) | ||||
| { | ||||
|     SDL_DataQueue *queue = (SDL_DataQueue *) SDL_malloc(sizeof (SDL_DataQueue)); | ||||
|     SDL_DataQueue *queue = (SDL_DataQueue *)SDL_malloc(sizeof(SDL_DataQueue)); | ||||
|  | ||||
|     if (queue == NULL) { | ||||
|         SDL_OutOfMemory(); | ||||
| @@ -70,7 +68,7 @@ SDL_NewDataQueue(const size_t _packetlen, const size_t initialslack) | ||||
|         queue->packet_size = packetlen; | ||||
|  | ||||
|         for (i = 0; i < wantpackets; i++) { | ||||
|             SDL_DataQueuePacket *packet = (SDL_DataQueuePacket *) SDL_malloc(sizeof (SDL_DataQueuePacket) + packetlen); | ||||
|             SDL_DataQueuePacket *packet = (SDL_DataQueuePacket *)SDL_malloc(sizeof(SDL_DataQueuePacket) + packetlen); | ||||
|             if (packet) { /* don't care if this fails, we'll deal later. */ | ||||
|                 packet->datalen = 0; | ||||
|                 packet->startpos = 0; | ||||
| @@ -83,8 +81,7 @@ SDL_NewDataQueue(const size_t _packetlen, const size_t initialslack) | ||||
|     return queue; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_FreeDataQueue(SDL_DataQueue *queue) | ||||
| void SDL_FreeDataQueue(SDL_DataQueue *queue) | ||||
| { | ||||
|     if (queue) { | ||||
|         SDL_FreeDataQueueList(queue->head); | ||||
| @@ -93,11 +90,10 @@ SDL_FreeDataQueue(SDL_DataQueue *queue) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_ClearDataQueue(SDL_DataQueue *queue, const size_t slack) | ||||
| void SDL_ClearDataQueue(SDL_DataQueue *queue, const size_t slack) | ||||
| { | ||||
|     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; | ||||
|     SDL_DataQueuePacket *packet; | ||||
|     SDL_DataQueuePacket *prev = NULL; | ||||
|     size_t i; | ||||
| @@ -133,11 +129,10 @@ SDL_ClearDataQueue(SDL_DataQueue *queue, const size_t slack) | ||||
|         queue->pool = NULL; | ||||
|     } | ||||
|  | ||||
|     SDL_FreeDataQueueList(packet);  /* free extra packets */ | ||||
|     SDL_FreeDataQueueList(packet); /* free extra packets */ | ||||
| } | ||||
|  | ||||
| static SDL_DataQueuePacket * | ||||
| AllocateDataQueuePacket(SDL_DataQueue *queue) | ||||
| static SDL_DataQueuePacket *AllocateDataQueuePacket(SDL_DataQueue *queue) | ||||
| { | ||||
|     SDL_DataQueuePacket *packet; | ||||
|  | ||||
| @@ -149,7 +144,7 @@ AllocateDataQueuePacket(SDL_DataQueue *queue) | ||||
|         queue->pool = packet->next; | ||||
|     } else { | ||||
|         /* Have to allocate a new one! */ | ||||
|         packet = (SDL_DataQueuePacket *) SDL_malloc(sizeof (SDL_DataQueuePacket) + queue->packet_size); | ||||
|         packet = (SDL_DataQueuePacket *)SDL_malloc(sizeof(SDL_DataQueuePacket) + queue->packet_size); | ||||
|         if (packet == NULL) { | ||||
|             return NULL; | ||||
|         } | ||||
| @@ -169,12 +164,10 @@ AllocateDataQueuePacket(SDL_DataQueue *queue) | ||||
|     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; | ||||
|     const Uint8 *data = (const Uint8 *) _data; | ||||
|     const Uint8 *data = (const Uint8 *)_data; | ||||
|     const size_t packet_size = queue ? queue->packet_size : 0; | ||||
|     SDL_DataQueuePacket *orighead; | ||||
|     SDL_DataQueuePacket *origtail; | ||||
| @@ -198,9 +191,9 @@ SDL_WriteToDataQueue(SDL_DataQueue *queue, const void *_data, const size_t _len) | ||||
|             if (packet == NULL) { | ||||
|                 /* uhoh, reset so we've queued nothing new, free what we can. */ | ||||
|                 if (origtail == NULL) { | ||||
|                     packet = queue->head;  /* whole queue. */ | ||||
|                     packet = queue->head; /* whole queue. */ | ||||
|                 } else { | ||||
|                     packet = origtail->next;  /* what we added to existing queue. */ | ||||
|                     packet = origtail->next; /* what we added to existing queue. */ | ||||
|                     origtail->next = NULL; | ||||
|                     origtail->datalen = origlen; | ||||
|                 } | ||||
| @@ -208,7 +201,7 @@ SDL_WriteToDataQueue(SDL_DataQueue *queue, const void *_data, const size_t _len) | ||||
|                 queue->tail = origtail; | ||||
|                 queue->pool = NULL; | ||||
|  | ||||
|                 SDL_FreeDataQueueList(packet);  /* give back what we can. */ | ||||
|                 SDL_FreeDataQueueList(packet); /* give back what we can. */ | ||||
|                 return SDL_OutOfMemory(); | ||||
|             } | ||||
|         } | ||||
| @@ -228,7 +221,7 @@ size_t | ||||
| SDL_PeekIntoDataQueue(SDL_DataQueue *queue, void *_buf, const size_t _len) | ||||
| { | ||||
|     size_t len = _len; | ||||
|     Uint8 *buf = (Uint8 *) _buf; | ||||
|     Uint8 *buf = (Uint8 *)_buf; | ||||
|     Uint8 *ptr = buf; | ||||
|     SDL_DataQueuePacket *packet; | ||||
|  | ||||
| @@ -246,14 +239,14 @@ SDL_PeekIntoDataQueue(SDL_DataQueue *queue, void *_buf, const size_t _len) | ||||
|         len -= cpy; | ||||
|     } | ||||
|  | ||||
|     return (size_t) (ptr - buf); | ||||
|     return (size_t)(ptr - buf); | ||||
| } | ||||
|  | ||||
| size_t | ||||
| SDL_ReadFromDataQueue(SDL_DataQueue *queue, void *_buf, const size_t _len) | ||||
| { | ||||
|     size_t len = _len; | ||||
|     Uint8 *buf = (Uint8 *) _buf; | ||||
|     Uint8 *buf = (Uint8 *)_buf; | ||||
|     Uint8 *ptr = buf; | ||||
|     SDL_DataQueuePacket *packet; | ||||
|  | ||||
| @@ -272,7 +265,7 @@ SDL_ReadFromDataQueue(SDL_DataQueue *queue, void *_buf, const size_t _len) | ||||
|         queue->queued_bytes -= cpy; | ||||
|         len -= cpy; | ||||
|  | ||||
|         if (packet->startpos == packet->datalen) {  /* packet is done, put it in the pool. */ | ||||
|         if (packet->startpos == packet->datalen) { /* packet is done, put it in the pool. */ | ||||
|             queue->head = packet->next; | ||||
|             SDL_assert((packet->next != NULL) || (packet == queue->tail)); | ||||
|             packet->next = queue->pool; | ||||
| @@ -283,10 +276,10 @@ SDL_ReadFromDataQueue(SDL_DataQueue *queue, void *_buf, const size_t _len) | ||||
|     SDL_assert((queue->head != NULL) == (queue->queued_bytes != 0)); | ||||
|  | ||||
|     if (queue->head == NULL) { | ||||
|         queue->tail = NULL;  /* in case we drained the queue entirely. */ | ||||
|         queue->tail = NULL; /* in case we drained the queue entirely. */ | ||||
|     } | ||||
|  | ||||
|     return (size_t) (ptr - buf); | ||||
|     return (size_t)(ptr - buf); | ||||
| } | ||||
|  | ||||
| size_t | ||||
| @@ -314,7 +307,7 @@ SDL_ReserveSpaceInDataQueue(SDL_DataQueue *queue, const size_t len) | ||||
|     packet = queue->head; | ||||
|     if (packet) { | ||||
|         const size_t avail = queue->packet_size - packet->datalen; | ||||
|         if (len <= avail) {  /* we can use the space at end of this packet. */ | ||||
|         if (len <= avail) { /* we can use the space at end of this packet. */ | ||||
|             void *retval = packet->data + packet->datalen; | ||||
|             packet->datalen += len; | ||||
|             queue->queued_bytes += len; | ||||
| @@ -335,4 +328,3 @@ SDL_ReserveSpaceInDataQueue(SDL_DataQueue *queue, const size_t len) | ||||
| } | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|  | ||||
|   | ||||
| @@ -52,4 +52,3 @@ void *SDL_ReserveSpaceInDataQueue(SDL_DataQueue *queue, const size_t len); | ||||
| #endif /* SDL_dataqueue_h_ */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|  | ||||
|   | ||||
| @@ -25,8 +25,7 @@ | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_error_c.h" | ||||
|  | ||||
| int | ||||
| SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| int SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| { | ||||
|     /* Ignore call if invalid format pointer was passed */ | ||||
|     if (fmt != NULL) { | ||||
| @@ -34,7 +33,7 @@ SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
|         int result; | ||||
|         SDL_error *error = SDL_GetErrBuf(); | ||||
|  | ||||
|         error->error = 1;  /* mark error as valid */ | ||||
|         error->error = 1; /* mark error as valid */ | ||||
|  | ||||
|         va_start(ap, fmt); | ||||
|         result = SDL_vsnprintf(error->str, error->len, fmt, ap); | ||||
| @@ -52,7 +51,6 @@ SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
|             } | ||||
|         } | ||||
|  | ||||
|  | ||||
|         if (SDL_LogGetPriority(SDL_LOG_CATEGORY_ERROR) <= SDL_LOG_PRIORITY_DEBUG) { | ||||
|             /* If we are in debug mode, print out the error message */ | ||||
|             SDL_LogDebug(SDL_LOG_CATEGORY_ERROR, "%s", error->str); | ||||
| @@ -70,15 +68,13 @@ SDL_GetError(void) | ||||
|     return error->error ? error->str : ""; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_ClearError(void) | ||||
| void SDL_ClearError(void) | ||||
| { | ||||
|     SDL_GetErrBuf()->error = 0; | ||||
| } | ||||
|  | ||||
| /* Very common errors go here */ | ||||
| int | ||||
| SDL_Error(SDL_errorcode code) | ||||
| int SDL_Error(SDL_errorcode code) | ||||
| { | ||||
|     switch (code) { | ||||
|     case SDL_ENOMEM: | ||||
| @@ -97,8 +93,7 @@ SDL_Error(SDL_errorcode code) | ||||
| } | ||||
|  | ||||
| #ifdef TEST_ERROR | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|     char buffer[BUFSIZ + 1]; | ||||
|  | ||||
| @@ -113,7 +108,6 @@ main(int argc, char *argv[]) | ||||
| } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| char * | ||||
| SDL_GetErrorMsg(char *errstr, int maxlen) | ||||
| { | ||||
|   | ||||
| @@ -33,7 +33,7 @@ void SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID) | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     for (i = 0; i < sizeof(guid.data) && i < (cbGUID-1)/2; i++) { | ||||
|     for (i = 0; i < sizeof(guid.data) && i < (cbGUID - 1) / 2; i++) { | ||||
|         /* each input byte writes 2 ascii chars, and might write a null byte. */ | ||||
|         /* If we don't have room for next input byte, stop */ | ||||
|         unsigned char c = guid.data[i]; | ||||
| @@ -72,7 +72,7 @@ static unsigned char nibble(unsigned char c) | ||||
| SDL_GUID SDL_GUIDFromString(const char *pchGUID) | ||||
| { | ||||
|     SDL_GUID guid; | ||||
|     int maxoutputbytes= sizeof(guid); | ||||
|     int maxoutputbytes = sizeof(guid); | ||||
|     size_t len = SDL_strlen(pchGUID); | ||||
|     Uint8 *p; | ||||
|     size_t i; | ||||
| @@ -83,8 +83,8 @@ SDL_GUID SDL_GUIDFromString(const char *pchGUID) | ||||
|     SDL_memset(&guid, 0x00, sizeof(guid)); | ||||
|  | ||||
|     p = (Uint8 *)&guid; | ||||
|     for (i = 0; (i < len) && ((p - (Uint8 *)&guid) < maxoutputbytes); i+=2, p++) { | ||||
|         *p = (nibble((unsigned char)pchGUID[i]) << 4) | nibble((unsigned char)pchGUID[i+1]); | ||||
|     for (i = 0; (i < len) && ((p - (Uint8 *)&guid) < maxoutputbytes); i += 2, p++) { | ||||
|         *p = (nibble((unsigned char)pchGUID[i]) << 4) | nibble((unsigned char)pchGUID[i + 1]); | ||||
|     } | ||||
|  | ||||
|     return guid; | ||||
|   | ||||
| @@ -24,17 +24,18 @@ | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_hints_c.h" | ||||
|  | ||||
|  | ||||
| /* Assuming there aren't many hints set and they aren't being queried in | ||||
|    critical performance paths, we'll just use linked lists here. | ||||
|  */ | ||||
| typedef struct SDL_HintWatch { | ||||
| typedef struct SDL_HintWatch | ||||
| { | ||||
|     SDL_HintCallback callback; | ||||
|     void *userdata; | ||||
|     struct SDL_HintWatch *next; | ||||
| } SDL_HintWatch; | ||||
|  | ||||
| typedef struct SDL_Hint { | ||||
| typedef struct SDL_Hint | ||||
| { | ||||
|     char *name; | ||||
|     char *value; | ||||
|     SDL_HintPriority priority; | ||||
| @@ -68,7 +69,7 @@ SDL_SetHintWithPriority(const char *name, const char *value, | ||||
|             } | ||||
|             if (hint->value != value && | ||||
|                 (value == NULL || !hint->value || SDL_strcmp(hint->value, value) != 0)) { | ||||
|                 for (entry = hint->callbacks; entry; ) { | ||||
|                 for (entry = hint->callbacks; entry;) { | ||||
|                     /* Save the next entry in case this one is deleted */ | ||||
|                     SDL_HintWatch *next = entry->next; | ||||
|                     entry->callback(entry->userdata, name, hint->value, value); | ||||
| @@ -113,7 +114,7 @@ SDL_ResetHint(const char *name) | ||||
|             if ((env == NULL && hint->value != NULL) || | ||||
|                 (env != NULL && hint->value == NULL) || | ||||
|                 (env != NULL && SDL_strcmp(env, hint->value) != 0)) { | ||||
|                 for (entry = hint->callbacks; entry; ) { | ||||
|                 for (entry = hint->callbacks; entry;) { | ||||
|                     /* Save the next entry in case this one is deleted */ | ||||
|                     SDL_HintWatch *next = entry->next; | ||||
|                     entry->callback(entry->userdata, name, hint->value, env); | ||||
| @@ -129,8 +130,7 @@ SDL_ResetHint(const char *name) | ||||
|     return SDL_FALSE; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_ResetHints(void) | ||||
| void SDL_ResetHints(void) | ||||
| { | ||||
|     const char *env; | ||||
|     SDL_Hint *hint; | ||||
| @@ -141,7 +141,7 @@ SDL_ResetHints(void) | ||||
|         if ((env == NULL && hint->value != NULL) || | ||||
|             (env != NULL && hint->value == NULL) || | ||||
|             (env != NULL && SDL_strcmp(env, hint->value) != 0)) { | ||||
|             for (entry = hint->callbacks; entry; ) { | ||||
|             for (entry = hint->callbacks; entry;) { | ||||
|                 /* Save the next entry in case this one is deleted */ | ||||
|                 SDL_HintWatch *next = entry->next; | ||||
|                 entry->callback(entry->userdata, hint->name, hint->value, env); | ||||
| @@ -197,8 +197,7 @@ SDL_GetHintBoolean(const char *name, SDL_bool default_value) | ||||
|     return SDL_GetStringBoolean(hint, default_value); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata) | ||||
| void SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata) | ||||
| { | ||||
|     SDL_Hint *hint; | ||||
|     SDL_HintWatch *entry; | ||||
| @@ -259,8 +258,7 @@ SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata) | ||||
|     callback(userdata, name, value, value); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_DelHintCallback(const char *name, SDL_HintCallback callback, void *userdata) | ||||
| void SDL_DelHintCallback(const char *name, SDL_HintCallback callback, void *userdata) | ||||
| { | ||||
|     SDL_Hint *hint; | ||||
|     SDL_HintWatch *entry, *prev; | ||||
| @@ -296,7 +294,7 @@ void SDL_ClearHints(void) | ||||
|  | ||||
|         SDL_free(hint->name); | ||||
|         SDL_free(hint->value); | ||||
|         for (entry = hint->callbacks; entry; ) { | ||||
|         for (entry = hint->callbacks; entry;) { | ||||
|             SDL_HintWatch *freeable = entry; | ||||
|             entry = entry->next; | ||||
|             SDL_free(freeable); | ||||
|   | ||||
| @@ -35,9 +35,14 @@ | ||||
| #define SDL_VARIABLE_LENGTH_ARRAY | ||||
| #endif | ||||
|  | ||||
| #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_free(ptr, isstack) if ((isstack)) { SDL_stack_free(ptr); } else { SDL_free(ptr); } | ||||
| #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_free(ptr, isstack) \ | ||||
|     if ((isstack)) {                 \ | ||||
|         SDL_stack_free(ptr);         \ | ||||
|     } else {                         \ | ||||
|         SDL_free(ptr);               \ | ||||
|     } | ||||
|  | ||||
| #include "dynapi/SDL_dynapi.h" | ||||
|  | ||||
| @@ -52,57 +57,57 @@ | ||||
|  | ||||
| /* 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 | ||||
| #define O_CLOEXEC                       0 | ||||
| #define O_CLOEXEC 0 | ||||
| #endif | ||||
|  | ||||
| /* A few #defines to reduce SDL2 footprint. | ||||
|    Only effective when library is statically linked. | ||||
|    You have to manually edit this file. */ | ||||
| #ifndef SDL_LEAN_AND_MEAN | ||||
| #define SDL_LEAN_AND_MEAN               0 | ||||
| #define SDL_LEAN_AND_MEAN 0 | ||||
| #endif | ||||
|  | ||||
| /* Optimized functions from 'SDL_blit_0.c' | ||||
|    - blit with source BitsPerPixel < 8, palette */ | ||||
| #ifndef SDL_HAVE_BLIT_0 | ||||
| #define SDL_HAVE_BLIT_0                 !SDL_LEAN_AND_MEAN | ||||
| #define SDL_HAVE_BLIT_0 !SDL_LEAN_AND_MEAN | ||||
| #endif | ||||
|  | ||||
| /* Optimized functions from 'SDL_blit_1.c' | ||||
|    - blit with source BytesPerPixel == 1, palette */ | ||||
| #ifndef SDL_HAVE_BLIT_1 | ||||
| #define SDL_HAVE_BLIT_1                 !SDL_LEAN_AND_MEAN | ||||
| #define SDL_HAVE_BLIT_1 !SDL_LEAN_AND_MEAN | ||||
| #endif | ||||
|  | ||||
| /* Optimized functions from 'SDL_blit_A.c' | ||||
|    - blit with 'SDL_BLENDMODE_BLEND' blending mode */ | ||||
| #ifndef SDL_HAVE_BLIT_A | ||||
| #define SDL_HAVE_BLIT_A                 !SDL_LEAN_AND_MEAN | ||||
| #define SDL_HAVE_BLIT_A !SDL_LEAN_AND_MEAN | ||||
| #endif | ||||
|  | ||||
| /* Optimized functions from 'SDL_blit_N.c' | ||||
|    - blit with COLORKEY mode, or nothing */ | ||||
| #ifndef SDL_HAVE_BLIT_N | ||||
| #define SDL_HAVE_BLIT_N                 !SDL_LEAN_AND_MEAN | ||||
| #define SDL_HAVE_BLIT_N !SDL_LEAN_AND_MEAN | ||||
| #endif | ||||
|  | ||||
| /* Optimized functions from 'SDL_blit_N.c' | ||||
|    - RGB565 conversion with Lookup tables */ | ||||
| #ifndef SDL_HAVE_BLIT_N_RGB565 | ||||
| #define SDL_HAVE_BLIT_N_RGB565          !SDL_LEAN_AND_MEAN | ||||
| #define SDL_HAVE_BLIT_N_RGB565 !SDL_LEAN_AND_MEAN | ||||
| #endif | ||||
|  | ||||
| /* Optimized functions from 'SDL_blit_AUTO.c' | ||||
|    - blit with modulate color, modulate alpha, any blending mode | ||||
|    - scaling or not */ | ||||
| #ifndef SDL_HAVE_BLIT_AUTO | ||||
| #define SDL_HAVE_BLIT_AUTO              !SDL_LEAN_AND_MEAN | ||||
| #define SDL_HAVE_BLIT_AUTO !SDL_LEAN_AND_MEAN | ||||
| #endif | ||||
|  | ||||
| /* Run-Length-Encoding | ||||
|    - SDL_SetColorKey() called with SDL_RLEACCEL flag */ | ||||
| #ifndef SDL_HAVE_RLE | ||||
| #define SDL_HAVE_RLE                    !SDL_LEAN_AND_MEAN | ||||
| #define SDL_HAVE_RLE !SDL_LEAN_AND_MEAN | ||||
| #endif | ||||
|  | ||||
| /* Software SDL_Renderer | ||||
| @@ -110,14 +115,14 @@ | ||||
|    - *not* general blitting functions | ||||
|    - {blend,draw}{fillrect,line,point} internal functions */ | ||||
| #ifndef SDL_VIDEO_RENDER_SW | ||||
| #define SDL_VIDEO_RENDER_SW             !SDL_LEAN_AND_MEAN | ||||
| #define SDL_VIDEO_RENDER_SW !SDL_LEAN_AND_MEAN | ||||
| #endif | ||||
|  | ||||
| /* YUV formats | ||||
|    - handling of YUV surfaces | ||||
|    - blitting and conversion functions */ | ||||
| #ifndef SDL_HAVE_YUV | ||||
| #define SDL_HAVE_YUV                    !SDL_LEAN_AND_MEAN | ||||
| #define SDL_HAVE_YUV !SDL_LEAN_AND_MEAN | ||||
| #endif | ||||
|  | ||||
| #include "SDL_assert.h" | ||||
|   | ||||
| @@ -24,10 +24,9 @@ | ||||
| #include "./SDL_list.h" | ||||
|  | ||||
| /* Push */ | ||||
| int | ||||
| SDL_ListAdd(SDL_ListNode **head, void *ent) | ||||
| int SDL_ListAdd(SDL_ListNode **head, void *ent) | ||||
| { | ||||
|     SDL_ListNode *node = SDL_malloc(sizeof (*node)); | ||||
|     SDL_ListNode *node = SDL_malloc(sizeof(*node)); | ||||
|  | ||||
|     if (node == NULL) { | ||||
|         return SDL_OutOfMemory(); | ||||
| @@ -40,8 +39,7 @@ SDL_ListAdd(SDL_ListNode **head, void *ent) | ||||
| } | ||||
|  | ||||
| /* Pop from end as a FIFO (if add with SDL_ListAdd) */ | ||||
| void | ||||
| SDL_ListPop(SDL_ListNode **head, void **ent) | ||||
| void SDL_ListPop(SDL_ListNode **head, void **ent) | ||||
| { | ||||
|     SDL_ListNode **ptr = head; | ||||
|  | ||||
| @@ -55,15 +53,14 @@ SDL_ListPop(SDL_ListNode **head, void **ent) | ||||
|     } | ||||
|  | ||||
|     if (ent) { | ||||
|        *ent = (*ptr)->entry; | ||||
|         *ent = (*ptr)->entry; | ||||
|     } | ||||
|  | ||||
|     SDL_free(*ptr); | ||||
|     *ptr = NULL; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_ListRemove(SDL_ListNode **head, void *ent) | ||||
| void SDL_ListRemove(SDL_ListNode **head, void *ent) | ||||
| { | ||||
|     SDL_ListNode **ptr = head; | ||||
|  | ||||
| @@ -78,8 +75,7 @@ SDL_ListRemove(SDL_ListNode **head, void *ent) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_ListClear(SDL_ListNode **head) | ||||
| void SDL_ListClear(SDL_ListNode **head) | ||||
| { | ||||
|     SDL_ListNode *l = *head; | ||||
|     *head = NULL; | ||||
|   | ||||
| @@ -28,7 +28,6 @@ typedef struct SDL_ListNode | ||||
|     struct SDL_ListNode *next; | ||||
| } SDL_ListNode; | ||||
|  | ||||
|  | ||||
| int SDL_ListAdd(SDL_ListNode **head, void *ent); | ||||
| void SDL_ListPop(SDL_ListNode **head, void **ent); | ||||
| void SDL_ListRemove(SDL_ListNode **head, void *ent); | ||||
|   | ||||
							
								
								
									
										141
									
								
								src/SDL_log.c
									
									
									
									
									
								
							
							
						
						
									
										141
									
								
								src/SDL_log.c
									
									
									
									
									
								
							| @@ -41,14 +41,13 @@ | ||||
|  | ||||
| #include "stdlib/SDL_vacopy.h" | ||||
|  | ||||
|  | ||||
| /* The size of the stack buffer to use for rendering log messages. */ | ||||
| #define SDL_MAX_LOG_MESSAGE_STACK 256 | ||||
|  | ||||
| #define DEFAULT_PRIORITY                SDL_LOG_PRIORITY_CRITICAL | ||||
| #define DEFAULT_ASSERT_PRIORITY         SDL_LOG_PRIORITY_WARN | ||||
| #define DEFAULT_APPLICATION_PRIORITY    SDL_LOG_PRIORITY_INFO | ||||
| #define DEFAULT_TEST_PRIORITY           SDL_LOG_PRIORITY_VERBOSE | ||||
| #define DEFAULT_PRIORITY             SDL_LOG_PRIORITY_CRITICAL | ||||
| #define DEFAULT_ASSERT_PRIORITY      SDL_LOG_PRIORITY_WARN | ||||
| #define DEFAULT_APPLICATION_PRIORITY SDL_LOG_PRIORITY_INFO | ||||
| #define DEFAULT_TEST_PRIORITY        SDL_LOG_PRIORITY_VERBOSE | ||||
|  | ||||
| typedef struct SDL_LogLevel | ||||
| { | ||||
| @@ -105,8 +104,7 @@ static int SDL_android_priority[SDL_NUM_LOG_PRIORITIES] = { | ||||
| }; | ||||
| #endif /* __ANDROID__ */ | ||||
|  | ||||
| void | ||||
| SDL_LogInit(void) | ||||
| void SDL_LogInit(void) | ||||
| { | ||||
|     if (log_function_mutex == NULL) { | ||||
|         /* if this fails we'll try to continue without it. */ | ||||
| @@ -114,8 +112,7 @@ SDL_LogInit(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogQuit(void) | ||||
| void SDL_LogQuit(void) | ||||
| { | ||||
|     SDL_LogResetPriorities(); | ||||
|     if (log_function_mutex) { | ||||
| @@ -124,8 +121,7 @@ SDL_LogQuit(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogSetAllPriority(SDL_LogPriority priority) | ||||
| void SDL_LogSetAllPriority(SDL_LogPriority priority) | ||||
| { | ||||
|     SDL_LogLevel *entry; | ||||
|  | ||||
| @@ -137,8 +133,7 @@ SDL_LogSetAllPriority(SDL_LogPriority priority) | ||||
|     SDL_application_priority = priority; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogSetPriority(int category, SDL_LogPriority priority) | ||||
| void SDL_LogSetPriority(int category, SDL_LogPriority priority) | ||||
| { | ||||
|     SDL_LogLevel *entry; | ||||
|  | ||||
| @@ -181,8 +176,7 @@ SDL_LogGetPriority(int category) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogResetPriorities(void) | ||||
| void SDL_LogResetPriorities(void) | ||||
| { | ||||
|     SDL_LogLevel *entry; | ||||
|  | ||||
| @@ -198,8 +192,7 @@ SDL_LogResetPriorities(void) | ||||
|     SDL_test_priority = DEFAULT_TEST_PRIORITY; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| void SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|  | ||||
| @@ -208,8 +201,7 @@ SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
|     va_end(ap); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| void SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|  | ||||
| @@ -218,8 +210,7 @@ SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
|     va_end(ap); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| void SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|  | ||||
| @@ -228,8 +219,7 @@ SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
|     va_end(ap); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| void SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|  | ||||
| @@ -238,8 +228,7 @@ SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
|     va_end(ap); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| void SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|  | ||||
| @@ -248,8 +237,7 @@ SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
|     va_end(ap); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| void SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|  | ||||
| @@ -258,8 +246,7 @@ SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
|     va_end(ap); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| void SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|  | ||||
| @@ -268,8 +255,7 @@ SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
|     va_end(ap); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogMessage(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| void SDL_LogMessage(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|  | ||||
| @@ -279,8 +265,7 @@ SDL_LogMessage(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING | ||||
| } | ||||
|  | ||||
| #ifdef __ANDROID__ | ||||
| static const char * | ||||
| GetCategoryPrefix(int category) | ||||
| static const char *GetCategoryPrefix(int category) | ||||
| { | ||||
|     if (category < SDL_LOG_CATEGORY_RESERVED1) { | ||||
|         return SDL_category_prefixes[category]; | ||||
| @@ -292,8 +277,7 @@ GetCategoryPrefix(int category) | ||||
| } | ||||
| #endif /* __ANDROID__ */ | ||||
|  | ||||
| void | ||||
| SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap) | ||||
| void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap) | ||||
| { | ||||
|     char *message = NULL; | ||||
|     char stack_buf[SDL_MAX_LOG_MESSAGE_STACK]; | ||||
| @@ -345,9 +329,9 @@ SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list | ||||
|     } | ||||
|  | ||||
|     /* Chop off final endline. */ | ||||
|     if ((len > 0) && (message[len-1] == '\n')) { | ||||
|     if ((len > 0) && (message[len - 1] == '\n')) { | ||||
|         message[--len] = '\0'; | ||||
|         if ((len > 0) && (message[len-1] == '\r')) {  /* catch "\r\n", too. */ | ||||
|         if ((len > 0) && (message[len - 1] == '\r')) { /* catch "\r\n", too. */ | ||||
|             message[--len] = '\0'; | ||||
|         } | ||||
|     } | ||||
| @@ -376,9 +360,8 @@ static int consoleAttached = 0; | ||||
| static HANDLE stderrHandle = NULL; | ||||
| #endif | ||||
|  | ||||
| static void SDLCALL | ||||
| SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, | ||||
|               const char *message) | ||||
| static void SDLCALL SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, | ||||
|                                   const char *message) | ||||
| { | ||||
| #if defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__) | ||||
|     /* Way too many allocations here, urgh */ | ||||
| @@ -399,34 +382,34 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, | ||||
|         if (consoleAttached == 0) { | ||||
|             attachResult = AttachConsole(ATTACH_PARENT_PROCESS); | ||||
|             if (!attachResult) { | ||||
|                     attachError = GetLastError(); | ||||
|                     if (attachError == ERROR_INVALID_HANDLE) { | ||||
|                         /* This is expected when running from Visual Studio */ | ||||
|                         /*OutputDebugString(TEXT("Parent process has no console\r\n"));*/ | ||||
|                         consoleAttached = -1; | ||||
|                     } else if (attachError == ERROR_GEN_FAILURE) { | ||||
|                          OutputDebugString(TEXT("Could not attach to console of parent process\r\n")); | ||||
|                          consoleAttached = -1; | ||||
|                     } else if (attachError == ERROR_ACCESS_DENIED) {   | ||||
|                          /* Already attached */ | ||||
|                         consoleAttached = 1; | ||||
|                     } else { | ||||
|                         OutputDebugString(TEXT("Error attaching console\r\n")); | ||||
|                         consoleAttached = -1; | ||||
|                     } | ||||
|                 } else { | ||||
|                     /* Newly attached */ | ||||
|                 attachError = GetLastError(); | ||||
|                 if (attachError == ERROR_INVALID_HANDLE) { | ||||
|                     /* This is expected when running from Visual Studio */ | ||||
|                     /*OutputDebugString(TEXT("Parent process has no console\r\n"));*/ | ||||
|                     consoleAttached = -1; | ||||
|                 } else if (attachError == ERROR_GEN_FAILURE) { | ||||
|                     OutputDebugString(TEXT("Could not attach to console of parent process\r\n")); | ||||
|                     consoleAttached = -1; | ||||
|                 } else if (attachError == ERROR_ACCESS_DENIED) { | ||||
|                     /* Already attached */ | ||||
|                     consoleAttached = 1; | ||||
|                 } else { | ||||
|                     OutputDebugString(TEXT("Error attaching console\r\n")); | ||||
|                     consoleAttached = -1; | ||||
|                 } | ||||
|             } else { | ||||
|                 /* Newly attached */ | ||||
|                 consoleAttached = 1; | ||||
|             } | ||||
|  | ||||
|                 if (consoleAttached == 1) { | ||||
|                         stderrHandle = GetStdHandle(STD_ERROR_HANDLE); | ||||
|             if (consoleAttached == 1) { | ||||
|                 stderrHandle = GetStdHandle(STD_ERROR_HANDLE); | ||||
|  | ||||
|                         if (GetConsoleMode(stderrHandle, &consoleMode) == 0) { | ||||
|                             /* WriteConsole fails if the output is redirected to a file. Must use WriteFile instead. */ | ||||
|                             consoleAttached = 2; | ||||
|                         } | ||||
|                 if (GetConsoleMode(stderrHandle, &consoleMode) == 0) { | ||||
|                     /* WriteConsole fails if the output is redirected to a file. Must use WriteFile instead. */ | ||||
|                     consoleAttached = 2; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| #endif /* !defined(HAVE_STDIO_H) && !defined(__WINRT__) && !defined(__GDK__) */ | ||||
|  | ||||
| @@ -441,15 +424,15 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, | ||||
| #if !defined(HAVE_STDIO_H) && !defined(__WINRT__) && !defined(__GDK__) | ||||
|         /* Screen output to stderr, if console was attached. */ | ||||
|         if (consoleAttached == 1) { | ||||
|                 if (!WriteConsole(stderrHandle, tstr, (DWORD) SDL_tcslen(tstr), &charsWritten, NULL)) { | ||||
|                     OutputDebugString(TEXT("Error calling WriteConsole\r\n")); | ||||
|                     if (GetLastError() == ERROR_NOT_ENOUGH_MEMORY) { | ||||
|                         OutputDebugString(TEXT("Insufficient heap memory to write message\r\n")); | ||||
|                     } | ||||
|             if (!WriteConsole(stderrHandle, tstr, (DWORD)SDL_tcslen(tstr), &charsWritten, NULL)) { | ||||
|                 OutputDebugString(TEXT("Error calling WriteConsole\r\n")); | ||||
|                 if (GetLastError() == ERROR_NOT_ENOUGH_MEMORY) { | ||||
|                     OutputDebugString(TEXT("Insufficient heap memory to write message\r\n")); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|         } else if (consoleAttached == 2) { | ||||
|             if (!WriteFile(stderrHandle, output, (DWORD) SDL_strlen(output), &charsWritten, NULL)) { | ||||
|             if (!WriteFile(stderrHandle, output, (DWORD)SDL_strlen(output), &charsWritten, NULL)) { | ||||
|                 OutputDebugString(TEXT("Error calling WriteFile\r\n")); | ||||
|             } | ||||
|         } | ||||
| @@ -467,7 +450,7 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, | ||||
|     } | ||||
| #elif defined(__APPLE__) && (defined(SDL_VIDEO_DRIVER_COCOA) || defined(SDL_VIDEO_DRIVER_UIKIT)) | ||||
|     /* Technically we don't need Cocoa/UIKit, but that's where this function is defined for now. | ||||
|     */ | ||||
|      */ | ||||
|     extern void SDL_NSLog(const char *prefix, const char *text); | ||||
|     { | ||||
|         SDL_NSLog(SDL_priority_prefixes[priority], message); | ||||
| @@ -475,17 +458,17 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, | ||||
|     } | ||||
| #elif defined(__PSP__) || defined(__PS2__) | ||||
|     { | ||||
|         FILE*        pFile; | ||||
|         pFile = fopen ("SDL_Log.txt", "a"); | ||||
|         FILE *pFile; | ||||
|         pFile = fopen("SDL_Log.txt", "a"); | ||||
|         fprintf(pFile, "%s: %s\n", SDL_priority_prefixes[priority], message); | ||||
|         fclose (pFile); | ||||
|         fclose(pFile); | ||||
|     } | ||||
| #elif defined(__VITA__) | ||||
|     { | ||||
|         FILE*        pFile; | ||||
|         pFile = fopen ("ux0:/data/SDL_Log.txt", "a"); | ||||
|         FILE *pFile; | ||||
|         pFile = fopen("ux0:/data/SDL_Log.txt", "a"); | ||||
|         fprintf(pFile, "%s: %s\n", SDL_priority_prefixes[priority], message); | ||||
|         fclose (pFile); | ||||
|         fclose(pFile); | ||||
|     } | ||||
| #elif defined(__3DS__) | ||||
|     { | ||||
| @@ -504,8 +487,7 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, | ||||
| #endif | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata) | ||||
| void SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata) | ||||
| { | ||||
|     if (callback) { | ||||
|         *callback = SDL_log_function; | ||||
| @@ -515,8 +497,7 @@ SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata) | ||||
| void SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata) | ||||
| { | ||||
|     SDL_log_function = callback; | ||||
|     SDL_log_userdata = userdata; | ||||
|   | ||||
| @@ -37,19 +37,20 @@ | ||||
|  | ||||
| /* The __atomic_load_n() intrinsic showed up in different times for different compilers. */ | ||||
| #if defined(__clang__) | ||||
| #  if __has_builtin(__atomic_load_n) || defined(HAVE_GCC_ATOMICS) | ||||
|      /* !!! FIXME: this advertises as available in the NDK but uses an external symbol we don't have. | ||||
|         It might be in a later NDK or we might need an extra library? --ryan. */ | ||||
| #    if !defined(__ANDROID__) | ||||
| #      define HAVE_ATOMIC_LOAD_N 1 | ||||
| #    endif | ||||
| #  endif | ||||
| #if __has_builtin(__atomic_load_n) || defined(HAVE_GCC_ATOMICS) | ||||
| /* !!! FIXME: this advertises as available in the NDK but uses an external symbol we don't have. | ||||
|    It might be in a later NDK or we might need an extra library? --ryan. */ | ||||
| #if !defined(__ANDROID__) | ||||
| #define HAVE_ATOMIC_LOAD_N 1 | ||||
| #endif | ||||
| #endif | ||||
| #elif defined(__GNUC__) | ||||
| #   if (__GNUC__ >= 5) | ||||
| #     define HAVE_ATOMIC_LOAD_N 1 | ||||
| #   endif | ||||
| #if (__GNUC__ >= 5) | ||||
| #define HAVE_ATOMIC_LOAD_N 1 | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| /* *INDENT-OFF* */ /* clang-format off */ | ||||
| #if defined(__WATCOMC__) && defined(__386__) | ||||
| SDL_COMPILE_TIME_ASSERT(intsize, 4==sizeof(int)); | ||||
| #define HAVE_WATCOM_ATOMICS | ||||
| @@ -74,7 +75,9 @@ extern __inline int _SDL_xadd_watcom(volatile int *a, int v); | ||||
|   parm [ecx] [eax] \ | ||||
|   value [eax] \ | ||||
|   modify exact [eax]; | ||||
|  | ||||
| #endif /* __WATCOMC__ && __386__ */ | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
| /* | ||||
|   If any of the operations are not provided then we must emulate some | ||||
| @@ -106,16 +109,14 @@ extern __inline int _SDL_xadd_watcom(volatile int *a, int v); | ||||
| #if EMULATE_CAS | ||||
| static SDL_SpinLock locks[32]; | ||||
|  | ||||
| static SDL_INLINE void | ||||
| enterLock(void *a) | ||||
| static SDL_INLINE void enterLock(void *a) | ||||
| { | ||||
|     uintptr_t index = ((((uintptr_t)a) >> 3) & 0x1f); | ||||
|  | ||||
|     SDL_AtomicLock(&locks[index]); | ||||
| } | ||||
|  | ||||
| static SDL_INLINE void | ||||
| leaveLock(void *a) | ||||
| static SDL_INLINE void leaveLock(void *a) | ||||
| { | ||||
|     uintptr_t index = ((((uintptr_t)a) >> 3) & 0x1f); | ||||
|  | ||||
| @@ -123,7 +124,6 @@ leaveLock(void *a) | ||||
| } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| SDL_bool | ||||
| SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval) | ||||
| { | ||||
| @@ -150,7 +150,7 @@ SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval) | ||||
|  | ||||
|     return retval; | ||||
| #else | ||||
|     #error Please define your platform. | ||||
| #error Please define your platform. | ||||
| #endif | ||||
| } | ||||
|  | ||||
| @@ -181,12 +181,11 @@ SDL_AtomicCASPtr(void **a, void *oldval, void *newval) | ||||
|  | ||||
|     return retval; | ||||
| #else | ||||
|     #error Please define your platform. | ||||
| #error Please define your platform. | ||||
| #endif | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_AtomicSet(SDL_atomic_t *a, int v) | ||||
| int SDL_AtomicSet(SDL_atomic_t *a, int v) | ||||
| { | ||||
| #ifdef HAVE_MSC_ATOMICS | ||||
|     SDL_COMPILE_TIME_ASSERT(atomic_set, sizeof(long) == sizeof(a->value)); | ||||
| @@ -206,7 +205,7 @@ SDL_AtomicSet(SDL_atomic_t *a, int v) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| void* | ||||
| void * | ||||
| SDL_AtomicSetPtr(void **a, void *v) | ||||
| { | ||||
| #if defined(HAVE_MSC_ATOMICS) | ||||
| @@ -226,8 +225,7 @@ SDL_AtomicSetPtr(void **a, void *v) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_AtomicAdd(SDL_atomic_t *a, int v) | ||||
| int SDL_AtomicAdd(SDL_atomic_t *a, int v) | ||||
| { | ||||
| #ifdef HAVE_MSC_ATOMICS | ||||
|     SDL_COMPILE_TIME_ASSERT(atomic_add, sizeof(long) == sizeof(a->value)); | ||||
| @@ -239,7 +237,7 @@ SDL_AtomicAdd(SDL_atomic_t *a, int v) | ||||
| #elif defined(__SOLARIS__) | ||||
|     int pv = a->value; | ||||
|     membar_consumer(); | ||||
|     atomic_add_int((volatile uint_t*)&a->value, v); | ||||
|     atomic_add_int((volatile uint_t *)&a->value, v); | ||||
|     return pv; | ||||
| #else | ||||
|     int value; | ||||
| @@ -250,8 +248,7 @@ SDL_AtomicAdd(SDL_atomic_t *a, int v) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_AtomicGet(SDL_atomic_t *a) | ||||
| int SDL_AtomicGet(SDL_atomic_t *a) | ||||
| { | ||||
| #ifdef HAVE_ATOMIC_LOAD_N | ||||
|     return __atomic_load_n(&a->value, __ATOMIC_SEQ_CST); | ||||
| @@ -299,14 +296,12 @@ SDL_AtomicGetPtr(void **a) | ||||
| #error This file should be built in arm mode so the mcr instruction is available for memory barriers | ||||
| #endif | ||||
|  | ||||
| void | ||||
| SDL_MemoryBarrierReleaseFunction(void) | ||||
| void SDL_MemoryBarrierReleaseFunction(void) | ||||
| { | ||||
|     SDL_MemoryBarrierRelease(); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_MemoryBarrierAcquireFunction(void) | ||||
| void SDL_MemoryBarrierAcquireFunction(void) | ||||
| { | ||||
|     SDL_MemoryBarrierAcquire(); | ||||
| } | ||||
|   | ||||
| @@ -48,6 +48,7 @@ | ||||
| #include <libkern/OSAtomic.h> | ||||
| #endif | ||||
|  | ||||
| /* *INDENT-OFF* */ /* clang-format off */ | ||||
| #if defined(__WATCOMC__) && defined(__386__) | ||||
| SDL_COMPILE_TIME_ASSERT(locksize, 4==sizeof(SDL_SpinLock)); | ||||
| extern __inline int _SDL_xchg_watcom(volatile int *a, int v); | ||||
| @@ -57,6 +58,7 @@ extern __inline int _SDL_xchg_watcom(volatile int *a, int v); | ||||
|   value [eax] \ | ||||
|   modify exact [eax]; | ||||
| #endif /* __WATCOMC__ && __386__ */ | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
| /* This function is where all the magic happens... */ | ||||
| SDL_bool | ||||
| @@ -93,39 +95,47 @@ SDL_AtomicTryLock(SDL_SpinLock *lock) | ||||
| #elif defined(__WATCOMC__) && defined(__386__) | ||||
|     return _SDL_xchg_watcom(lock, 1) == 0; | ||||
|  | ||||
| #elif defined(__GNUC__) && defined(__arm__) && \ | ||||
|         (defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) || \ | ||||
|          defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || \ | ||||
|          defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5TE__) || \ | ||||
|          defined(__ARM_ARCH_5TEJ__)) | ||||
| #elif defined(__GNUC__) && defined(__arm__) &&               \ | ||||
|     (defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) ||  \ | ||||
|      defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) ||  \ | ||||
|      defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5TE__) || \ | ||||
|      defined(__ARM_ARCH_5TEJ__)) | ||||
|     int result; | ||||
|  | ||||
| #if defined(__RISCOS__) | ||||
|     if (__cpucap_have_rex()) { | ||||
|         __asm__ __volatile__ ( | ||||
|         __asm__ __volatile__( | ||||
|             "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; | ||||
|     } | ||||
| #endif | ||||
|  | ||||
|     __asm__ __volatile__ ( | ||||
|     __asm__ __volatile__( | ||||
|         "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; | ||||
|  | ||||
| #elif defined(__GNUC__) && defined(__arm__) | ||||
|     int result; | ||||
|     __asm__ __volatile__ ( | ||||
|     __asm__ __volatile__( | ||||
|         "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; | ||||
|  | ||||
| #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) | ||||
|     int result; | ||||
|     __asm__ __volatile__( | ||||
|         "lock ; xchgl %0, (%1)\n" | ||||
|         : "=r" (result) : "r" (lock), "0" (1) : "cc", "memory"); | ||||
|         : "=r"(result) | ||||
|         : "r"(lock), "0"(1) | ||||
|         : "cc", "memory"); | ||||
|     return result == 0; | ||||
|  | ||||
| #elif defined(__MACOSX__) || defined(__IPHONEOS__) | ||||
| @@ -150,7 +160,9 @@ SDL_AtomicTryLock(SDL_SpinLock *lock) | ||||
|         res = SDL_TRUE; | ||||
|     } | ||||
|     // enable interuption | ||||
|     if (oldintr) { EIntr(); } | ||||
|     if (oldintr) { | ||||
|         EIntr(); | ||||
|     } | ||||
|     return res; | ||||
| #else | ||||
| #error Please implement for your platform. | ||||
| @@ -158,8 +170,7 @@ SDL_AtomicTryLock(SDL_SpinLock *lock) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_AtomicLock(SDL_SpinLock *lock) | ||||
| void SDL_AtomicLock(SDL_SpinLock *lock) | ||||
| { | ||||
|     int iterations = 0; | ||||
|     /* FIXME: Should we have an eventual timeout? */ | ||||
| @@ -174,8 +185,7 @@ SDL_AtomicLock(SDL_SpinLock *lock) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_AtomicUnlock(SDL_SpinLock *lock) | ||||
| void SDL_AtomicUnlock(SDL_SpinLock *lock) | ||||
| { | ||||
| #if HAVE_GCC_ATOMICS || HAVE_GCC_SYNC_LOCK_TEST_AND_SET | ||||
|     __sync_lock_release(lock); | ||||
| @@ -188,7 +198,7 @@ SDL_AtomicUnlock(SDL_SpinLock *lock) | ||||
|     *lock = 0; | ||||
|  | ||||
| #elif defined(__WATCOMC__) && defined(__386__) | ||||
|     SDL_CompilerBarrier (); | ||||
|     SDL_CompilerBarrier(); | ||||
|     *lock = 0; | ||||
|  | ||||
| #elif defined(__SOLARIS__) | ||||
|   | ||||
| @@ -132,22 +132,20 @@ static const AudioBootStrap *const bootstrap[] = { | ||||
|     NULL | ||||
| }; | ||||
|  | ||||
|  | ||||
| #ifdef HAVE_LIBSAMPLERATE_H | ||||
| #ifdef SDL_LIBSAMPLERATE_DYNAMIC | ||||
| static void *SRC_lib = NULL; | ||||
| #endif | ||||
| SDL_bool SRC_available = SDL_FALSE; | ||||
| int SRC_converter = 0; | ||||
| SRC_STATE* (*SRC_src_new)(int converter_type, int channels, int *error) = NULL; | ||||
| SRC_STATE *(*SRC_src_new)(int converter_type, int channels, int *error) = NULL; | ||||
| int (*SRC_src_process)(SRC_STATE *state, SRC_DATA *data) = NULL; | ||||
| int (*SRC_src_reset)(SRC_STATE *state) = NULL; | ||||
| SRC_STATE* (*SRC_src_delete)(SRC_STATE *state) = NULL; | ||||
| const char* (*SRC_src_strerror)(int error) = NULL; | ||||
| SRC_STATE *(*SRC_src_delete)(SRC_STATE *state) = NULL; | ||||
| const char *(*SRC_src_strerror)(int error) = NULL; | ||||
| int (*SRC_src_simple)(SRC_DATA *data, int converter_type, int channels) = NULL; | ||||
|  | ||||
| static SDL_bool | ||||
| LoadLibSampleRate(void) | ||||
| static SDL_bool LoadLibSampleRate(void) | ||||
| { | ||||
|     const char *hint = SDL_GetHint(SDL_HINT_AUDIO_RESAMPLING_MODE); | ||||
|  | ||||
| @@ -155,7 +153,7 @@ LoadLibSampleRate(void) | ||||
|     SRC_converter = 0; | ||||
|  | ||||
|     if (!hint || *hint == '0' || SDL_strcasecmp(hint, "default") == 0) { | ||||
|         return SDL_FALSE;  /* don't load anything. */ | ||||
|         return SDL_FALSE; /* don't load anything. */ | ||||
|     } else if (*hint == '1' || SDL_strcasecmp(hint, "fast") == 0) { | ||||
|         SRC_converter = SRC_SINC_FASTEST; | ||||
|     } else if (*hint == '2' || SDL_strcasecmp(hint, "medium") == 0) { | ||||
| @@ -163,7 +161,7 @@ LoadLibSampleRate(void) | ||||
|     } else if (*hint == '3' || SDL_strcasecmp(hint, "best") == 0) { | ||||
|         SRC_converter = SRC_SINC_BEST_QUALITY; | ||||
|     } else { | ||||
|         return SDL_FALSE;  /* treat it like "default", don't load anything. */ | ||||
|         return SDL_FALSE; /* treat it like "default", don't load anything. */ | ||||
|     } | ||||
|  | ||||
| #ifdef SDL_LIBSAMPLERATE_DYNAMIC | ||||
| @@ -174,12 +172,14 @@ LoadLibSampleRate(void) | ||||
|         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_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_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_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) { | ||||
|         SDL_UnloadObject(SRC_lib); | ||||
| @@ -199,8 +199,7 @@ LoadLibSampleRate(void) | ||||
|     return SDL_TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| UnloadLibSampleRate(void) | ||||
| static void UnloadLibSampleRate(void) | ||||
| { | ||||
| #ifdef SDL_LIBSAMPLERATE_DYNAMIC | ||||
|     if (SRC_lib != NULL) { | ||||
| @@ -218,8 +217,7 @@ UnloadLibSampleRate(void) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static SDL_AudioDevice * | ||||
| get_audio_device(SDL_AudioDeviceID id) | ||||
| static SDL_AudioDevice *get_audio_device(SDL_AudioDeviceID id) | ||||
| { | ||||
|     id--; | ||||
|     if ((id >= SDL_arraysize(open_devices)) || (open_devices[id] == NULL)) { | ||||
| @@ -230,82 +228,67 @@ get_audio_device(SDL_AudioDeviceID id) | ||||
|     return open_devices[id]; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* stubs for audio drivers that don't need a specific entry point... */ | ||||
| static void | ||||
| SDL_AudioDetectDevices_Default(void) | ||||
| static void SDL_AudioDetectDevices_Default(void) | ||||
| { | ||||
|     /* you have to write your own implementation if these assertions fail. */ | ||||
|     SDL_assert(current_audio.impl.OnlyHasDefaultOutputDevice); | ||||
|     SDL_assert(current_audio.impl.OnlyHasDefaultCaptureDevice || !current_audio.impl.HasCaptureSupport); | ||||
|  | ||||
|     SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *) ((size_t) 0x1)); | ||||
|     SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *)((size_t)0x1)); | ||||
|     if (current_audio.impl.HasCaptureSupport) { | ||||
|         SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *) ((size_t) 0x2)); | ||||
|         SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *)((size_t)0x2)); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioThreadInit_Default(_THIS) | ||||
| {                               /* no-op. */ | ||||
| static void SDL_AudioThreadInit_Default(_THIS) | ||||
| { /* no-op. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioThreadDeinit_Default(_THIS) | ||||
| {                               /* no-op. */ | ||||
| static void SDL_AudioThreadDeinit_Default(_THIS) | ||||
| { /* no-op. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioWaitDevice_Default(_THIS) | ||||
| {                               /* no-op. */ | ||||
| static void SDL_AudioWaitDevice_Default(_THIS) | ||||
| { /* no-op. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioPlayDevice_Default(_THIS) | ||||
| {                               /* no-op. */ | ||||
| static void SDL_AudioPlayDevice_Default(_THIS) | ||||
| { /* no-op. */ | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| SDL_AudioGetDeviceBuf_Default(_THIS) | ||||
| static Uint8 *SDL_AudioGetDeviceBuf_Default(_THIS) | ||||
| { | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| static int | ||||
| SDL_AudioCaptureFromDevice_Default(_THIS, void *buffer, int buflen) | ||||
| static int SDL_AudioCaptureFromDevice_Default(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     return -1;  /* just fail immediately. */ | ||||
|     return -1; /* just fail immediately. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioFlushCapture_Default(_THIS) | ||||
| {                               /* no-op. */ | ||||
| static void SDL_AudioFlushCapture_Default(_THIS) | ||||
| { /* no-op. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioCloseDevice_Default(_THIS) | ||||
| {                               /* no-op. */ | ||||
| static void SDL_AudioCloseDevice_Default(_THIS) | ||||
| { /* no-op. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioDeinitialize_Default(void) | ||||
| {                               /* no-op. */ | ||||
| static void SDL_AudioDeinitialize_Default(void) | ||||
| { /* no-op. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioFreeDeviceHandle_Default(void *handle) | ||||
| {                               /* no-op. */ | ||||
| static void SDL_AudioFreeDeviceHandle_Default(void *handle) | ||||
| { /* no-op. */ | ||||
| } | ||||
|  | ||||
|  | ||||
| static int | ||||
| SDL_AudioOpenDevice_Default(_THIS, const char *devname) | ||||
| static int SDL_AudioOpenDevice_Default(_THIS, const char *devname) | ||||
| { | ||||
|     return SDL_Unsupported(); | ||||
| } | ||||
|  | ||||
| static SDL_INLINE SDL_bool | ||||
| is_in_audio_device_thread(SDL_AudioDevice * device) | ||||
| static SDL_INLINE SDL_bool is_in_audio_device_thread(SDL_AudioDevice *device) | ||||
| { | ||||
|     /* The device thread locks the same mutex, but not through the public API. | ||||
|        This check is in case the application, in the audio callback, | ||||
| @@ -318,35 +301,31 @@ is_in_audio_device_thread(SDL_AudioDevice * device) | ||||
|     return SDL_FALSE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioLockDevice_Default(SDL_AudioDevice * device) | ||||
| static void SDL_AudioLockDevice_Default(SDL_AudioDevice *device) | ||||
| { | ||||
|     if (!is_in_audio_device_thread(device)) { | ||||
|         SDL_LockMutex(device->mixer_lock); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_AudioUnlockDevice_Default(SDL_AudioDevice * device) | ||||
| static void SDL_AudioUnlockDevice_Default(SDL_AudioDevice *device) | ||||
| { | ||||
|     if (!is_in_audio_device_thread(device)) { | ||||
|         SDL_UnlockMutex(device->mixer_lock); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| finish_audio_entry_points_init(void) | ||||
| static void finish_audio_entry_points_init(void) | ||||
| { | ||||
|     /* | ||||
|      * Fill in stub functions for unused driver entry points. This lets us | ||||
|      *  blindly call them without having to check for validity first. | ||||
|      */ | ||||
|  | ||||
|  | ||||
| #define FILL_STUB(x) \ | ||||
|         if (current_audio.impl.x == NULL) { \ | ||||
|             current_audio.impl.x = SDL_Audio##x##_Default; \ | ||||
|         } | ||||
| #define FILL_STUB(x)                                   \ | ||||
|     if (current_audio.impl.x == NULL) {                \ | ||||
|         current_audio.impl.x = SDL_Audio##x##_Default; \ | ||||
|     } | ||||
|     FILL_STUB(DetectDevices); | ||||
|     FILL_STUB(OpenDevice); | ||||
|     FILL_STUB(ThreadInit); | ||||
| @@ -364,21 +343,19 @@ finish_audio_entry_points_init(void) | ||||
| #undef FILL_STUB | ||||
| } | ||||
|  | ||||
|  | ||||
| /* device hotplug support... */ | ||||
|  | ||||
| static int | ||||
| add_audio_device(const char *name, SDL_AudioSpec *spec, void *handle, SDL_AudioDeviceItem **devices, int *devCount) | ||||
| static int add_audio_device(const char *name, SDL_AudioSpec *spec, void *handle, SDL_AudioDeviceItem **devices, int *devCount) | ||||
| { | ||||
|     int retval = -1; | ||||
|     SDL_AudioDeviceItem *item; | ||||
|     const SDL_AudioDeviceItem *i; | ||||
|     int dupenum = 0; | ||||
|  | ||||
|     SDL_assert(handle != NULL);  /* we reserve NULL, audio backends can't use it. */ | ||||
|     SDL_assert(handle != NULL); /* we reserve NULL, audio backends can't use it. */ | ||||
|     SDL_assert(name != NULL); | ||||
|  | ||||
|     item = (SDL_AudioDeviceItem *) SDL_malloc(sizeof (SDL_AudioDeviceItem)); | ||||
|     item = (SDL_AudioDeviceItem *)SDL_malloc(sizeof(SDL_AudioDeviceItem)); | ||||
|     if (!item) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
| @@ -403,13 +380,13 @@ add_audio_device(const char *name, SDL_AudioSpec *spec, void *handle, SDL_AudioD | ||||
|     for (i = *devices; i != NULL; i = i->next) { | ||||
|         if (SDL_strcmp(name, i->original_name) == 0) { | ||||
|             dupenum = i->dupenum + 1; | ||||
|             break;  /* stop at the highest-numbered dupe. */ | ||||
|             break; /* stop at the highest-numbered dupe. */ | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (dupenum) { | ||||
|         const size_t len = SDL_strlen(name) + 16; | ||||
|         char *replacement = (char *) SDL_malloc(len); | ||||
|         char *replacement = (char *)SDL_malloc(len); | ||||
|         if (!replacement) { | ||||
|             SDL_UnlockMutex(current_audio.detectionLock); | ||||
|             SDL_free(item->original_name); | ||||
| @@ -424,28 +401,25 @@ add_audio_device(const char *name, SDL_AudioSpec *spec, void *handle, SDL_AudioD | ||||
|  | ||||
|     item->next = *devices; | ||||
|     *devices = item; | ||||
|     retval = (*devCount)++;   /* !!! FIXME: this should be an atomic increment */ | ||||
|     retval = (*devCount)++; /* !!! FIXME: this should be an atomic increment */ | ||||
|  | ||||
|     SDL_UnlockMutex(current_audio.detectionLock); | ||||
|  | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| static SDL_INLINE int | ||||
| add_capture_device(const char *name, SDL_AudioSpec *spec, void *handle) | ||||
| static SDL_INLINE int add_capture_device(const char *name, SDL_AudioSpec *spec, void *handle) | ||||
| { | ||||
|     SDL_assert(current_audio.impl.HasCaptureSupport); | ||||
|     return add_audio_device(name, spec, handle, ¤t_audio.inputDevices, ¤t_audio.inputDeviceCount); | ||||
| } | ||||
|  | ||||
| static SDL_INLINE int | ||||
| add_output_device(const char *name, SDL_AudioSpec *spec, void *handle) | ||||
| static SDL_INLINE int add_output_device(const char *name, SDL_AudioSpec *spec, void *handle) | ||||
| { | ||||
|     return add_audio_device(name, spec, handle, ¤t_audio.outputDevices, ¤t_audio.outputDeviceCount); | ||||
| } | ||||
|  | ||||
| static void | ||||
| free_device_list(SDL_AudioDeviceItem **devices, int *devCount) | ||||
| static void free_device_list(SDL_AudioDeviceItem **devices, int *devCount) | ||||
| { | ||||
|     SDL_AudioDeviceItem *item, *next; | ||||
|     for (item = *devices; item != NULL; item = next) { | ||||
| @@ -464,10 +438,8 @@ free_device_list(SDL_AudioDeviceItem **devices, int *devCount) | ||||
|     *devCount = 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* The audio backends call this when a new device is plugged in. */ | ||||
| void | ||||
| SDL_AddAudioDevice(const SDL_bool iscapture, const char *name, SDL_AudioSpec *spec, void *handle) | ||||
| void 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); | ||||
|     if (device_index != -1) { | ||||
| @@ -489,11 +461,11 @@ void SDL_OpenedAudioDeviceDisconnected(SDL_AudioDevice *device) | ||||
|     SDL_assert(get_audio_device(device->id) == device); | ||||
|  | ||||
|     if (!SDL_AtomicGet(&device->enabled)) { | ||||
|         return;  /* don't report disconnects more than once. */ | ||||
|         return; /* don't report disconnects more than once. */ | ||||
|     } | ||||
|  | ||||
|     if (SDL_AtomicGet(&device->shutdown)) { | ||||
|         return;  /* don't report disconnect if we're trying to close device. */ | ||||
|         return; /* don't report disconnect if we're trying to close device. */ | ||||
|     } | ||||
|  | ||||
|     /* Ends the audio callback and mark the device as STOPPED, but the | ||||
| @@ -513,8 +485,7 @@ void SDL_OpenedAudioDeviceDisconnected(SDL_AudioDevice *device) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| mark_device_removed(void *handle, SDL_AudioDeviceItem *devices, SDL_bool *removedFlag) | ||||
| static void mark_device_removed(void *handle, SDL_AudioDeviceItem *devices, SDL_bool *removedFlag) | ||||
| { | ||||
|     SDL_AudioDeviceItem *item; | ||||
|     SDL_assert(handle != NULL); | ||||
| @@ -528,8 +499,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. */ | ||||
| void | ||||
| SDL_RemoveAudioDevice(const SDL_bool iscapture, void *handle) | ||||
| void SDL_RemoveAudioDevice(const SDL_bool iscapture, void *handle) | ||||
| { | ||||
|     int device_index; | ||||
|     SDL_AudioDevice *device = NULL; | ||||
| @@ -572,40 +542,36 @@ SDL_RemoveAudioDevice(const SDL_bool iscapture, void *handle) | ||||
|     current_audio.impl.FreeDeviceHandle(handle); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /* buffer queueing support... */ | ||||
|  | ||||
| static void SDLCALL | ||||
| SDL_BufferQueueDrainCallback(void *userdata, Uint8 *stream, int len) | ||||
| static void SDLCALL SDL_BufferQueueDrainCallback(void *userdata, Uint8 *stream, int len) | ||||
| { | ||||
|     /* this function always holds the mixer lock before being called. */ | ||||
|     SDL_AudioDevice *device = (SDL_AudioDevice *) userdata; | ||||
|     SDL_AudioDevice *device = (SDL_AudioDevice *)userdata; | ||||
|     size_t dequeued; | ||||
|  | ||||
|     SDL_assert(device != NULL);  /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(!device->iscapture);  /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(len >= 0);  /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(device != NULL);     /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(!device->iscapture); /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(len >= 0);           /* this shouldn't ever happen, right?! */ | ||||
|  | ||||
|     dequeued = SDL_ReadFromDataQueue(device->buffer_queue, stream, len); | ||||
|     stream += dequeued; | ||||
|     len -= (int) dequeued; | ||||
|     len -= (int)dequeued; | ||||
|  | ||||
|     if (len > 0) {  /* fill any remaining space in the stream with silence. */ | ||||
|     if (len > 0) { /* fill any remaining space in the stream with silence. */ | ||||
|         SDL_assert(SDL_CountDataQueue(device->buffer_queue) == 0); | ||||
|         SDL_memset(stream, device->callbackspec.silence, len); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void SDLCALL | ||||
| SDL_BufferQueueFillCallback(void *userdata, Uint8 *stream, int len) | ||||
| static void SDLCALL SDL_BufferQueueFillCallback(void *userdata, Uint8 *stream, int len) | ||||
| { | ||||
|     /* this function always holds the mixer lock before being called. */ | ||||
|     SDL_AudioDevice *device = (SDL_AudioDevice *) userdata; | ||||
|     SDL_AudioDevice *device = (SDL_AudioDevice *)userdata; | ||||
|  | ||||
|     SDL_assert(device != NULL);  /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(device->iscapture);  /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(len >= 0);  /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(device != NULL);    /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(device->iscapture); /* this shouldn't ever happen, right?! */ | ||||
|     SDL_assert(len >= 0);          /* this shouldn't ever happen, right?! */ | ||||
|  | ||||
|     /* note that if this needs to allocate more space and run out of memory, | ||||
|        we have no choice but to quietly drop the data and hope it works out | ||||
| @@ -613,14 +579,13 @@ SDL_BufferQueueFillCallback(void *userdata, Uint8 *stream, int len) | ||||
|     SDL_WriteToDataQueue(device->buffer_queue, stream, len); | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_QueueAudio(SDL_AudioDeviceID devid, const void *data, Uint32 len) | ||||
| int SDL_QueueAudio(SDL_AudioDeviceID devid, const void *data, Uint32 len) | ||||
| { | ||||
|     SDL_AudioDevice *device = get_audio_device(devid); | ||||
|     int rc = 0; | ||||
|  | ||||
|     if (!device) { | ||||
|         return -1;  /* get_audio_device() will have set the error state */ | ||||
|         return -1; /* get_audio_device() will have set the error state */ | ||||
|     } else if (device->iscapture) { | ||||
|         return SDL_SetError("This is a capture device, queueing not allowed"); | ||||
|     } else if (device->callbackspec.callback != SDL_BufferQueueDrainCallback) { | ||||
| @@ -642,15 +607,15 @@ SDL_DequeueAudio(SDL_AudioDeviceID devid, void *data, Uint32 len) | ||||
|     SDL_AudioDevice *device = get_audio_device(devid); | ||||
|     Uint32 rc; | ||||
|  | ||||
|     if ( (len == 0) ||  /* nothing to do? */ | ||||
|          (!device) ||  /* called with bogus device id */ | ||||
|          (!device->iscapture) ||  /* playback devices can't dequeue */ | ||||
|          (device->callbackspec.callback != SDL_BufferQueueFillCallback) ) { /* not set for queueing */ | ||||
|         return 0;  /* just report zero bytes dequeued. */ | ||||
|     if ((len == 0) ||                                                     /* nothing to do? */ | ||||
|         (!device) ||                                                      /* called with bogus device id */ | ||||
|         (!device->iscapture) ||                                           /* playback devices can't dequeue */ | ||||
|         (device->callbackspec.callback != SDL_BufferQueueFillCallback)) { /* not set for queueing */ | ||||
|         return 0;                                                         /* just report zero bytes dequeued. */ | ||||
|     } | ||||
|  | ||||
|     current_audio.impl.LockDevice(device); | ||||
|     rc = (Uint32) SDL_ReadFromDataQueue(device->buffer_queue, data, len); | ||||
|     rc = (Uint32)SDL_ReadFromDataQueue(device->buffer_queue, data, len); | ||||
|     current_audio.impl.UnlockDevice(device); | ||||
|     return rc; | ||||
| } | ||||
| @@ -667,23 +632,21 @@ SDL_GetQueuedAudioSize(SDL_AudioDeviceID devid) | ||||
|  | ||||
|     /* Nothing to do unless we're set up for queueing. */ | ||||
|     if (device->callbackspec.callback == SDL_BufferQueueDrainCallback || | ||||
|         device->callbackspec.callback == SDL_BufferQueueFillCallback) | ||||
|     { | ||||
|         device->callbackspec.callback == SDL_BufferQueueFillCallback) { | ||||
|         current_audio.impl.LockDevice(device); | ||||
|         retval = (Uint32) SDL_CountDataQueue(device->buffer_queue); | ||||
|         retval = (Uint32)SDL_CountDataQueue(device->buffer_queue); | ||||
|         current_audio.impl.UnlockDevice(device); | ||||
|     } | ||||
|  | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_ClearQueuedAudio(SDL_AudioDeviceID devid) | ||||
| void SDL_ClearQueuedAudio(SDL_AudioDeviceID devid) | ||||
| { | ||||
|     SDL_AudioDevice *device = get_audio_device(devid); | ||||
|  | ||||
|     if (!device) { | ||||
|         return;  /* nothing to do. */ | ||||
|         return; /* nothing to do. */ | ||||
|     } | ||||
|  | ||||
|     /* Blank out the device and release the mutex. Free it afterwards. */ | ||||
| @@ -695,12 +658,10 @@ SDL_ClearQueuedAudio(SDL_AudioDeviceID devid) | ||||
|     current_audio.impl.UnlockDevice(device); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* The general mixing thread function */ | ||||
| static int SDLCALL | ||||
| SDL_RunAudio(void *devicep) | ||||
| static int SDLCALL SDL_RunAudio(void *devicep) | ||||
| { | ||||
|     SDL_AudioDevice *device = (SDL_AudioDevice *) devicep; | ||||
|     SDL_AudioDevice *device = (SDL_AudioDevice *)devicep; | ||||
|     void *udata = device->callbackspec.userdata; | ||||
|     SDL_AudioCallback callback = device->callbackspec.callback; | ||||
|     int data_len = 0; | ||||
| @@ -759,15 +720,15 @@ SDL_RunAudio(void *devicep) | ||||
|             /* if this fails...oh well. We'll play silence here. */ | ||||
|             SDL_AudioStreamPut(device->stream, data, data_len); | ||||
|  | ||||
|             while (SDL_AudioStreamAvailable(device->stream) >= ((int) device->spec.size)) { | ||||
|             while (SDL_AudioStreamAvailable(device->stream) >= ((int)device->spec.size)) { | ||||
|                 int got; | ||||
|                 data = SDL_AtomicGet(&device->enabled) ? current_audio.impl.GetDeviceBuf(device) : NULL; | ||||
|                 got = SDL_AudioStreamGet(device->stream, data ? data : device->work_buffer, device->spec.size); | ||||
|                 SDL_assert((got <= 0) || (got == device->spec.size)); | ||||
|  | ||||
|                 if (data == NULL) {  /* device is having issues... */ | ||||
|                 if (data == NULL) { /* device is having issues... */ | ||||
|                     const Uint32 delay = ((device->spec.samples * 1000) / device->spec.freq); | ||||
|                     SDL_Delay(delay);  /* wait for as long as this buffer would have played. Maybe device recovers later? */ | ||||
|                     SDL_Delay(delay); /* wait for as long as this buffer would have played. Maybe device recovers later? */ | ||||
|                 } else { | ||||
|                     if (got != device->spec.size) { | ||||
|                         SDL_memset(data, device->spec.silence, device->spec.size); | ||||
| @@ -780,7 +741,7 @@ SDL_RunAudio(void *devicep) | ||||
|             /* nothing to do; pause like we queued a buffer to play. */ | ||||
|             const Uint32 delay = ((device->spec.samples * 1000) / device->spec.freq); | ||||
|             SDL_Delay(delay); | ||||
|         } else {  /* writing directly to the device. */ | ||||
|         } else { /* writing directly to the device. */ | ||||
|             /* queue this buffer and wait for it to finish playing. */ | ||||
|             current_audio.impl.PlayDevice(device); | ||||
|             current_audio.impl.WaitDevice(device); | ||||
| @@ -797,11 +758,10 @@ SDL_RunAudio(void *devicep) | ||||
|  | ||||
| /* !!! FIXME: this needs to deal with device spec changes. */ | ||||
| /* The general capture thread function */ | ||||
| static int SDLCALL | ||||
| SDL_CaptureAudio(void *devicep) | ||||
| static int SDLCALL SDL_CaptureAudio(void *devicep) | ||||
| { | ||||
|     SDL_AudioDevice *device = (SDL_AudioDevice *) devicep; | ||||
|     const int silence = (int) device->spec.silence; | ||||
|     SDL_AudioDevice *device = (SDL_AudioDevice *)devicep; | ||||
|     const int silence = (int)device->spec.silence; | ||||
|     const Uint32 delay = ((device->spec.samples * 1000) / device->spec.freq); | ||||
|     const int data_len = device->spec.size; | ||||
|     Uint8 *data; | ||||
| @@ -831,11 +791,11 @@ SDL_CaptureAudio(void *devicep) | ||||
|         Uint8 *ptr; | ||||
|  | ||||
|         if (SDL_AtomicGet(&device->paused)) { | ||||
|             SDL_Delay(delay);  /* just so we don't cook the CPU. */ | ||||
|             SDL_Delay(delay); /* just so we don't cook the CPU. */ | ||||
|             if (device->stream) { | ||||
|                 SDL_AudioStreamClear(device->stream); | ||||
|             } | ||||
|             current_audio.impl.FlushCapture(device);  /* dump anything pending. */ | ||||
|             current_audio.impl.FlushCapture(device); /* dump anything pending. */ | ||||
|             continue; | ||||
|         } | ||||
|  | ||||
| @@ -853,15 +813,15 @@ SDL_CaptureAudio(void *devicep) | ||||
|            But we don't process it further or call the app's callback. */ | ||||
|  | ||||
|         if (!SDL_AtomicGet(&device->enabled)) { | ||||
|             SDL_Delay(delay);  /* try to keep callback firing at normal pace. */ | ||||
|             SDL_Delay(delay); /* try to keep callback firing at normal pace. */ | ||||
|         } else { | ||||
|             while (still_need > 0) { | ||||
|                 const int rc = current_audio.impl.CaptureFromDevice(device, ptr, still_need); | ||||
|                 SDL_assert(rc <= still_need);  /* device should not overflow buffer. :) */ | ||||
|                 SDL_assert(rc <= still_need); /* device should not overflow buffer. :) */ | ||||
|                 if (rc > 0) { | ||||
|                     still_need -= rc; | ||||
|                     ptr += rc; | ||||
|                 } else {  /* uhoh, device failed for some reason! */ | ||||
|                 } else { /* uhoh, device failed for some reason! */ | ||||
|                     SDL_OpenedAudioDeviceDisconnected(device); | ||||
|                     break; | ||||
|                 } | ||||
| @@ -877,7 +837,7 @@ SDL_CaptureAudio(void *devicep) | ||||
|             /* if this fails...oh well. */ | ||||
|             SDL_AudioStreamPut(device->stream, data, data_len); | ||||
|  | ||||
|             while (SDL_AudioStreamAvailable(device->stream) >= ((int) device->callbackspec.size)) { | ||||
|             while (SDL_AudioStreamAvailable(device->stream) >= ((int)device->callbackspec.size)) { | ||||
|                 const int got = SDL_AudioStreamGet(device->stream, device->work_buffer, device->callbackspec.size); | ||||
|                 SDL_assert((got < 0) || (got == device->callbackspec.size)); | ||||
|                 if (got != device->callbackspec.size) { | ||||
| @@ -891,7 +851,7 @@ SDL_CaptureAudio(void *devicep) | ||||
|                 } | ||||
|                 SDL_UnlockMutex(device->mixer_lock); | ||||
|             } | ||||
|         } else {  /* feeding user callback directly without streaming. */ | ||||
|         } else { /* feeding user callback directly without streaming. */ | ||||
|             /* !!! FIXME: this should be LockDevice. */ | ||||
|             SDL_LockMutex(device->mixer_lock); | ||||
|             if (!SDL_AtomicGet(&device->paused)) { | ||||
| @@ -908,11 +868,11 @@ SDL_CaptureAudio(void *devicep) | ||||
|     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(S8); | ||||
|     CHECK_FMT_STRING(U16LSB); | ||||
| @@ -935,8 +895,7 @@ SDL_ParseAudioFormat(const char *string) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_GetNumAudioDrivers(void) | ||||
| int SDL_GetNumAudioDrivers(void) | ||||
| { | ||||
|     return SDL_arraysize(bootstrap) - 1; | ||||
| } | ||||
| @@ -950,14 +909,13 @@ SDL_GetAudioDriver(int index) | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_AudioInit(const char *driver_name) | ||||
| int SDL_AudioInit(const char *driver_name) | ||||
| { | ||||
|     int i; | ||||
|     SDL_bool initialized = SDL_FALSE, tried_to_init = SDL_FALSE; | ||||
|  | ||||
|     if (SDL_GetCurrentAudioDriver()) { | ||||
|         SDL_AudioQuit();        /* shutdown driver if already running. */ | ||||
|         SDL_AudioQuit(); /* shutdown driver if already running. */ | ||||
|     } | ||||
|  | ||||
|     SDL_zeroa(open_devices); | ||||
| @@ -1030,7 +988,7 @@ SDL_AudioInit(const char *driver_name) | ||||
|         } | ||||
|  | ||||
|         SDL_zero(current_audio); | ||||
|         return -1;            /* No driver was available, so fail. */ | ||||
|         return -1; /* No driver was available, so fail. */ | ||||
|     } | ||||
|  | ||||
|     current_audio.detectionLock = SDL_CreateMutex(); | ||||
| @@ -1057,8 +1015,7 @@ SDL_GetCurrentAudioDriver() | ||||
| } | ||||
|  | ||||
| /* Clean out devices that we've removed but had to keep around for stability. */ | ||||
| static void | ||||
| clean_out_device_list(SDL_AudioDeviceItem **devices, int *devCount, SDL_bool *removedFlag) | ||||
| static void clean_out_device_list(SDL_AudioDeviceItem **devices, int *devCount, SDL_bool *removedFlag) | ||||
| { | ||||
|     SDL_AudioDeviceItem *item = *devices; | ||||
|     SDL_AudioDeviceItem *prev = NULL; | ||||
| @@ -1089,9 +1046,7 @@ clean_out_device_list(SDL_AudioDeviceItem **devices, int *devCount, SDL_bool *re | ||||
|     *removedFlag = SDL_FALSE; | ||||
| } | ||||
|  | ||||
|  | ||||
| int | ||||
| SDL_GetNumAudioDevices(int iscapture) | ||||
| int SDL_GetNumAudioDevices(int iscapture) | ||||
| { | ||||
|     int retval = 0; | ||||
|  | ||||
| @@ -1114,7 +1069,6 @@ SDL_GetNumAudioDevices(int iscapture) | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
|  | ||||
| const char * | ||||
| SDL_GetAudioDeviceName(int index, int iscapture) | ||||
| { | ||||
| @@ -1145,9 +1099,7 @@ SDL_GetAudioDeviceName(int index, int iscapture) | ||||
|     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; | ||||
|     int i, retval; | ||||
| @@ -1178,9 +1130,7 @@ SDL_GetAudioDeviceSpec(int index, int iscapture, SDL_AudioSpec *spec) | ||||
|     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) { | ||||
|         return SDL_InvalidParamError("spec"); | ||||
| @@ -1196,9 +1146,7 @@ SDL_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int 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) { | ||||
|         return; | ||||
| @@ -1239,34 +1187,32 @@ close_audio_device(SDL_AudioDevice * device) | ||||
|     SDL_free(device); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Sanity check desired AudioSpec for SDL_OpenAudio() in (orig). | ||||
|  *  Fills in a sanitized copy in (prepared). | ||||
|  *  Returns non-zero if okay, zero on fatal parameters in (orig). | ||||
|  */ | ||||
| static int | ||||
| prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared) | ||||
| static int prepare_audiospec(const SDL_AudioSpec *orig, SDL_AudioSpec *prepared) | ||||
| { | ||||
|     SDL_copyp(prepared, orig); | ||||
|  | ||||
|     if (orig->freq == 0) { | ||||
|         const char *env = SDL_getenv("SDL_AUDIO_FREQUENCY"); | ||||
|         if ((!env) || ((prepared->freq = SDL_atoi(env)) == 0)) { | ||||
|             prepared->freq = 22050;     /* a reasonable default */ | ||||
|             prepared->freq = 22050; /* a reasonable default */ | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (orig->format == 0) { | ||||
|         const char *env = SDL_getenv("SDL_AUDIO_FORMAT"); | ||||
|         if ((!env) || ((prepared->format = SDL_ParseAudioFormat(env)) == 0)) { | ||||
|             prepared->format = AUDIO_S16;       /* a reasonable default */ | ||||
|             prepared->format = AUDIO_S16; /* a reasonable default */ | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (orig->channels == 0) { | ||||
|         const char *env = SDL_getenv("SDL_AUDIO_CHANNELS"); | ||||
|         if ((!env) || ((prepared->channels = (Uint8) SDL_atoi(env)) == 0)) { | ||||
|         if ((!env) || ((prepared->channels = (Uint8)SDL_atoi(env)) == 0)) { | ||||
|             prepared->channels = 2; /* a reasonable default */ | ||||
|         } | ||||
|     } else if (orig->channels > 8) { | ||||
| @@ -1276,7 +1222,7 @@ prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared) | ||||
|  | ||||
|     if (orig->samples == 0) { | ||||
|         const char *env = SDL_getenv("SDL_AUDIO_SAMPLES"); | ||||
|         if ((!env) || ((prepared->samples = (Uint16) SDL_atoi(env)) == 0)) { | ||||
|         if ((!env) || ((prepared->samples = (Uint16)SDL_atoi(env)) == 0)) { | ||||
|             /* Pick a default of ~46 ms at desired frequency */ | ||||
|             /* !!! FIXME: remove this when the non-Po2 resampling is in. */ | ||||
|             const int samples = (prepared->freq / 1000) * 46; | ||||
| @@ -1294,10 +1240,9 @@ prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared) | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
| static SDL_AudioDeviceID | ||||
| open_audio_device(const char *devname, int iscapture, | ||||
|                   const SDL_AudioSpec * desired, SDL_AudioSpec * obtained, | ||||
|                   int allowed_changes, int min_id) | ||||
| static SDL_AudioDeviceID open_audio_device(const char *devname, int iscapture, | ||||
|                                            const SDL_AudioSpec *desired, SDL_AudioSpec *obtained, | ||||
|                                            int allowed_changes, int min_id) | ||||
| { | ||||
|     const SDL_bool is_internal_thread = (desired->callback == NULL); | ||||
|     SDL_AudioDeviceID id = 0; | ||||
| @@ -1409,7 +1354,7 @@ open_audio_device(const char *devname, int iscapture, | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     device = (SDL_AudioDevice *) SDL_calloc(1, sizeof (SDL_AudioDevice)); | ||||
|     device = (SDL_AudioDevice *)SDL_calloc(1, sizeof(SDL_AudioDevice)); | ||||
|     if (device == NULL) { | ||||
|         SDL_OutOfMemory(); | ||||
|         SDL_UnlockMutex(current_audio.detectionLock); | ||||
| @@ -1420,7 +1365,7 @@ open_audio_device(const char *devname, int iscapture, | ||||
|     device->iscapture = iscapture ? SDL_TRUE : SDL_FALSE; | ||||
|     device->handle = handle; | ||||
|  | ||||
|     SDL_AtomicSet(&device->shutdown, 0);  /* just in case. */ | ||||
|     SDL_AtomicSet(&device->shutdown, 0); /* just in case. */ | ||||
|     SDL_AtomicSet(&device->paused, 1); | ||||
|     SDL_AtomicSet(&device->enabled, 1); | ||||
|  | ||||
| @@ -1483,19 +1428,19 @@ open_audio_device(const char *devname, int iscapture, | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     SDL_CalculateAudioSpec(obtained);  /* recalc after possible changes. */ | ||||
|     SDL_CalculateAudioSpec(obtained); /* recalc after possible changes. */ | ||||
|  | ||||
|     device->callbackspec = *obtained; | ||||
|  | ||||
|     if (build_stream) { | ||||
|         if (iscapture) { | ||||
|             device->stream = SDL_NewAudioStream(device->spec.format, | ||||
|                                   device->spec.channels, device->spec.freq, | ||||
|                                   obtained->format, obtained->channels, obtained->freq); | ||||
|                                                 device->spec.channels, device->spec.freq, | ||||
|                                                 obtained->format, obtained->channels, obtained->freq); | ||||
|         } else { | ||||
|             device->stream = SDL_NewAudioStream(obtained->format, obtained->channels, | ||||
|                                   obtained->freq, device->spec.format, | ||||
|                                   device->spec.channels, device->spec.freq); | ||||
|                                                 obtained->freq, device->spec.format, | ||||
|                                                 device->spec.channels, device->spec.freq); | ||||
|         } | ||||
|  | ||||
|         if (!device->stream) { | ||||
| @@ -1505,7 +1450,7 @@ open_audio_device(const char *devname, int iscapture, | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (device->spec.callback == NULL) {  /* use buffer queueing? */ | ||||
|     if (device->spec.callback == NULL) { /* use buffer queueing? */ | ||||
|         /* pool a few packets to start. Enough for two callbacks. */ | ||||
|         device->buffer_queue = SDL_NewDataQueue(SDL_AUDIOBUFFERQUEUE_PACKETLEN, obtained->size * 2); | ||||
|         if (!device->buffer_queue) { | ||||
| @@ -1525,7 +1470,7 @@ open_audio_device(const char *devname, int iscapture, | ||||
|     } | ||||
|     SDL_assert(device->work_buffer_len > 0); | ||||
|  | ||||
|     device->work_buffer = (Uint8 *) SDL_malloc(device->work_buffer_len); | ||||
|     device->work_buffer = (Uint8 *)SDL_malloc(device->work_buffer_len); | ||||
|     if (device->work_buffer == NULL) { | ||||
|         close_audio_device(device); | ||||
|         SDL_UnlockMutex(current_audio.detectionLock); | ||||
| @@ -1533,7 +1478,7 @@ open_audio_device(const char *devname, int iscapture, | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     open_devices[id] = device;  /* add it to our list of open devices. */ | ||||
|     open_devices[id] = device; /* add it to our list of open devices. */ | ||||
|  | ||||
|     /* Start the audio thread if necessary */ | ||||
|     if (!current_audio.impl.ProvidesOwnCallbackThread) { | ||||
| @@ -1543,7 +1488,7 @@ open_audio_device(const char *devname, int iscapture, | ||||
|         const size_t stacksize = is_internal_thread ? 64 * 1024 : 0; | ||||
|         char threadname[64]; | ||||
|  | ||||
|         SDL_snprintf(threadname, sizeof (threadname), "SDLAudio%c%d", (iscapture) ? 'C' : 'P', (int) device->id); | ||||
|         SDL_snprintf(threadname, sizeof(threadname), "SDLAudio%c%d", (iscapture) ? 'C' : 'P', (int)device->id); | ||||
|         device->thread = SDL_CreateThreadInternal(iscapture ? SDL_CaptureAudio : SDL_RunAudio, threadname, stacksize, device); | ||||
|  | ||||
|         if (device->thread == NULL) { | ||||
| @@ -1558,9 +1503,7 @@ open_audio_device(const char *devname, int iscapture, | ||||
|     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; | ||||
|  | ||||
| @@ -1596,7 +1539,7 @@ SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained) | ||||
|  | ||||
| SDL_AudioDeviceID | ||||
| SDL_OpenAudioDevice(const char *device, int iscapture, | ||||
|                     const SDL_AudioSpec * desired, SDL_AudioSpec * obtained, | ||||
|                     const SDL_AudioSpec *desired, SDL_AudioSpec *obtained, | ||||
|                     int allowed_changes) | ||||
| { | ||||
|     return open_audio_device(device, iscapture, desired, obtained, | ||||
| @@ -1618,15 +1561,13 @@ SDL_GetAudioDeviceStatus(SDL_AudioDeviceID devid) | ||||
|     return status; | ||||
| } | ||||
|  | ||||
|  | ||||
| SDL_AudioStatus | ||||
| SDL_GetAudioStatus(void) | ||||
| { | ||||
|     return SDL_GetAudioDeviceStatus(1); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_PauseAudioDevice(SDL_AudioDeviceID devid, int pause_on) | ||||
| void SDL_PauseAudioDevice(SDL_AudioDeviceID devid, int pause_on) | ||||
| { | ||||
|     SDL_AudioDevice *device = get_audio_device(devid); | ||||
|     if (device) { | ||||
| @@ -1636,15 +1577,12 @@ SDL_PauseAudioDevice(SDL_AudioDeviceID devid, int pause_on) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_PauseAudio(int pause_on) | ||||
| void SDL_PauseAudio(int 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 */ | ||||
|     SDL_AudioDevice *device = get_audio_device(devid); | ||||
| @@ -1653,14 +1591,12 @@ SDL_LockAudioDevice(SDL_AudioDeviceID devid) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_LockAudio(void) | ||||
| void SDL_LockAudio(void) | ||||
| { | ||||
|     SDL_LockAudioDevice(1); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_UnlockAudioDevice(SDL_AudioDeviceID devid) | ||||
| void SDL_UnlockAudioDevice(SDL_AudioDeviceID devid) | ||||
| { | ||||
|     /* Obtain a lock on the mixing buffers */ | ||||
|     SDL_AudioDevice *device = get_audio_device(devid); | ||||
| @@ -1669,30 +1605,26 @@ SDL_UnlockAudioDevice(SDL_AudioDeviceID devid) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_UnlockAudio(void) | ||||
| void SDL_UnlockAudio(void) | ||||
| { | ||||
|     SDL_UnlockAudioDevice(1); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_CloseAudioDevice(SDL_AudioDeviceID devid) | ||||
| void SDL_CloseAudioDevice(SDL_AudioDeviceID devid) | ||||
| { | ||||
|     close_audio_device(get_audio_device(devid)); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_CloseAudio(void) | ||||
| void SDL_CloseAudio(void) | ||||
| { | ||||
|     SDL_CloseAudioDevice(1); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_AudioQuit(void) | ||||
| void SDL_AudioQuit(void) | ||||
| { | ||||
|     SDL_AudioDeviceID i; | ||||
|  | ||||
|     if (!current_audio.name) {  /* not initialized?! */ | ||||
|     if (!current_audio.name) { /* not initialized?! */ | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -1720,26 +1652,26 @@ SDL_AudioQuit(void) | ||||
| static int format_idx; | ||||
| static int format_idx_sub; | ||||
| static SDL_AudioFormat format_list[NUM_FORMATS][NUM_FORMATS] = { | ||||
|     {AUDIO_U8, AUDIO_S8, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_U16LSB, | ||||
|      AUDIO_U16MSB, AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB}, | ||||
|     {AUDIO_S8, AUDIO_U8, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_U16LSB, | ||||
|      AUDIO_U16MSB, AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB}, | ||||
|     {AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_S32LSB, | ||||
|      AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_U8, AUDIO_S8}, | ||||
|     {AUDIO_S16MSB, AUDIO_S16LSB, AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_S32MSB, | ||||
|      AUDIO_S32LSB, AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_U8, AUDIO_S8}, | ||||
|     {AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_S32LSB, | ||||
|      AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_U8, AUDIO_S8}, | ||||
|     {AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_S16MSB, AUDIO_S16LSB, AUDIO_S32MSB, | ||||
|      AUDIO_S32LSB, AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_U8, AUDIO_S8}, | ||||
|     {AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_S16LSB, | ||||
|      AUDIO_S16MSB, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_U8, AUDIO_S8}, | ||||
|     {AUDIO_S32MSB, AUDIO_S32LSB, AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_S16MSB, | ||||
|      AUDIO_S16LSB, AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_U8, AUDIO_S8}, | ||||
|     {AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_S16LSB, | ||||
|      AUDIO_S16MSB, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_U8, AUDIO_S8}, | ||||
|     {AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_S32MSB, AUDIO_S32LSB, AUDIO_S16MSB, | ||||
|      AUDIO_S16LSB, AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_U8, AUDIO_S8}, | ||||
|     { AUDIO_U8, AUDIO_S8, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_U16LSB, | ||||
|       AUDIO_U16MSB, AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB }, | ||||
|     { AUDIO_S8, AUDIO_U8, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_U16LSB, | ||||
|       AUDIO_U16MSB, AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB }, | ||||
|     { AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_S32LSB, | ||||
|       AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_U8, AUDIO_S8 }, | ||||
|     { AUDIO_S16MSB, AUDIO_S16LSB, AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_S32MSB, | ||||
|       AUDIO_S32LSB, AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_U8, AUDIO_S8 }, | ||||
|     { AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_S32LSB, | ||||
|       AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_U8, AUDIO_S8 }, | ||||
|     { AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_S16MSB, AUDIO_S16LSB, AUDIO_S32MSB, | ||||
|       AUDIO_S32LSB, AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_U8, AUDIO_S8 }, | ||||
|     { AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_S16LSB, | ||||
|       AUDIO_S16MSB, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_U8, AUDIO_S8 }, | ||||
|     { AUDIO_S32MSB, AUDIO_S32LSB, AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_S16MSB, | ||||
|       AUDIO_S16LSB, AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_U8, AUDIO_S8 }, | ||||
|     { AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_S16LSB, | ||||
|       AUDIO_S16MSB, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_U8, AUDIO_S8 }, | ||||
|     { AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_S32MSB, AUDIO_S32LSB, AUDIO_S16MSB, | ||||
|       AUDIO_S16LSB, AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_U8, AUDIO_S8 }, | ||||
| }; | ||||
|  | ||||
| SDL_AudioFormat | ||||
| @@ -1763,26 +1695,25 @@ SDL_NextAudioFormat(void) | ||||
|     return format_list[format_idx][format_idx_sub++]; | ||||
| } | ||||
|  | ||||
| Uint8 | ||||
| SDL_SilenceValueForFormat(const SDL_AudioFormat format) | ||||
| Uint8 SDL_SilenceValueForFormat(const SDL_AudioFormat format) | ||||
| { | ||||
|     switch (format) { | ||||
|         /* !!! FIXME: 0x80 isn't perfect for U16, but we can't fit 0x8000 in a | ||||
|            !!! FIXME:  byte for SDL_memset() use. This is actually 0.1953 percent | ||||
|            !!! FIXME:  off from silence. Maybe just don't use U16. */ | ||||
|         case AUDIO_U16LSB: | ||||
|         case AUDIO_U16MSB: | ||||
|         case AUDIO_U8: | ||||
|             return 0x80; | ||||
|     /* !!! FIXME: 0x80 isn't perfect for U16, but we can't fit 0x8000 in a | ||||
|        !!! FIXME:  byte for SDL_memset() use. This is actually 0.1953 percent | ||||
|        !!! FIXME:  off from silence. Maybe just don't use U16. */ | ||||
|     case AUDIO_U16LSB: | ||||
|     case AUDIO_U16MSB: | ||||
|     case AUDIO_U8: | ||||
|         return 0x80; | ||||
|  | ||||
|         default: break; | ||||
|     default: | ||||
|         break; | ||||
|     } | ||||
|  | ||||
|     return 0x00; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_CalculateAudioSpec(SDL_AudioSpec * spec) | ||||
| void SDL_CalculateAudioSpec(SDL_AudioSpec *spec) | ||||
| { | ||||
|     spec->silence = SDL_SilenceValueForFormat(spec->format); | ||||
|     spec->size = SDL_AUDIO_BITSIZE(spec->format) / 8; | ||||
| @@ -1790,13 +1721,11 @@ SDL_CalculateAudioSpec(SDL_AudioSpec * spec) | ||||
|     spec->size *= spec->samples; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Moved here from SDL_mixer.c, since it relies on internals of an opened | ||||
|  *  audio device (and is deprecated, by the way!). | ||||
|  */ | ||||
| void | ||||
| SDL_MixAudio(Uint8 * dst, const Uint8 * src, Uint32 len, int volume) | ||||
| void SDL_MixAudio(Uint8 *dst, const Uint8 *src, Uint32 len, int volume) | ||||
| { | ||||
|     /* Mix the user-level audio format */ | ||||
|     SDL_AudioDevice *device = get_audio_device(1); | ||||
|   | ||||
| @@ -40,11 +40,11 @@ | ||||
| #include "samplerate.h" | ||||
| extern SDL_bool SRC_available; | ||||
| extern int SRC_converter; | ||||
| extern SRC_STATE* (*SRC_src_new)(int converter_type, int channels, int *error); | ||||
| extern SRC_STATE *(*SRC_src_new)(int converter_type, int channels, int *error); | ||||
| extern int (*SRC_src_process)(SRC_STATE *state, SRC_DATA *data); | ||||
| extern int (*SRC_src_reset)(SRC_STATE *state); | ||||
| extern SRC_STATE* (*SRC_src_delete)(SRC_STATE *state); | ||||
| extern const char* (*SRC_src_strerror)(int error); | ||||
| extern SRC_STATE *(*SRC_src_delete)(SRC_STATE *state); | ||||
| extern const char *(*SRC_src_strerror)(int error); | ||||
| extern int (*SRC_src_simple)(SRC_DATA *data, int converter_type, int channels); | ||||
| #endif | ||||
|  | ||||
| @@ -54,7 +54,7 @@ extern SDL_AudioFormat SDL_NextAudioFormat(void); | ||||
|  | ||||
| /* Function to calculate the size and silence for a SDL_AudioSpec */ | ||||
| extern Uint8 SDL_SilenceValueForFormat(const SDL_AudioFormat format); | ||||
| extern void SDL_CalculateAudioSpec(SDL_AudioSpec * spec); | ||||
| extern void SDL_CalculateAudioSpec(SDL_AudioSpec *spec); | ||||
|  | ||||
| /* Choose the audio filter functions below */ | ||||
| extern void SDL_ChooseAudioConverters(void); | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -21,10 +21,10 @@ | ||||
|  | ||||
| /* DO NOT EDIT, THIS FILE WAS GENERATED BY build-scripts/gen_audio_resampler_filter.c */ | ||||
|  | ||||
| #define RESAMPLER_ZERO_CROSSINGS 5 | ||||
| #define RESAMPLER_BITS_PER_SAMPLE 16 | ||||
| #define RESAMPLER_ZERO_CROSSINGS            5 | ||||
| #define RESAMPLER_BITS_PER_SAMPLE           16 | ||||
| #define RESAMPLER_SAMPLES_PER_ZERO_CROSSING (1 << ((RESAMPLER_BITS_PER_SAMPLE / 2) + 1)) | ||||
| #define RESAMPLER_FILTER_SIZE ((RESAMPLER_SAMPLES_PER_ZERO_CROSSING * RESAMPLER_ZERO_CROSSINGS) + 1) | ||||
| #define RESAMPLER_FILTER_SIZE               ((RESAMPLER_SAMPLES_PER_ZERO_CROSSING * RESAMPLER_ZERO_CROSSINGS) + 1) | ||||
|  | ||||
| static const float ResamplerFilter[RESAMPLER_FILTER_SIZE] = { | ||||
|     1.000000000f, 0.999993682f, 0.999974370f, 0.999941289f, 0.999894559f, | ||||
| @@ -1059,4 +1059,3 @@ static const float ResamplerFilterDifference[RESAMPLER_FILTER_SIZE] = { | ||||
| }; | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|  | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -34,9 +34,9 @@ | ||||
|  | ||||
| #ifndef _PATH_DEV_DSP | ||||
| #if defined(__NETBSD__) || defined(__OPENBSD__) | ||||
| #define _PATH_DEV_DSP  "/dev/audio" | ||||
| #define _PATH_DEV_DSP "/dev/audio" | ||||
| #else | ||||
| #define _PATH_DEV_DSP  "/dev/dsp" | ||||
| #define _PATH_DEV_DSP "/dev/dsp" | ||||
| #endif | ||||
| #endif | ||||
| #ifndef _PATH_DEV_DSP24 | ||||
| @@ -46,8 +46,7 @@ | ||||
| #define _PATH_DEV_AUDIO "/dev/audio" | ||||
| #endif | ||||
|  | ||||
| static void | ||||
| test_device(const int iscapture, const char *fname, int flags, int (*test) (int fd)) | ||||
| static void test_device(const int iscapture, const char *fname, int flags, int (*test)(int fd)) | ||||
| { | ||||
|     struct stat sb; | ||||
|     if ((stat(fname, &sb) == 0) && (S_ISCHR(sb.st_mode))) { | ||||
| @@ -65,20 +64,18 @@ test_device(const int iscapture, const char *fname, int flags, int (*test) (int | ||||
|                  * information,  making this information inaccessible at | ||||
|                  * enumeration time | ||||
|                  */ | ||||
|                 SDL_AddAudioDevice(iscapture, fname, NULL, (void *) (uintptr_t) dummyhandle); | ||||
|                 SDL_AddAudioDevice(iscapture, fname, NULL, (void *)(uintptr_t)dummyhandle); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| test_stub(int fd) | ||||
| static int test_stub(int fd) | ||||
| { | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_EnumUnixAudioDevices_Internal(const int iscapture, const int classic, int (*test)(int)) | ||||
| static void SDL_EnumUnixAudioDevices_Internal(const int iscapture, const int classic, int (*test)(int)) | ||||
| { | ||||
|     const int flags = iscapture ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT; | ||||
|     const char *audiodev; | ||||
| @@ -97,9 +94,7 @@ SDL_EnumUnixAudioDevices_Internal(const int iscapture, const int classic, int (* | ||||
|             struct stat sb; | ||||
|  | ||||
|             /* Added support for /dev/sound/\* in Linux 2.4 */ | ||||
|             if (((stat("/dev/sound", &sb) == 0) && S_ISDIR(sb.st_mode)) | ||||
|                 && ((stat(_PATH_DEV_DSP24, &sb) == 0) | ||||
|                     && S_ISCHR(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))) { | ||||
|                 audiodev = _PATH_DEV_DSP24; | ||||
|             } else { | ||||
|                 audiodev = _PATH_DEV_DSP; | ||||
| @@ -119,8 +114,7 @@ SDL_EnumUnixAudioDevices_Internal(const int iscapture, const int classic, int (* | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_EnumUnixAudioDevices(const int classic, int (*test)(int)) | ||||
| void SDL_EnumUnixAudioDevices(const int classic, int (*test)(int)) | ||||
| { | ||||
|     SDL_EnumUnixAudioDevices_Internal(SDL_TRUE, classic, test); | ||||
|     SDL_EnumUnixAudioDevices_Internal(SDL_FALSE, classic, test); | ||||
|   | ||||
| @@ -31,10 +31,10 @@ | ||||
|  | ||||
| #ifdef USE_BLOCKING_WRITES | ||||
| #define OPEN_FLAGS_OUTPUT O_WRONLY | ||||
| #define OPEN_FLAGS_INPUT O_RDONLY | ||||
| #define OPEN_FLAGS_INPUT  O_RDONLY | ||||
| #else | ||||
| #define OPEN_FLAGS_OUTPUT (O_WRONLY|O_NONBLOCK) | ||||
| #define OPEN_FLAGS_INPUT (O_RDONLY|O_NONBLOCK) | ||||
| #define OPEN_FLAGS_OUTPUT (O_WRONLY | O_NONBLOCK) | ||||
| #define OPEN_FLAGS_INPUT  (O_RDONLY | O_NONBLOCK) | ||||
| #endif | ||||
|  | ||||
| extern void SDL_EnumUnixAudioDevices(const int classic, int (*test)(int)); | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -81,14 +81,12 @@ static const Uint8 mix8[] = { | ||||
| }; | ||||
|  | ||||
| /* The volume ranges from 0 - 128 */ | ||||
| #define ADJUST_VOLUME(s, v) (s = (s*v)/SDL_MIX_MAXVOLUME) | ||||
| #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(s, v)     (s = (s * v) / SDL_MIX_MAXVOLUME) | ||||
| #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) | ||||
|  | ||||
|  | ||||
| void | ||||
| SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format, | ||||
|                    Uint32 len, int volume) | ||||
| void SDL_MixAudioFormat(Uint8 *dst, const Uint8 *src, SDL_AudioFormat format, | ||||
|                         Uint32 len, int volume) | ||||
| { | ||||
|     if (volume == 0) { | ||||
|         return; | ||||
| @@ -97,258 +95,248 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format, | ||||
|     switch (format) { | ||||
|  | ||||
|     case AUDIO_U8: | ||||
|         { | ||||
|             Uint8 src_sample; | ||||
|     { | ||||
|         Uint8 src_sample; | ||||
|  | ||||
|             while (len--) { | ||||
|                 src_sample = *src; | ||||
|                 ADJUST_VOLUME_U8(src_sample, volume); | ||||
|                 *dst = mix8[*dst + src_sample]; | ||||
|                 ++dst; | ||||
|                 ++src; | ||||
|             } | ||||
|         while (len--) { | ||||
|             src_sample = *src; | ||||
|             ADJUST_VOLUME_U8(src_sample, volume); | ||||
|             *dst = mix8[*dst + src_sample]; | ||||
|             ++dst; | ||||
|             ++src; | ||||
|         } | ||||
|         break; | ||||
|     } break; | ||||
|  | ||||
|     case AUDIO_S8: | ||||
|         { | ||||
|             Sint8 *dst8, *src8; | ||||
|             Sint8 src_sample; | ||||
|             int dst_sample; | ||||
|             const int max_audioval = SDL_MAX_SINT8; | ||||
|             const int min_audioval = SDL_MIN_SINT8; | ||||
|     { | ||||
|         Sint8 *dst8, *src8; | ||||
|         Sint8 src_sample; | ||||
|         int dst_sample; | ||||
|         const int max_audioval = SDL_MAX_SINT8; | ||||
|         const int min_audioval = SDL_MIN_SINT8; | ||||
|  | ||||
|             src8 = (Sint8 *) src; | ||||
|             dst8 = (Sint8 *) dst; | ||||
|             while (len--) { | ||||
|                 src_sample = *src8; | ||||
|                 ADJUST_VOLUME(src_sample, volume); | ||||
|                 dst_sample = *dst8 + src_sample; | ||||
|                 if (dst_sample > max_audioval) { | ||||
|                     dst_sample = max_audioval; | ||||
|                 } else if (dst_sample < min_audioval) { | ||||
|                     dst_sample = min_audioval; | ||||
|                 } | ||||
|                 *dst8 = dst_sample; | ||||
|                 ++dst8; | ||||
|                 ++src8; | ||||
|         src8 = (Sint8 *)src; | ||||
|         dst8 = (Sint8 *)dst; | ||||
|         while (len--) { | ||||
|             src_sample = *src8; | ||||
|             ADJUST_VOLUME(src_sample, volume); | ||||
|             dst_sample = *dst8 + src_sample; | ||||
|             if (dst_sample > max_audioval) { | ||||
|                 dst_sample = max_audioval; | ||||
|             } else if (dst_sample < min_audioval) { | ||||
|                 dst_sample = min_audioval; | ||||
|             } | ||||
|             *dst8 = dst_sample; | ||||
|             ++dst8; | ||||
|             ++src8; | ||||
|         } | ||||
|         break; | ||||
|     } break; | ||||
|  | ||||
|     case AUDIO_S16LSB: | ||||
|         { | ||||
|             Sint16 src1, src2; | ||||
|             int dst_sample; | ||||
|             const int max_audioval = SDL_MAX_SINT16; | ||||
|             const int min_audioval = SDL_MIN_SINT16; | ||||
|     { | ||||
|         Sint16 src1, src2; | ||||
|         int dst_sample; | ||||
|         const int max_audioval = SDL_MAX_SINT16; | ||||
|         const int min_audioval = SDL_MIN_SINT16; | ||||
|  | ||||
|             len /= 2; | ||||
|             while (len--) { | ||||
|                 src1 = SDL_SwapLE16(*(Sint16 *)src); | ||||
|                 ADJUST_VOLUME(src1, volume); | ||||
|                 src2 = SDL_SwapLE16(*(Sint16 *)dst); | ||||
|                 src += 2; | ||||
|                 dst_sample = src1 + src2; | ||||
|                 if (dst_sample > max_audioval) { | ||||
|                     dst_sample = max_audioval; | ||||
|                 } else if (dst_sample < min_audioval) { | ||||
|                     dst_sample = min_audioval; | ||||
|                 } | ||||
|                 *(Sint16 *)dst = SDL_SwapLE16(dst_sample); | ||||
|                 dst += 2; | ||||
|         len /= 2; | ||||
|         while (len--) { | ||||
|             src1 = SDL_SwapLE16(*(Sint16 *)src); | ||||
|             ADJUST_VOLUME(src1, volume); | ||||
|             src2 = SDL_SwapLE16(*(Sint16 *)dst); | ||||
|             src += 2; | ||||
|             dst_sample = src1 + src2; | ||||
|             if (dst_sample > max_audioval) { | ||||
|                 dst_sample = max_audioval; | ||||
|             } else if (dst_sample < min_audioval) { | ||||
|                 dst_sample = min_audioval; | ||||
|             } | ||||
|             *(Sint16 *)dst = SDL_SwapLE16(dst_sample); | ||||
|             dst += 2; | ||||
|         } | ||||
|         break; | ||||
|     } break; | ||||
|  | ||||
|     case AUDIO_S16MSB: | ||||
|         { | ||||
|             Sint16 src1, src2; | ||||
|             int dst_sample; | ||||
|             const int max_audioval = SDL_MAX_SINT16; | ||||
|             const int min_audioval = SDL_MIN_SINT16; | ||||
|     { | ||||
|         Sint16 src1, src2; | ||||
|         int dst_sample; | ||||
|         const int max_audioval = SDL_MAX_SINT16; | ||||
|         const int min_audioval = SDL_MIN_SINT16; | ||||
|  | ||||
|             len /= 2; | ||||
|             while (len--) { | ||||
|                 src1 = SDL_SwapBE16(*(Sint16 *)src); | ||||
|                 ADJUST_VOLUME(src1, volume); | ||||
|                 src2 = SDL_SwapBE16(*(Sint16 *)dst); | ||||
|                 src += 2; | ||||
|                 dst_sample = src1 + src2; | ||||
|                 if (dst_sample > max_audioval) { | ||||
|                     dst_sample = max_audioval; | ||||
|                 } else if (dst_sample < min_audioval) { | ||||
|                     dst_sample = min_audioval; | ||||
|                 } | ||||
|                 *(Sint16 *)dst = SDL_SwapBE16(dst_sample); | ||||
|                 dst += 2; | ||||
|         len /= 2; | ||||
|         while (len--) { | ||||
|             src1 = SDL_SwapBE16(*(Sint16 *)src); | ||||
|             ADJUST_VOLUME(src1, volume); | ||||
|             src2 = SDL_SwapBE16(*(Sint16 *)dst); | ||||
|             src += 2; | ||||
|             dst_sample = src1 + src2; | ||||
|             if (dst_sample > max_audioval) { | ||||
|                 dst_sample = max_audioval; | ||||
|             } else if (dst_sample < min_audioval) { | ||||
|                 dst_sample = min_audioval; | ||||
|             } | ||||
|             *(Sint16 *)dst = SDL_SwapBE16(dst_sample); | ||||
|             dst += 2; | ||||
|         } | ||||
|         break; | ||||
|     } break; | ||||
|  | ||||
|     case AUDIO_U16LSB: | ||||
|         { | ||||
|             Uint16 src1, src2; | ||||
|             int dst_sample; | ||||
|             const int max_audioval = SDL_MAX_SINT16; | ||||
|             const int min_audioval = SDL_MIN_SINT16; | ||||
|     { | ||||
|         Uint16 src1, src2; | ||||
|         int dst_sample; | ||||
|         const int max_audioval = SDL_MAX_SINT16; | ||||
|         const int min_audioval = SDL_MIN_SINT16; | ||||
|  | ||||
|             len /= 2; | ||||
|             while (len--) { | ||||
|                 src1 = SDL_SwapLE16(*(Uint16 *)src); | ||||
|                 ADJUST_VOLUME_U16(src1, volume); | ||||
|                 src2 = SDL_SwapLE16(*(Uint16 *)dst); | ||||
|                 src += 2; | ||||
|                 dst_sample = src1 + src2 - 32768 * 2; | ||||
|                 if (dst_sample > max_audioval) { | ||||
|                     dst_sample = max_audioval; | ||||
|                 } else if (dst_sample < min_audioval) { | ||||
|                     dst_sample = min_audioval; | ||||
|                 } | ||||
|                 dst_sample += 32768; | ||||
|                 *(Uint16 *)dst = SDL_SwapLE16(dst_sample); | ||||
|                 dst += 2; | ||||
|         len /= 2; | ||||
|         while (len--) { | ||||
|             src1 = SDL_SwapLE16(*(Uint16 *)src); | ||||
|             ADJUST_VOLUME_U16(src1, volume); | ||||
|             src2 = SDL_SwapLE16(*(Uint16 *)dst); | ||||
|             src += 2; | ||||
|             dst_sample = src1 + src2 - 32768 * 2; | ||||
|             if (dst_sample > max_audioval) { | ||||
|                 dst_sample = max_audioval; | ||||
|             } else if (dst_sample < min_audioval) { | ||||
|                 dst_sample = min_audioval; | ||||
|             } | ||||
|             dst_sample += 32768; | ||||
|             *(Uint16 *)dst = SDL_SwapLE16(dst_sample); | ||||
|             dst += 2; | ||||
|         } | ||||
|         break; | ||||
|     } break; | ||||
|  | ||||
|     case AUDIO_U16MSB: | ||||
|         { | ||||
|             Uint16 src1, src2; | ||||
|             int dst_sample; | ||||
|             const int max_audioval = SDL_MAX_SINT16; | ||||
|             const int min_audioval = SDL_MIN_SINT16; | ||||
|     { | ||||
|         Uint16 src1, src2; | ||||
|         int dst_sample; | ||||
|         const int max_audioval = SDL_MAX_SINT16; | ||||
|         const int min_audioval = SDL_MIN_SINT16; | ||||
|  | ||||
|             len /= 2; | ||||
|             while (len--) { | ||||
|                 src1 = SDL_SwapBE16(*(Uint16 *)src); | ||||
|                 ADJUST_VOLUME_U16(src1, volume); | ||||
|                 src2 = SDL_SwapBE16(*(Uint16 *)dst); | ||||
|                 src += 2; | ||||
|                 dst_sample = src1 + src2 - 32768 * 2; | ||||
|                 if (dst_sample > max_audioval) { | ||||
|                     dst_sample = max_audioval; | ||||
|                 } else if (dst_sample < min_audioval) { | ||||
|                     dst_sample = min_audioval; | ||||
|                 } | ||||
|                 dst_sample += 32768; | ||||
|                 *(Uint16 *)dst = SDL_SwapBE16(dst_sample); | ||||
|                 dst += 2; | ||||
|         len /= 2; | ||||
|         while (len--) { | ||||
|             src1 = SDL_SwapBE16(*(Uint16 *)src); | ||||
|             ADJUST_VOLUME_U16(src1, volume); | ||||
|             src2 = SDL_SwapBE16(*(Uint16 *)dst); | ||||
|             src += 2; | ||||
|             dst_sample = src1 + src2 - 32768 * 2; | ||||
|             if (dst_sample > max_audioval) { | ||||
|                 dst_sample = max_audioval; | ||||
|             } else if (dst_sample < min_audioval) { | ||||
|                 dst_sample = min_audioval; | ||||
|             } | ||||
|             dst_sample += 32768; | ||||
|             *(Uint16 *)dst = SDL_SwapBE16(dst_sample); | ||||
|             dst += 2; | ||||
|         } | ||||
|         break; | ||||
|     } break; | ||||
|  | ||||
|     case AUDIO_S32LSB: | ||||
|         { | ||||
|             const Uint32 *src32 = (Uint32 *) src; | ||||
|             Uint32 *dst32 = (Uint32 *) dst; | ||||
|             Sint64 src1, src2; | ||||
|             Sint64 dst_sample; | ||||
|             const Sint64 max_audioval = SDL_MAX_SINT32; | ||||
|             const Sint64 min_audioval = SDL_MIN_SINT32; | ||||
|     { | ||||
|         const Uint32 *src32 = (Uint32 *)src; | ||||
|         Uint32 *dst32 = (Uint32 *)dst; | ||||
|         Sint64 src1, src2; | ||||
|         Sint64 dst_sample; | ||||
|         const Sint64 max_audioval = SDL_MAX_SINT32; | ||||
|         const Sint64 min_audioval = SDL_MIN_SINT32; | ||||
|  | ||||
|             len /= 4; | ||||
|             while (len--) { | ||||
|                 src1 = (Sint64) ((Sint32) SDL_SwapLE32(*src32)); | ||||
|                 src32++; | ||||
|                 ADJUST_VOLUME(src1, volume); | ||||
|                 src2 = (Sint64) ((Sint32) SDL_SwapLE32(*dst32)); | ||||
|                 dst_sample = src1 + src2; | ||||
|                 if (dst_sample > max_audioval) { | ||||
|                     dst_sample = max_audioval; | ||||
|                 } else if (dst_sample < min_audioval) { | ||||
|                     dst_sample = min_audioval; | ||||
|                 } | ||||
|                 *(dst32++) = SDL_SwapLE32((Uint32) ((Sint32) dst_sample)); | ||||
|         len /= 4; | ||||
|         while (len--) { | ||||
|             src1 = (Sint64)((Sint32)SDL_SwapLE32(*src32)); | ||||
|             src32++; | ||||
|             ADJUST_VOLUME(src1, volume); | ||||
|             src2 = (Sint64)((Sint32)SDL_SwapLE32(*dst32)); | ||||
|             dst_sample = src1 + src2; | ||||
|             if (dst_sample > max_audioval) { | ||||
|                 dst_sample = max_audioval; | ||||
|             } else if (dst_sample < min_audioval) { | ||||
|                 dst_sample = min_audioval; | ||||
|             } | ||||
|             *(dst32++) = SDL_SwapLE32((Uint32)((Sint32)dst_sample)); | ||||
|         } | ||||
|         break; | ||||
|     } break; | ||||
|  | ||||
|     case AUDIO_S32MSB: | ||||
|         { | ||||
|             const Uint32 *src32 = (Uint32 *) src; | ||||
|             Uint32 *dst32 = (Uint32 *) dst; | ||||
|             Sint64 src1, src2; | ||||
|             Sint64 dst_sample; | ||||
|             const Sint64 max_audioval = SDL_MAX_SINT32; | ||||
|             const Sint64 min_audioval = SDL_MIN_SINT32; | ||||
|     { | ||||
|         const Uint32 *src32 = (Uint32 *)src; | ||||
|         Uint32 *dst32 = (Uint32 *)dst; | ||||
|         Sint64 src1, src2; | ||||
|         Sint64 dst_sample; | ||||
|         const Sint64 max_audioval = SDL_MAX_SINT32; | ||||
|         const Sint64 min_audioval = SDL_MIN_SINT32; | ||||
|  | ||||
|             len /= 4; | ||||
|             while (len--) { | ||||
|                 src1 = (Sint64) ((Sint32) SDL_SwapBE32(*src32)); | ||||
|                 src32++; | ||||
|                 ADJUST_VOLUME(src1, volume); | ||||
|                 src2 = (Sint64) ((Sint32) SDL_SwapBE32(*dst32)); | ||||
|                 dst_sample = src1 + src2; | ||||
|                 if (dst_sample > max_audioval) { | ||||
|                     dst_sample = max_audioval; | ||||
|                 } else if (dst_sample < min_audioval) { | ||||
|                     dst_sample = min_audioval; | ||||
|                 } | ||||
|                 *(dst32++) = SDL_SwapBE32((Uint32) ((Sint32) dst_sample)); | ||||
|         len /= 4; | ||||
|         while (len--) { | ||||
|             src1 = (Sint64)((Sint32)SDL_SwapBE32(*src32)); | ||||
|             src32++; | ||||
|             ADJUST_VOLUME(src1, volume); | ||||
|             src2 = (Sint64)((Sint32)SDL_SwapBE32(*dst32)); | ||||
|             dst_sample = src1 + src2; | ||||
|             if (dst_sample > max_audioval) { | ||||
|                 dst_sample = max_audioval; | ||||
|             } else if (dst_sample < min_audioval) { | ||||
|                 dst_sample = min_audioval; | ||||
|             } | ||||
|             *(dst32++) = SDL_SwapBE32((Uint32)((Sint32)dst_sample)); | ||||
|         } | ||||
|         break; | ||||
|     } break; | ||||
|  | ||||
|     case AUDIO_F32LSB: | ||||
|         { | ||||
|             const float fmaxvolume = 1.0f / ((float) SDL_MIX_MAXVOLUME); | ||||
|             const float fvolume = (float) volume; | ||||
|             const float *src32 = (float *) src; | ||||
|             float *dst32 = (float *) dst; | ||||
|             float src1, src2; | ||||
|             double dst_sample; | ||||
|             /* !!! FIXME: are these right? */ | ||||
|             const double max_audioval = 3.402823466e+38F; | ||||
|             const double min_audioval = -3.402823466e+38F; | ||||
|     { | ||||
|         const float fmaxvolume = 1.0f / ((float)SDL_MIX_MAXVOLUME); | ||||
|         const float fvolume = (float)volume; | ||||
|         const float *src32 = (float *)src; | ||||
|         float *dst32 = (float *)dst; | ||||
|         float src1, src2; | ||||
|         double dst_sample; | ||||
|         /* !!! FIXME: are these right? */ | ||||
|         const double max_audioval = 3.402823466e+38F; | ||||
|         const double min_audioval = -3.402823466e+38F; | ||||
|  | ||||
|             len /= 4; | ||||
|             while (len--) { | ||||
|                 src1 = ((SDL_SwapFloatLE(*src32) * fvolume) * fmaxvolume); | ||||
|                 src2 = SDL_SwapFloatLE(*dst32); | ||||
|                 src32++; | ||||
|         len /= 4; | ||||
|         while (len--) { | ||||
|             src1 = ((SDL_SwapFloatLE(*src32) * fvolume) * fmaxvolume); | ||||
|             src2 = SDL_SwapFloatLE(*dst32); | ||||
|             src32++; | ||||
|  | ||||
|                 dst_sample = ((double) src1) + ((double) src2); | ||||
|                 if (dst_sample > max_audioval) { | ||||
|                     dst_sample = max_audioval; | ||||
|                 } else if (dst_sample < min_audioval) { | ||||
|                     dst_sample = min_audioval; | ||||
|                 } | ||||
|                 *(dst32++) = SDL_SwapFloatLE((float) dst_sample); | ||||
|             dst_sample = ((double)src1) + ((double)src2); | ||||
|             if (dst_sample > max_audioval) { | ||||
|                 dst_sample = max_audioval; | ||||
|             } else if (dst_sample < min_audioval) { | ||||
|                 dst_sample = min_audioval; | ||||
|             } | ||||
|             *(dst32++) = SDL_SwapFloatLE((float)dst_sample); | ||||
|         } | ||||
|         break; | ||||
|     } break; | ||||
|  | ||||
|     case AUDIO_F32MSB: | ||||
|         { | ||||
|             const float fmaxvolume = 1.0f / ((float) SDL_MIX_MAXVOLUME); | ||||
|             const float fvolume = (float) volume; | ||||
|             const float *src32 = (float *) src; | ||||
|             float *dst32 = (float *) dst; | ||||
|             float src1, src2; | ||||
|             double dst_sample; | ||||
|             /* !!! FIXME: are these right? */ | ||||
|             const double max_audioval = 3.402823466e+38F; | ||||
|             const double min_audioval = -3.402823466e+38F; | ||||
|     { | ||||
|         const float fmaxvolume = 1.0f / ((float)SDL_MIX_MAXVOLUME); | ||||
|         const float fvolume = (float)volume; | ||||
|         const float *src32 = (float *)src; | ||||
|         float *dst32 = (float *)dst; | ||||
|         float src1, src2; | ||||
|         double dst_sample; | ||||
|         /* !!! FIXME: are these right? */ | ||||
|         const double max_audioval = 3.402823466e+38F; | ||||
|         const double min_audioval = -3.402823466e+38F; | ||||
|  | ||||
|             len /= 4; | ||||
|             while (len--) { | ||||
|                 src1 = ((SDL_SwapFloatBE(*src32) * fvolume) * fmaxvolume); | ||||
|                 src2 = SDL_SwapFloatBE(*dst32); | ||||
|                 src32++; | ||||
|         len /= 4; | ||||
|         while (len--) { | ||||
|             src1 = ((SDL_SwapFloatBE(*src32) * fvolume) * fmaxvolume); | ||||
|             src2 = SDL_SwapFloatBE(*dst32); | ||||
|             src32++; | ||||
|  | ||||
|                 dst_sample = ((double) src1) + ((double) src2); | ||||
|                 if (dst_sample > max_audioval) { | ||||
|                     dst_sample = max_audioval; | ||||
|                 } else if (dst_sample < min_audioval) { | ||||
|                     dst_sample = min_audioval; | ||||
|                 } | ||||
|                 *(dst32++) = SDL_SwapFloatBE((float) dst_sample); | ||||
|             dst_sample = ((double)src1) + ((double)src2); | ||||
|             if (dst_sample > max_audioval) { | ||||
|                 dst_sample = max_audioval; | ||||
|             } else if (dst_sample < min_audioval) { | ||||
|                 dst_sample = min_audioval; | ||||
|             } | ||||
|             *(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"); | ||||
|         return; | ||||
|     } | ||||
|   | ||||
| @@ -30,11 +30,11 @@ | ||||
|  | ||||
| /* !!! FIXME: These are wordy and unlocalized... */ | ||||
| #define DEFAULT_OUTPUT_DEVNAME "System audio output device" | ||||
| #define DEFAULT_INPUT_DEVNAME "System audio capture device" | ||||
| #define DEFAULT_INPUT_DEVNAME  "System audio capture device" | ||||
|  | ||||
| /* The SDL audio driver */ | ||||
| typedef struct SDL_AudioDevice SDL_AudioDevice; | ||||
| #define _THIS   SDL_AudioDevice *_this | ||||
| #define _THIS SDL_AudioDevice *_this | ||||
|  | ||||
| /* Audio targets should call this as devices are added to the system (such as | ||||
|    a USB headset being plugged in), and should also be called for | ||||
| @@ -64,21 +64,21 @@ extern void SDL_OpenedAudioDeviceDisconnected(SDL_AudioDevice *device); | ||||
|  | ||||
| typedef struct SDL_AudioDriverImpl | ||||
| { | ||||
|     void (*DetectDevices) (void); | ||||
|     int (*OpenDevice) (_THIS, const char *devname); | ||||
|     void (*ThreadInit) (_THIS); /* Called by audio thread at start */ | ||||
|     void (*ThreadDeinit) (_THIS); /* Called by audio thread at end */ | ||||
|     void (*WaitDevice) (_THIS); | ||||
|     void (*PlayDevice) (_THIS); | ||||
|     Uint8 *(*GetDeviceBuf) (_THIS); | ||||
|     int (*CaptureFromDevice) (_THIS, void *buffer, int buflen); | ||||
|     void (*FlushCapture) (_THIS); | ||||
|     void (*CloseDevice) (_THIS); | ||||
|     void (*LockDevice) (_THIS); | ||||
|     void (*UnlockDevice) (_THIS); | ||||
|     void (*FreeDeviceHandle) (void *handle);  /**< SDL is done with handle from SDL_AddAudioDevice() */ | ||||
|     void (*Deinitialize) (void); | ||||
|     int (*GetDefaultAudioInfo) (char **name, SDL_AudioSpec *spec, int iscapture); | ||||
|     void (*DetectDevices)(void); | ||||
|     int (*OpenDevice)(_THIS, const char *devname); | ||||
|     void (*ThreadInit)(_THIS);   /* Called by audio thread at start */ | ||||
|     void (*ThreadDeinit)(_THIS); /* Called by audio thread at end */ | ||||
|     void (*WaitDevice)(_THIS); | ||||
|     void (*PlayDevice)(_THIS); | ||||
|     Uint8 *(*GetDeviceBuf)(_THIS); | ||||
|     int (*CaptureFromDevice)(_THIS, void *buffer, int buflen); | ||||
|     void (*FlushCapture)(_THIS); | ||||
|     void (*CloseDevice)(_THIS); | ||||
|     void (*LockDevice)(_THIS); | ||||
|     void (*UnlockDevice)(_THIS); | ||||
|     void (*FreeDeviceHandle)(void *handle); /**< SDL is done with handle from SDL_AddAudioDevice() */ | ||||
|     void (*Deinitialize)(void); | ||||
|     int (*GetDefaultAudioInfo)(char **name, SDL_AudioSpec *spec, int iscapture); | ||||
|  | ||||
|     /* !!! FIXME: add pause(), so we can optimize instead of mixing silence. */ | ||||
|  | ||||
| @@ -91,7 +91,6 @@ typedef struct SDL_AudioDriverImpl | ||||
|     SDL_bool SupportsNonPow2Samples; | ||||
| } SDL_AudioDriverImpl; | ||||
|  | ||||
|  | ||||
| typedef struct SDL_AudioDeviceItem | ||||
| { | ||||
|     void *handle; | ||||
| @@ -102,7 +101,6 @@ typedef struct SDL_AudioDeviceItem | ||||
|     struct SDL_AudioDeviceItem *next; | ||||
| } SDL_AudioDeviceItem; | ||||
|  | ||||
|  | ||||
| typedef struct SDL_AudioDriver | ||||
| { | ||||
|     /* * * */ | ||||
| @@ -125,7 +123,6 @@ typedef struct SDL_AudioDriver | ||||
|     SDL_AudioDeviceItem *inputDevices; | ||||
| } SDL_AudioDriver; | ||||
|  | ||||
|  | ||||
| /* Define the SDL audio driver structure */ | ||||
| struct SDL_AudioDevice | ||||
| { | ||||
| @@ -176,8 +173,8 @@ typedef struct AudioBootStrap | ||||
| { | ||||
|     const char *name; | ||||
|     const char *desc; | ||||
|     SDL_bool (*init) (SDL_AudioDriverImpl * impl); | ||||
|     SDL_bool demand_only;  /* 1==request explicitly, or it won't be available. */ | ||||
|     SDL_bool (*init)(SDL_AudioDriverImpl *impl); | ||||
|     SDL_bool demand_only; /* 1==request explicitly, or it won't be available. */ | ||||
| } AudioBootStrap; | ||||
|  | ||||
| /* Not all of these are available in a given build. Use #ifdefs, etc. */ | ||||
|   | ||||
| @@ -43,8 +43,7 @@ | ||||
|  * Returns 0 on success, or -1 if the multiplication overflows, in which case f1 | ||||
|  * does not get modified. | ||||
|  */ | ||||
| static int | ||||
| SafeMult(size_t *f1, size_t f2) | ||||
| static int SafeMult(size_t *f1, size_t f2) | ||||
| { | ||||
|     if (*f1 > 0 && SIZE_MAX / *f1 <= f2) { | ||||
|         return -1; | ||||
| @@ -66,21 +65,24 @@ typedef struct ADPCM_DecoderState | ||||
|     void *cstate;           /* Decoding state for each channel. */ | ||||
|  | ||||
|     /* ADPCM data. */ | ||||
|     struct { | ||||
|     struct | ||||
|     { | ||||
|         Uint8 *data; | ||||
|         size_t size; | ||||
|         size_t pos; | ||||
|     } input; | ||||
|  | ||||
|     /* Current ADPCM block in the ADPCM data above. */ | ||||
|     struct { | ||||
|     struct | ||||
|     { | ||||
|         Uint8 *data; | ||||
|         size_t size; | ||||
|         size_t pos; | ||||
|     } block; | ||||
|  | ||||
|     /* Decoded 16-bit PCM data. */ | ||||
|     struct { | ||||
|     struct | ||||
|     { | ||||
|         Sint16 *data; | ||||
|         size_t size; | ||||
|         size_t pos; | ||||
| @@ -102,8 +104,7 @@ typedef struct MS_ADPCM_ChannelState | ||||
| } MS_ADPCM_ChannelState; | ||||
|  | ||||
| #ifdef SDL_WAVE_DEBUG_LOG_FORMAT | ||||
| static void | ||||
| WaveDebugLogFormat(WaveFile *file) | ||||
| static void WaveDebugLogFormat(WaveFile *file) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|     const char *fmtstr = "WAVE file: %s, %u Hz, %s, %u bits, %u %s/s"; | ||||
| @@ -137,55 +138,60 @@ WaveDebugLogFormat(WaveFile *file) | ||||
|         break; | ||||
|     } | ||||
|  | ||||
| #define SDL_WAVE_DEBUG_CHANNELCFG(STR, CODE) case CODE: wavechannel = STR; break; | ||||
| #define SDL_WAVE_DEBUG_CHANNELSTR(STR, CODE) if (format->channelmask & CODE) { \ | ||||
|     SDL_strlcat(channelstr, channelstr[0] ? "-" STR : STR, sizeof(channelstr));} | ||||
| #define SDL_WAVE_DEBUG_CHANNELCFG(STR, CODE) \ | ||||
|     case CODE:                               \ | ||||
|         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) { | ||||
|         switch (format->channelmask) { | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("1.0 Mono",         0x4) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("1.1 Mono",         0xc) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("2.0 Stereo",       0x3) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("2.1 Stereo",       0xb) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("3.0 Stereo",       0x7) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("3.1 Stereo",       0xf) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("3.0 Surround",     0x103) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("3.1 Surround",     0x10b) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("4.0 Quad",         0x33) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("4.1 Quad",         0x3b) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("4.0 Surround",     0x107) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("4.1 Surround",     0x10f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("5.0",              0x37) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("5.1",              0x3f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("5.0 Side",         0x607) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("5.1 Side",         0x60f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("6.0",              0x137) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("6.1",              0x13f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("6.0 Side",         0x707) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("6.1 Side",         0x70f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.0",              0xf7) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.1",              0xff) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.0 Side",         0x6c7) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.1 Side",         0x6cf) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.0 Surround",     0x637) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.1 Surround",     0x63f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("9.0 Surround",     0x5637) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("9.1 Surround",     0x563f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("11.0 Surround",    0x56f7) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("11.1 Surround",    0x56ff) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("1.0 Mono", 0x4) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("1.1 Mono", 0xc) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("2.0 Stereo", 0x3) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("2.1 Stereo", 0xb) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("3.0 Stereo", 0x7) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("3.1 Stereo", 0xf) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("3.0 Surround", 0x103) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("3.1 Surround", 0x10b) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("4.0 Quad", 0x33) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("4.1 Quad", 0x3b) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("4.0 Surround", 0x107) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("4.1 Surround", 0x10f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("5.0", 0x37) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("5.1", 0x3f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("5.0 Side", 0x607) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("5.1 Side", 0x60f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("6.0", 0x137) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("6.1", 0x13f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("6.0 Side", 0x707) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("6.1 Side", 0x70f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.0", 0xf7) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.1", 0xff) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.0 Side", 0x6c7) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.1 Side", 0x6cf) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.0 Surround", 0x637) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("7.1 Surround", 0x63f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("9.0 Surround", 0x5637) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("9.1 Surround", 0x563f) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("11.0 Surround", 0x56f7) | ||||
|             SDL_WAVE_DEBUG_CHANNELCFG("11.1 Surround", 0x56ff) | ||||
|         default: | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("FL",  0x1) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("FR",  0x2) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("FC",  0x4) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("LF",  0x8) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("BL",  0x10) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("BR",  0x20) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("FL", 0x1) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("FR", 0x2) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("FC", 0x4) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("LF", 0x8) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("BL", 0x10) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("BR", 0x20) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("FLC", 0x40) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("FRC", 0x80) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("BC",  0x100) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("SL",  0x200) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("SR",  0x400) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("TC",  0x800) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("BC", 0x100) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("SL", 0x200) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("SR", 0x400) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("TC", 0x800) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("TFL", 0x1000) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("TFC", 0x2000) | ||||
|             SDL_WAVE_DEBUG_CHANNELSTR("TFR", 0x4000) | ||||
| @@ -226,33 +232,32 @@ WaveDebugLogFormat(WaveFile *file) | ||||
| #endif | ||||
|  | ||||
| #ifdef SDL_WAVE_DEBUG_DUMP_FORMAT | ||||
| static void | ||||
| WaveDebugDumpFormat(WaveFile *file, Uint32 rifflen, Uint32 fmtlen, Uint32 datalen) | ||||
| static void WaveDebugDumpFormat(WaveFile *file, Uint32 rifflen, Uint32 fmtlen, Uint32 datalen) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|     const char *fmtstr1 = "WAVE chunk dump:\n" | ||||
|         "-------------------------------------------\n" | ||||
|         "RIFF                            %11u\n" | ||||
|         "-------------------------------------------\n" | ||||
|         "    fmt                         %11u\n" | ||||
|         "        wFormatTag                   0x%04x\n" | ||||
|         "        nChannels               %11u\n" | ||||
|         "        nSamplesPerSec          %11u\n" | ||||
|         "        nAvgBytesPerSec         %11u\n" | ||||
|         "        nBlockAlign             %11u\n"; | ||||
|                           "-------------------------------------------\n" | ||||
|                           "RIFF                            %11u\n" | ||||
|                           "-------------------------------------------\n" | ||||
|                           "    fmt                         %11u\n" | ||||
|                           "        wFormatTag                   0x%04x\n" | ||||
|                           "        nChannels               %11u\n" | ||||
|                           "        nSamplesPerSec          %11u\n" | ||||
|                           "        nAvgBytesPerSec         %11u\n" | ||||
|                           "        nBlockAlign             %11u\n"; | ||||
|     const char *fmtstr2 = "        wBitsPerSample          %11u\n"; | ||||
|     const char *fmtstr3 = "        cbSize                  %11u\n"; | ||||
|     const char *fmtstr4a = "        wValidBitsPerSample     %11u\n"; | ||||
|     const char *fmtstr4b = "        wSamplesPerBlock        %11u\n"; | ||||
|     const char *fmtstr5 = "        dwChannelMask            0x%08x\n" | ||||
|         "        SubFormat\n" | ||||
|         "        %08x-%04x-%04x-%02x%02x%02x%02x%02x%02x%02x%02x\n"; | ||||
|                           "        SubFormat\n" | ||||
|                           "        %08x-%04x-%04x-%02x%02x%02x%02x%02x%02x%02x%02x\n"; | ||||
|     const char *fmtstr6 = "-------------------------------------------\n" | ||||
|         " fact\n" | ||||
|         "  dwSampleLength                %11u\n"; | ||||
|                           " fact\n" | ||||
|                           "  dwSampleLength                %11u\n"; | ||||
|     const char *fmtstr7 = "-------------------------------------------\n" | ||||
|         " data                           %11u\n" | ||||
|         "-------------------------------------------\n"; | ||||
|                           " data                           %11u\n" | ||||
|                           "-------------------------------------------\n"; | ||||
|     char *dumpstr; | ||||
|     size_t dumppos = 0; | ||||
|     const size_t bufsize = 1024; | ||||
| @@ -317,8 +322,7 @@ WaveDebugDumpFormat(WaveFile *file, Uint32 rifflen, Uint32 fmtlen, Uint32 datale | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static Sint64 | ||||
| WaveAdjustToFactValue(WaveFile *file, Sint64 sampleframes) | ||||
| static Sint64 WaveAdjustToFactValue(WaveFile *file, Sint64 sampleframes) | ||||
| { | ||||
|     if (file->fact.status == 2) { | ||||
|         if (file->facthint == FactStrict && sampleframes < file->fact.samplelength) { | ||||
| @@ -331,8 +335,7 @@ WaveAdjustToFactValue(WaveFile *file, Sint64 sampleframes) | ||||
|     return sampleframes; | ||||
| } | ||||
|  | ||||
| static int | ||||
| MS_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength) | ||||
| static int MS_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|     const size_t blockheadersize = (size_t)file->format.channels * 7; | ||||
| @@ -371,8 +374,7 @@ MS_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| MS_ADPCM_Init(WaveFile *file, size_t datalength) | ||||
| static int MS_ADPCM_Init(WaveFile *file, size_t datalength) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|     WaveChunk *chunk = &file->chunk; | ||||
| @@ -380,7 +382,7 @@ MS_ADPCM_Init(WaveFile *file, size_t datalength) | ||||
|     const size_t blockdatasize = (size_t)format->blockalign - blockheadersize; | ||||
|     const size_t blockframebitsize = (size_t)format->bitspersample * format->channels; | ||||
|     const size_t blockdatasamples = (blockdatasize * 8) / blockframebitsize; | ||||
|     const Sint16 presetcoeffs[14] = {256, 0, 512, -256, 0, 0, 192, 64, 240, 0, 460, -208, 392, -232}; | ||||
|     const Sint16 presetcoeffs[14] = { 256, 0, 512, -256, 0, 0, 192, 64, 240, 0, 460, -208, 392, -232 }; | ||||
|     size_t i, coeffcount; | ||||
|     MS_ADPCM_CoeffData *coeffdata; | ||||
|  | ||||
| @@ -490,8 +492,7 @@ MS_ADPCM_Init(WaveFile *file, size_t datalength) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static Sint16 | ||||
| MS_ADPCM_ProcessNibble(MS_ADPCM_ChannelState *cstate, Sint32 sample1, Sint32 sample2, Uint8 nybble) | ||||
| static Sint16 MS_ADPCM_ProcessNibble(MS_ADPCM_ChannelState *cstate, Sint32 sample1, Sint32 sample2, Uint8 nybble) | ||||
| { | ||||
|     const Sint32 max_audioval = 32767; | ||||
|     const Sint32 min_audioval = -32768; | ||||
| @@ -527,8 +528,7 @@ MS_ADPCM_ProcessNibble(MS_ADPCM_ChannelState *cstate, Sint32 sample1, Sint32 sam | ||||
|     return (Sint16)new_sample; | ||||
| } | ||||
|  | ||||
| static int | ||||
| MS_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state) | ||||
| static int MS_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state) | ||||
| { | ||||
|     Uint8 coeffindex; | ||||
|     const Uint32 channels = state->channels; | ||||
| @@ -588,8 +588,7 @@ MS_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state) | ||||
|  * will always contain full sample frames (same sample count for each channel). | ||||
|  * Incomplete sample frames are discarded. | ||||
|  */ | ||||
| static int | ||||
| MS_ADPCM_DecodeBlockData(ADPCM_DecoderState *state) | ||||
| static int MS_ADPCM_DecodeBlockData(ADPCM_DecoderState *state) | ||||
| { | ||||
|     Uint16 nybble = 0; | ||||
|     Sint16 sample1, sample2; | ||||
| @@ -636,8 +635,7 @@ MS_ADPCM_DecodeBlockData(ADPCM_DecoderState *state) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| MS_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| static int MS_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| { | ||||
|     int result; | ||||
|     size_t bytesleft, outputsize; | ||||
| @@ -736,8 +734,7 @@ MS_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| IMA_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength) | ||||
| static int IMA_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|     const size_t blockheadersize = (size_t)format->channels * 4; | ||||
| @@ -790,8 +787,7 @@ IMA_ADPCM_CalculateSampleFrames(WaveFile *file, size_t datalength) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| IMA_ADPCM_Init(WaveFile *file, size_t datalength) | ||||
| static int IMA_ADPCM_Init(WaveFile *file, size_t datalength) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|     WaveChunk *chunk = &file->chunk; | ||||
| @@ -856,8 +852,7 @@ IMA_ADPCM_Init(WaveFile *file, size_t datalength) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static Sint16 | ||||
| IMA_ADPCM_ProcessNibble(Sint8 *cindex, Sint16 lastsample, Uint8 nybble) | ||||
| static Sint16 IMA_ADPCM_ProcessNibble(Sint8 *cindex, Sint16 lastsample, Uint8 nybble) | ||||
| { | ||||
|     const Sint32 max_audioval = 32767; | ||||
|     const Sint32 min_audioval = -32768; | ||||
| @@ -926,12 +921,11 @@ IMA_ADPCM_ProcessNibble(Sint8 *cindex, Sint16 lastsample, Uint8 nybble) | ||||
|     return (Sint16)sample; | ||||
| } | ||||
|  | ||||
| static int | ||||
| IMA_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state) | ||||
| static int IMA_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state) | ||||
| { | ||||
|     Sint16 step; | ||||
|     Uint32 c; | ||||
|     Uint8 *cstate = (Uint8 *) state->cstate; | ||||
|     Uint8 *cstate = (Uint8 *)state->cstate; | ||||
|  | ||||
|     for (c = 0; c < state->channels; c++) { | ||||
|         size_t o = state->block.pos + c * 4; | ||||
| @@ -949,7 +943,7 @@ IMA_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state) | ||||
|  | ||||
|         /* Reserved byte in block header, should be 0. */ | ||||
|         if (state->block.data[o + 3] != 0) { | ||||
|             /* Uh oh, corrupt data?  Buggy code? */ ; | ||||
|             /* Uh oh, corrupt data?  Buggy code? */; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -966,8 +960,7 @@ IMA_ADPCM_DecodeBlockHeader(ADPCM_DecoderState *state) | ||||
|  * contains full sample frames (same sample count for each channel). | ||||
|  * Incomplete sample frames are discarded. | ||||
|  */ | ||||
| static int | ||||
| IMA_ADPCM_DecodeBlockData(ADPCM_DecoderState *state) | ||||
| static int IMA_ADPCM_DecodeBlockData(ADPCM_DecoderState *state) | ||||
| { | ||||
|     size_t i; | ||||
|     int retval = 0; | ||||
| @@ -1036,8 +1029,7 @@ IMA_ADPCM_DecodeBlockData(ADPCM_DecoderState *state) | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| static int | ||||
| IMA_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| static int IMA_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| { | ||||
|     int result; | ||||
|     size_t bytesleft, outputsize; | ||||
| @@ -1140,8 +1132,7 @@ IMA_ADPCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| LAW_Init(WaveFile *file, size_t datalength) | ||||
| static int LAW_Init(WaveFile *file, size_t datalength) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|  | ||||
| @@ -1169,8 +1160,7 @@ LAW_Init(WaveFile *file, size_t datalength) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| LAW_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| static int LAW_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| { | ||||
| #ifdef SDL_WAVE_LAW_LUT | ||||
|     const Sint16 alaw_lut[256] = { | ||||
| @@ -1312,8 +1302,7 @@ LAW_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| PCM_Init(WaveFile *file, size_t datalength) | ||||
| static int PCM_Init(WaveFile *file, size_t datalength) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|  | ||||
| @@ -1356,8 +1345,7 @@ PCM_Init(WaveFile *file, size_t datalength) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| PCM_ConvertSint24ToSint32(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| static int PCM_ConvertSint24ToSint32(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|     WaveChunk *chunk = &file->chunk; | ||||
| @@ -1408,8 +1396,7 @@ PCM_ConvertSint24ToSint32(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| PCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| static int PCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|     WaveChunk *chunk = &file->chunk; | ||||
| @@ -1451,8 +1438,7 @@ PCM_Decode(WaveFile *file, Uint8 **audio_buf, Uint32 *audio_len) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static WaveRiffSizeHint | ||||
| WaveGetRiffSizeHint() | ||||
| static WaveRiffSizeHint WaveGetRiffSizeHint() | ||||
| { | ||||
|     const char *hint = SDL_GetHint(SDL_HINT_WAVE_RIFF_CHUNK_SIZE); | ||||
|  | ||||
| @@ -1471,8 +1457,7 @@ WaveGetRiffSizeHint() | ||||
|     return RiffSizeNoHint; | ||||
| } | ||||
|  | ||||
| static WaveTruncationHint | ||||
| WaveGetTruncationHint() | ||||
| static WaveTruncationHint WaveGetTruncationHint() | ||||
| { | ||||
|     const char *hint = SDL_GetHint(SDL_HINT_WAVE_TRUNCATION); | ||||
|  | ||||
| @@ -1491,8 +1476,7 @@ WaveGetTruncationHint() | ||||
|     return TruncNoHint; | ||||
| } | ||||
|  | ||||
| static WaveFactChunkHint | ||||
| WaveGetFactChunkHint() | ||||
| static WaveFactChunkHint WaveGetFactChunkHint() | ||||
| { | ||||
|     const char *hint = SDL_GetHint(SDL_HINT_WAVE_FACT_CHUNK); | ||||
|  | ||||
| @@ -1511,8 +1495,7 @@ WaveGetFactChunkHint() | ||||
|     return FactNoHint; | ||||
| } | ||||
|  | ||||
| static void | ||||
| WaveFreeChunkData(WaveChunk *chunk) | ||||
| static void WaveFreeChunkData(WaveChunk *chunk) | ||||
| { | ||||
|     if (chunk->data != NULL) { | ||||
|         SDL_free(chunk->data); | ||||
| @@ -1521,8 +1504,7 @@ WaveFreeChunkData(WaveChunk *chunk) | ||||
|     chunk->size = 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| WaveNextChunk(SDL_RWops *src, WaveChunk *chunk) | ||||
| static int WaveNextChunk(SDL_RWops *src, WaveChunk *chunk) | ||||
| { | ||||
|     Uint32 chunkheader[2]; | ||||
|     Sint64 nextposition = chunk->position + chunk->length; | ||||
| @@ -1554,8 +1536,7 @@ WaveNextChunk(SDL_RWops *src, WaveChunk *chunk) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| WaveReadPartialChunkData(SDL_RWops *src, WaveChunk *chunk, size_t length) | ||||
| static int WaveReadPartialChunkData(SDL_RWops *src, WaveChunk *chunk, size_t length) | ||||
| { | ||||
|     WaveFreeChunkData(chunk); | ||||
|  | ||||
| @@ -1564,7 +1545,7 @@ WaveReadPartialChunkData(SDL_RWops *src, WaveChunk *chunk, size_t length) | ||||
|     } | ||||
|  | ||||
|     if (length > 0) { | ||||
|         chunk->data = (Uint8 *) SDL_malloc(length); | ||||
|         chunk->data = (Uint8 *)SDL_malloc(length); | ||||
|         if (chunk->data == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
| @@ -1583,30 +1564,32 @@ WaveReadPartialChunkData(SDL_RWops *src, WaveChunk *chunk, size_t length) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| WaveReadChunkData(SDL_RWops *src, WaveChunk *chunk) | ||||
| static int WaveReadChunkData(SDL_RWops *src, WaveChunk *chunk) | ||||
| { | ||||
|     return WaveReadPartialChunkData(src, chunk, chunk->length); | ||||
| } | ||||
|  | ||||
| typedef struct WaveExtensibleGUID { | ||||
| typedef struct WaveExtensibleGUID | ||||
| { | ||||
|     Uint16 encoding; | ||||
|     Uint8 guid[16]; | ||||
| } WaveExtensibleGUID; | ||||
|  | ||||
| /* 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[] = { | ||||
|     {PCM_CODE,        WAVE_FORMATTAG_GUID(PCM_CODE)}, | ||||
|     {MS_ADPCM_CODE,   WAVE_FORMATTAG_GUID(MS_ADPCM_CODE)}, | ||||
|     {IEEE_FLOAT_CODE, WAVE_FORMATTAG_GUID(IEEE_FLOAT_CODE)}, | ||||
|     {ALAW_CODE,       WAVE_FORMATTAG_GUID(ALAW_CODE)}, | ||||
|     {MULAW_CODE,      WAVE_FORMATTAG_GUID(MULAW_CODE)}, | ||||
|     {IMA_ADPCM_CODE,  WAVE_FORMATTAG_GUID(IMA_ADPCM_CODE)} | ||||
|     { PCM_CODE, WAVE_FORMATTAG_GUID(PCM_CODE) }, | ||||
|     { MS_ADPCM_CODE, WAVE_FORMATTAG_GUID(MS_ADPCM_CODE) }, | ||||
|     { IEEE_FLOAT_CODE, WAVE_FORMATTAG_GUID(IEEE_FLOAT_CODE) }, | ||||
|     { ALAW_CODE, WAVE_FORMATTAG_GUID(ALAW_CODE) }, | ||||
|     { MULAW_CODE, WAVE_FORMATTAG_GUID(MULAW_CODE) }, | ||||
|     { IMA_ADPCM_CODE, WAVE_FORMATTAG_GUID(IMA_ADPCM_CODE) } | ||||
| }; | ||||
|  | ||||
| static Uint16 | ||||
| WaveGetFormatGUIDEncoding(WaveFormat *format) | ||||
| static Uint16 WaveGetFormatGUIDEncoding(WaveFormat *format) | ||||
| { | ||||
|     size_t i; | ||||
|     for (i = 0; i < SDL_arraysize(extensible_guids); i++) { | ||||
| @@ -1617,8 +1600,7 @@ WaveGetFormatGUIDEncoding(WaveFormat *format) | ||||
|     return UNKNOWN_CODE; | ||||
| } | ||||
|  | ||||
| static int | ||||
| WaveReadFormat(WaveFile *file) | ||||
| static int WaveReadFormat(WaveFile *file) | ||||
| { | ||||
|     WaveChunk *chunk = &file->chunk; | ||||
|     WaveFormat *format = &file->format; | ||||
| @@ -1679,8 +1661,7 @@ WaveReadFormat(WaveFile *file) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| WaveCheckFormat(WaveFile *file, size_t datalength) | ||||
| static int WaveCheckFormat(WaveFile *file, size_t datalength) | ||||
| { | ||||
|     WaveFormat *format = &file->format; | ||||
|  | ||||
| @@ -1787,8 +1768,7 @@ WaveCheckFormat(WaveFile *file, size_t datalength) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| WaveLoad(SDL_RWops *src, WaveFile *file, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| static int WaveLoad(SDL_RWops *src, WaveFile *file, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len) | ||||
| { | ||||
|     int result; | ||||
|     Uint32 chunkcount = 0; | ||||
| @@ -2053,7 +2033,7 @@ WaveLoad(SDL_RWops *src, WaveFile *file, SDL_AudioSpec *spec, Uint8 **audio_buf, | ||||
|     SDL_zerop(spec); | ||||
|     spec->freq = format->frequency; | ||||
|     spec->channels = (Uint8)format->channels; | ||||
|     spec->samples = 4096;       /* Good default buffer size */ | ||||
|     spec->samples = 4096; /* Good default buffer size */ | ||||
|  | ||||
|     switch (format->encoding) { | ||||
|     case MS_ADPCM_CODE: | ||||
| @@ -2150,8 +2130,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 | ||||
|    be freed here.  (Necessary under Win32, VC++) | ||||
|  */ | ||||
| void | ||||
| SDL_FreeWAV(Uint8 *audio_buf) | ||||
| void SDL_FreeWAV(Uint8 *audio_buf) | ||||
| { | ||||
|     SDL_free(audio_buf); | ||||
| } | ||||
|   | ||||
| @@ -26,14 +26,14 @@ | ||||
| /* Define values for Microsoft WAVE format */ | ||||
| /*******************************************/ | ||||
| /* FOURCC */ | ||||
| #define RIFF            0x46464952      /* "RIFF" */ | ||||
| #define WAVE            0x45564157      /* "WAVE" */ | ||||
| #define FACT            0x74636166      /* "fact" */ | ||||
| #define LIST            0x5453494c      /* "LIST" */ | ||||
| #define BEXT            0x74786562      /* "bext" */ | ||||
| #define JUNK            0x4B4E554A      /* "JUNK" */ | ||||
| #define FMT             0x20746D66      /* "fmt " */ | ||||
| #define DATA            0x61746164      /* "data" */ | ||||
| #define RIFF 0x46464952 /* "RIFF" */ | ||||
| #define WAVE 0x45564157 /* "WAVE" */ | ||||
| #define FACT 0x74636166 /* "fact" */ | ||||
| #define LIST 0x5453494c /* "LIST" */ | ||||
| #define BEXT 0x74786562 /* "bext" */ | ||||
| #define JUNK 0x4B4E554A /* "JUNK" */ | ||||
| #define FMT  0x20746D66 /* "fmt " */ | ||||
| #define DATA 0x61746164 /* "data" */ | ||||
| /* Format tags */ | ||||
| #define UNKNOWN_CODE    0x0000 | ||||
| #define PCM_CODE        0x0001 | ||||
| @@ -49,13 +49,13 @@ | ||||
| /* Stores the WAVE format information. */ | ||||
| typedef struct WaveFormat | ||||
| { | ||||
|     Uint16 formattag;       /* Raw value of the first field in the fmt chunk data. */ | ||||
|     Uint16 encoding;        /* Actual encoding, possibly from the extensible header. */ | ||||
|     Uint16 channels;        /* Number of channels. */ | ||||
|     Uint32 frequency;       /* Sampling rate in Hz. */ | ||||
|     Uint32 byterate;        /* Average bytes per second. */ | ||||
|     Uint16 blockalign;      /* Bytes per block. */ | ||||
|     Uint16 bitspersample;   /* Currently supported are 8, 16, 24, 32, and 4 for ADPCM. */ | ||||
|     Uint16 formattag;     /* Raw value of the first field in the fmt chunk data. */ | ||||
|     Uint16 encoding;      /* Actual encoding, possibly from the extensible header. */ | ||||
|     Uint16 channels;      /* Number of channels. */ | ||||
|     Uint32 frequency;     /* Sampling rate in Hz. */ | ||||
|     Uint32 byterate;      /* Average bytes per second. */ | ||||
|     Uint16 blockalign;    /* Bytes per block. */ | ||||
|     Uint16 bitspersample; /* Currently supported are 8, 16, 24, 32, and 4 for ADPCM. */ | ||||
|  | ||||
|     /* Extra information size. Number of extra bytes starting at byte 18 in the | ||||
|      * fmt chunk data. This is at least 22 for the extensible header. | ||||
| @@ -66,11 +66,12 @@ typedef struct WaveFormat | ||||
|     Uint16 validsamplebits; | ||||
|     Uint32 samplesperblock; /* For compressed formats. Can be zero. Actually 16 bits in the header. */ | ||||
|     Uint32 channelmask; | ||||
|     Uint8 subformat[16];    /* A format GUID. */ | ||||
|     Uint8 subformat[16]; /* A format GUID. */ | ||||
| } WaveFormat; | ||||
|  | ||||
| /* Stores information on the fact chunk. */ | ||||
| typedef struct WaveFact { | ||||
| typedef struct WaveFact | ||||
| { | ||||
|     /* Represents the state of the fact chunk in the WAVE file. | ||||
|      * Set to -1 if the fact chunk is invalid. | ||||
|      * Set to 0 if the fact chunk is not present | ||||
| @@ -101,7 +102,8 @@ typedef struct WaveChunk | ||||
| } WaveChunk; | ||||
|  | ||||
| /* Controls how the size of the RIFF chunk affects the loading of a WAVE file. */ | ||||
| typedef enum WaveRiffSizeHint { | ||||
| typedef enum WaveRiffSizeHint | ||||
| { | ||||
|     RiffSizeNoHint, | ||||
|     RiffSizeForce, | ||||
|     RiffSizeIgnoreZero, | ||||
| @@ -110,7 +112,8 @@ typedef enum WaveRiffSizeHint { | ||||
| } WaveRiffSizeHint; | ||||
|  | ||||
| /* Controls how a truncated WAVE file is handled. */ | ||||
| typedef enum WaveTruncationHint { | ||||
| typedef enum WaveTruncationHint | ||||
| { | ||||
|     TruncNoHint, | ||||
|     TruncVeryStrict, | ||||
|     TruncStrict, | ||||
| @@ -119,7 +122,8 @@ typedef enum WaveTruncationHint { | ||||
| } WaveTruncationHint; | ||||
|  | ||||
| /* Controls how the fact chunk affects the loading of a WAVE file. */ | ||||
| typedef enum WaveFactChunkHint { | ||||
| typedef enum WaveFactChunkHint | ||||
| { | ||||
|     FactNoHint, | ||||
|     FactTruncate, | ||||
|     FactStrict, | ||||
| @@ -139,7 +143,7 @@ typedef struct WaveFile | ||||
|      */ | ||||
|     Sint64 sampleframes; | ||||
|  | ||||
|     void *decoderdata;   /* Some decoders require extra data for a state. */ | ||||
|     void *decoderdata; /* Some decoders require extra data for a state. */ | ||||
|  | ||||
|     WaveRiffSizeHint riffhint; | ||||
|     WaveTruncationHint trunchint; | ||||
|   | ||||
| @@ -30,17 +30,17 @@ | ||||
|  | ||||
| /* Debug */ | ||||
| #if 0 | ||||
| #  define LOGI(...) SDL_Log(__VA_ARGS__); | ||||
| #define LOGI(...) SDL_Log(__VA_ARGS__); | ||||
| #else | ||||
| #  define LOGI(...) | ||||
| #define LOGI(...) | ||||
| #endif | ||||
|  | ||||
| typedef struct AAUDIO_Data | ||||
| { | ||||
|     AAudioStreamBuilder *builder; | ||||
|     void *handle; | ||||
| #define SDL_PROC(ret,func,params) ret (*func) params; | ||||
| #  include "SDL_aaudiofuncs.h" | ||||
| #define SDL_PROC(ret, func, params) ret(*func) params; | ||||
| #include "SDL_aaudiofuncs.h" | ||||
| #undef SDL_PROC | ||||
| } AAUDIO_Data; | ||||
| static AAUDIO_Data ctx; | ||||
| @@ -50,28 +50,27 @@ static SDL_AudioDevice *captureDevice = NULL; | ||||
|  | ||||
| static int aaudio_LoadFunctions(AAUDIO_Data *data) | ||||
| { | ||||
| #define SDL_PROC(ret,func,params)                                                                   \ | ||||
|     do {                                                                                            \ | ||||
|         data->func = SDL_LoadFunction(data->handle, #func);                                         \ | ||||
|         if (! data->func) {                                                                         \ | ||||
|             return SDL_SetError("Couldn't load AAUDIO function %s: %s", #func, SDL_GetError());     \ | ||||
|         }                                                                                           \ | ||||
| #define SDL_PROC(ret, func, params)                                                             \ | ||||
|     do {                                                                                        \ | ||||
|         data->func = SDL_LoadFunction(data->handle, #func);                                     \ | ||||
|         if (!data->func) {                                                                      \ | ||||
|             return SDL_SetError("Couldn't load AAUDIO function %s: %s", #func, SDL_GetError()); \ | ||||
|         }                                                                                       \ | ||||
|     } while (0); | ||||
| #include "SDL_aaudiofuncs.h" | ||||
| #undef SDL_PROC | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void aaudio_errorCallback( AAudioStream *stream, void *userData, aaudio_result_t error ); | ||||
| void aaudio_errorCallback( AAudioStream *stream, void *userData, aaudio_result_t error ) | ||||
| void aaudio_errorCallback(AAudioStream *stream, void *userData, aaudio_result_t error); | ||||
| void aaudio_errorCallback(AAudioStream *stream, void *userData, aaudio_result_t error) | ||||
| { | ||||
|     LOGI( "SDL aaudio_errorCallback: %d - %s", error, ctx.AAudio_convertResultToText( error ) ); | ||||
|     LOGI("SDL aaudio_errorCallback: %d - %s", error, ctx.AAudio_convertResultToText(error)); | ||||
| } | ||||
|  | ||||
| #define LIB_AAUDIO_SO "libaaudio.so" | ||||
|  | ||||
| static int | ||||
| aaudio_OpenDevice(_THIS, const char *devname) | ||||
| static int aaudio_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *private; | ||||
|     SDL_bool iscapture = this->iscapture; | ||||
| @@ -94,7 +93,7 @@ aaudio_OpenDevice(_THIS, const char *devname) | ||||
|         audioDevice = this; | ||||
|     } | ||||
|  | ||||
|     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) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
| @@ -116,11 +115,11 @@ aaudio_OpenDevice(_THIS, const char *devname) | ||||
|         ctx.AAudioStreamBuilder_setFormat(ctx.builder, format); | ||||
|     } | ||||
|  | ||||
|     ctx.AAudioStreamBuilder_setErrorCallback( ctx.builder, aaudio_errorCallback, private ); | ||||
|     ctx.AAudioStreamBuilder_setErrorCallback(ctx.builder, aaudio_errorCallback, private); | ||||
|  | ||||
|     LOGI("AAudio Try to open %u hz %u bit chan %u %s samples %u", | ||||
|           this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format), | ||||
|           this->spec.channels, (this->spec.format & 0x1000) ? "BE" : "LE", this->spec.samples); | ||||
|          this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format), | ||||
|          this->spec.channels, (this->spec.format & 0x1000) ? "BE" : "LE", this->spec.samples); | ||||
|  | ||||
|     res = ctx.AAudioStreamBuilder_openStream(ctx.builder, &private->stream); | ||||
|     if (res != AAUDIO_OK) { | ||||
| @@ -140,15 +139,15 @@ aaudio_OpenDevice(_THIS, const char *devname) | ||||
|     } | ||||
|  | ||||
|     LOGI("AAudio Try to open %u hz %u bit chan %u %s samples %u", | ||||
|           this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format), | ||||
|           this->spec.channels, (this->spec.format & 0x1000) ? "BE" : "LE", this->spec.samples); | ||||
|          this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format), | ||||
|          this->spec.channels, (this->spec.format & 0x1000) ? "BE" : "LE", this->spec.samples); | ||||
|  | ||||
|     SDL_CalculateAudioSpec(&this->spec); | ||||
|  | ||||
|     /* Allocate mixing buffer */ | ||||
|     if (!iscapture) { | ||||
|         private->mixlen = this->spec.size; | ||||
|         private->mixbuf = (Uint8 *) SDL_malloc(private->mixlen); | ||||
|         private->mixbuf = (Uint8 *)SDL_malloc(private->mixlen); | ||||
|         if (private->mixbuf == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
| @@ -167,8 +166,7 @@ aaudio_OpenDevice(_THIS, const char *devname) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| aaudio_CloseDevice(_THIS) | ||||
| static void aaudio_CloseDevice(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *private = this->hidden; | ||||
|     aaudio_result_t res; | ||||
| @@ -202,20 +200,18 @@ aaudio_CloseDevice(_THIS) | ||||
|     SDL_free(this->hidden); | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| aaudio_GetDeviceBuf(_THIS) | ||||
| static Uint8 *aaudio_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *private = this->hidden; | ||||
|     return private->mixbuf; | ||||
| } | ||||
|  | ||||
| static void | ||||
| aaudio_PlayDevice(_THIS) | ||||
| static void aaudio_PlayDevice(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *private = this->hidden; | ||||
|     aaudio_result_t res; | ||||
|     int64_t timeoutNanoseconds = 1 * 1000 * 1000; /* 8 ms */ | ||||
|     res = ctx.AAudioStream_write(private->stream,  private->mixbuf, private->mixlen / private->frame_size, timeoutNanoseconds); | ||||
|     res = ctx.AAudioStream_write(private->stream, private->mixbuf, private->mixlen / private->frame_size, timeoutNanoseconds); | ||||
|     if (res < 0) { | ||||
|         LOGI("%s : %s", __func__, ctx.AAudio_convertResultToText(res)); | ||||
|     } else { | ||||
| @@ -235,13 +231,12 @@ aaudio_PlayDevice(_THIS) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static int | ||||
| aaudio_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int aaudio_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *private = this->hidden; | ||||
|     aaudio_result_t res; | ||||
|     int64_t timeoutNanoseconds = 8 * 1000 * 1000; /* 8 ms */ | ||||
|     res = ctx.AAudioStream_read(private->stream,  buffer, buflen / private->frame_size, timeoutNanoseconds); | ||||
|     res = ctx.AAudioStream_read(private->stream, buffer, buflen / private->frame_size, timeoutNanoseconds); | ||||
|     if (res < 0) { | ||||
|         LOGI("%s : %s", __func__, ctx.AAudio_convertResultToText(res)); | ||||
|         return -1; | ||||
| @@ -250,8 +245,7 @@ aaudio_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     return res * private->frame_size; | ||||
| } | ||||
|  | ||||
| static void | ||||
| aaudio_Deinitialize(void) | ||||
| static void aaudio_Deinitialize(void) | ||||
| { | ||||
|     LOGI(__func__); | ||||
|     if (ctx.handle) { | ||||
| @@ -269,8 +263,7 @@ aaudio_Deinitialize(void) | ||||
|     LOGI("End AAUDIO %s", SDL_GetError()); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| aaudio_Init(SDL_AudioDriverImpl *impl) | ||||
| static SDL_bool aaudio_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     aaudio_result_t res; | ||||
|     LOGI(__func__); | ||||
| @@ -345,7 +338,7 @@ void aaudio_PauseDevices(void) | ||||
|     /* TODO: Handle multiple devices? */ | ||||
|     struct SDL_PrivateAudioData *private; | ||||
|     if (audioDevice != NULL && audioDevice->hidden != NULL) { | ||||
|         private = (struct SDL_PrivateAudioData *) audioDevice->hidden; | ||||
|         private = (struct SDL_PrivateAudioData *)audioDevice->hidden; | ||||
|  | ||||
|         if (private->stream) { | ||||
|             aaudio_result_t res = ctx.AAudioStream_requestPause(private->stream); | ||||
| @@ -366,7 +359,7 @@ void aaudio_PauseDevices(void) | ||||
|     } | ||||
|  | ||||
|     if (captureDevice != NULL && captureDevice->hidden != NULL) { | ||||
|         private = (struct SDL_PrivateAudioData *) captureDevice->hidden; | ||||
|         private = (struct SDL_PrivateAudioData *)captureDevice->hidden; | ||||
|  | ||||
|         if (private->stream) { | ||||
|             /* Pause() isn't implemented for 'capture', use Stop() */ | ||||
| @@ -394,7 +387,7 @@ void aaudio_ResumeDevices(void) | ||||
|     /* TODO: Handle multiple devices? */ | ||||
|     struct SDL_PrivateAudioData *private; | ||||
|     if (audioDevice != NULL && audioDevice->hidden != NULL) { | ||||
|         private = (struct SDL_PrivateAudioData *) audioDevice->hidden; | ||||
|         private = (struct SDL_PrivateAudioData *)audioDevice->hidden; | ||||
|  | ||||
|         if (private->resume) { | ||||
|             SDL_AtomicSet(&audioDevice->paused, 0); | ||||
| @@ -412,7 +405,7 @@ void aaudio_ResumeDevices(void) | ||||
|     } | ||||
|  | ||||
|     if (captureDevice != NULL && captureDevice->hidden != NULL) { | ||||
|         private = (struct SDL_PrivateAudioData *) captureDevice->hidden; | ||||
|         private = (struct SDL_PrivateAudioData *)captureDevice->hidden; | ||||
|  | ||||
|         if (private->resume) { | ||||
|             SDL_AtomicSet(&captureDevice->paused, 0); | ||||
| @@ -435,24 +428,24 @@ void aaudio_ResumeDevices(void) | ||||
|  None of the standard state queries indicate any problem in my testing. And the error callback doesn't actually get called. | ||||
|  But, AAudioStream_getTimestamp() does return AAUDIO_ERROR_INVALID_STATE | ||||
| */ | ||||
| SDL_bool aaudio_DetectBrokenPlayState( void ) | ||||
| SDL_bool aaudio_DetectBrokenPlayState(void) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *private; | ||||
|     int64_t framePosition, timeNanoseconds; | ||||
|     aaudio_result_t res; | ||||
|  | ||||
|     if (audioDevice == NULL || !audioDevice->hidden ) { | ||||
|     if (audioDevice == NULL || !audioDevice->hidden) { | ||||
|         return SDL_FALSE; | ||||
|     } | ||||
|  | ||||
|     private = audioDevice->hidden; | ||||
|  | ||||
|     res = ctx.AAudioStream_getTimestamp( private->stream, CLOCK_MONOTONIC, &framePosition, &timeNanoseconds ); | ||||
|     if ( res == AAUDIO_ERROR_INVALID_STATE ) { | ||||
|         aaudio_stream_state_t currentState = ctx.AAudioStream_getState( private->stream ); | ||||
|     res = ctx.AAudioStream_getTimestamp(private->stream, CLOCK_MONOTONIC, &framePosition, &timeNanoseconds); | ||||
|     if (res == AAUDIO_ERROR_INVALID_STATE) { | ||||
|         aaudio_stream_state_t currentState = ctx.AAudioStream_getState(private->stream); | ||||
|         /* AAudioStream_getTimestamp() will also return AAUDIO_ERROR_INVALID_STATE while the stream is still initially starting. But we only care if it silently went invalid while playing. */ | ||||
|         if ( currentState == AAUDIO_STREAM_STATE_STARTED ) { | ||||
|             LOGI( "SDL aaudio_DetectBrokenPlayState: detected invalid audio device state: AAudioStream_getTimestamp result=%d, framePosition=%lld, timeNanoseconds=%lld, getState=%d", (int)res, (long long)framePosition, (long long)timeNanoseconds, (int)currentState ); | ||||
|         if (currentState == AAUDIO_STREAM_STATE_STARTED) { | ||||
|             LOGI("SDL aaudio_DetectBrokenPlayState: detected invalid audio device state: AAudioStream_getTimestamp result=%d, framePosition=%lld, timeNanoseconds=%lld, getState=%d", (int)res, (long long)framePosition, (long long)timeNanoseconds, (int)currentState); | ||||
|             return SDL_TRUE; | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -28,7 +28,7 @@ | ||||
| #include <aaudio/AAudio.h> | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
| @@ -47,7 +47,6 @@ void aaudio_ResumeDevices(void); | ||||
| void aaudio_PauseDevices(void); | ||||
| SDL_bool aaudio_DetectBrokenPlayState(void); | ||||
|  | ||||
|  | ||||
| #endif /* _SDL_aaudio_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|   | ||||
| @@ -19,62 +19,61 @@ | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #define SDL_PROC_UNUSED(ret,func,params) | ||||
| #define SDL_PROC_UNUSED(ret, func, params) | ||||
|  | ||||
| SDL_PROC(const char *, AAudio_convertResultToText, (aaudio_result_t returnCode)) | ||||
| SDL_PROC(const char *, AAudio_convertStreamStateToText, (aaudio_stream_state_t state)) | ||||
| SDL_PROC(aaudio_result_t, AAudio_createStreamBuilder, (AAudioStreamBuilder** builder)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setDeviceId, (AAudioStreamBuilder* builder, int32_t deviceId)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setSampleRate, (AAudioStreamBuilder* builder, int32_t sampleRate)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setChannelCount, (AAudioStreamBuilder* builder, int32_t channelCount)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSamplesPerFrame, (AAudioStreamBuilder* builder, int32_t samplesPerFrame)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setFormat, (AAudioStreamBuilder* builder, aaudio_format_t format)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSharingMode, (AAudioStreamBuilder* builder, aaudio_sharing_mode_t sharingMode)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setDirection, (AAudioStreamBuilder* builder, aaudio_direction_t direction)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setBufferCapacityInFrames, (AAudioStreamBuilder* builder, int32_t numFrames)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setPerformanceMode, (AAudioStreamBuilder* builder, aaudio_performance_mode_t mode)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setUsage, (AAudioStreamBuilder* builder, aaudio_usage_t usage)) /* API 28 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setContentType, (AAudioStreamBuilder* builder, aaudio_content_type_t contentType)) /* API 28 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setInputPreset, (AAudioStreamBuilder* builder, aaudio_input_preset_t inputPreset)) /* API 28 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setAllowedCapturePolicy, (AAudioStreamBuilder* builder, aaudio_allowed_capture_policy_t capturePolicy)) /* API 29 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSessionId, (AAudioStreamBuilder* builder, aaudio_session_id_t sessionId)) /* API 28 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setPrivacySensitive, (AAudioStreamBuilder* builder, bool privacySensitive)) /* API 30 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setDataCallback, (AAudioStreamBuilder* builder, AAudioStream_dataCallback callback, void *userData)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setFramesPerDataCallback, (AAudioStreamBuilder* builder, int32_t numFrames)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setErrorCallback, (AAudioStreamBuilder* builder, AAudioStream_errorCallback callback, void *userData)) | ||||
| SDL_PROC(aaudio_result_t , AAudioStreamBuilder_openStream, (AAudioStreamBuilder* builder, AAudioStream** stream)) | ||||
| SDL_PROC(aaudio_result_t , AAudioStreamBuilder_delete, (AAudioStreamBuilder* builder)) | ||||
| SDL_PROC_UNUSED(aaudio_result_t , AAudioStream_release, (AAudioStream* stream)) /* API 30 */ | ||||
| SDL_PROC(aaudio_result_t , AAudioStream_close, (AAudioStream* stream)) | ||||
| SDL_PROC(aaudio_result_t , AAudioStream_requestStart, (AAudioStream* stream)) | ||||
| SDL_PROC(aaudio_result_t , AAudioStream_requestPause, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(aaudio_result_t , AAudioStream_requestFlush, (AAudioStream* stream)) | ||||
| SDL_PROC(aaudio_result_t , AAudioStream_requestStop, (AAudioStream* stream)) | ||||
| SDL_PROC(aaudio_stream_state_t, AAudioStream_getState, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(aaudio_result_t, AAudioStream_waitForStateChange, (AAudioStream* stream, aaudio_stream_state_t inputState, aaudio_stream_state_t *nextState, int64_t timeoutNanoseconds)) | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_read, (AAudioStream* stream, void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)) | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_write, (AAudioStream* stream, const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)) | ||||
| SDL_PROC_UNUSED(aaudio_result_t, AAudioStream_setBufferSizeInFrames, (AAudioStream* stream, int32_t numFrames)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getBufferSizeInFrames, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getFramesPerBurst, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getBufferCapacityInFrames, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getFramesPerDataCallback, (AAudioStream* stream)) | ||||
| SDL_PROC(int32_t, AAudioStream_getXRunCount, (AAudioStream* stream)) | ||||
| SDL_PROC(int32_t, AAudioStream_getSampleRate, (AAudioStream* stream)) | ||||
| SDL_PROC(int32_t, AAudioStream_getChannelCount, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getSamplesPerFrame, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getDeviceId, (AAudioStream* stream)) | ||||
| SDL_PROC(aaudio_format_t, AAudioStream_getFormat, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(aaudio_sharing_mode_t, AAudioStream_getSharingMode, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(aaudio_performance_mode_t, AAudioStream_getPerformanceMode, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(aaudio_direction_t, AAudioStream_getDirection, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(int64_t, AAudioStream_getFramesWritten, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(int64_t, AAudioStream_getFramesRead, (AAudioStream* stream)) | ||||
| SDL_PROC_UNUSED(aaudio_session_id_t, AAudioStream_getSessionId, (AAudioStream* stream)) /* API 28 */ | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_getTimestamp, (AAudioStream* stream, clockid_t clockid, int64_t *framePosition, int64_t *timeNanoseconds)) | ||||
| SDL_PROC_UNUSED(aaudio_usage_t, AAudioStream_getUsage, (AAudioStream* stream)) /* API 28 */ | ||||
| SDL_PROC_UNUSED(aaudio_content_type_t, AAudioStream_getContentType, (AAudioStream* stream)) /* API 28 */ | ||||
| SDL_PROC_UNUSED(aaudio_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(bool, AAudioStream_isPrivacySensitive, (AAudioStream* stream)) /* API 30 */ | ||||
|  | ||||
| SDL_PROC(aaudio_result_t, AAudio_createStreamBuilder, (AAudioStreamBuilder * *builder)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setDeviceId, (AAudioStreamBuilder * builder, int32_t deviceId)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setSampleRate, (AAudioStreamBuilder * builder, int32_t sampleRate)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setChannelCount, (AAudioStreamBuilder * builder, int32_t channelCount)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSamplesPerFrame, (AAudioStreamBuilder * builder, int32_t samplesPerFrame)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setFormat, (AAudioStreamBuilder * builder, aaudio_format_t format)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSharingMode, (AAudioStreamBuilder * builder, aaudio_sharing_mode_t sharingMode)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setDirection, (AAudioStreamBuilder * builder, aaudio_direction_t direction)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setBufferCapacityInFrames, (AAudioStreamBuilder * builder, int32_t numFrames)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setPerformanceMode, (AAudioStreamBuilder * builder, aaudio_performance_mode_t mode)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setUsage, (AAudioStreamBuilder * builder, aaudio_usage_t usage))                                         /* API 28 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setContentType, (AAudioStreamBuilder * builder, aaudio_content_type_t contentType))                      /* API 28 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setInputPreset, (AAudioStreamBuilder * builder, aaudio_input_preset_t inputPreset))                      /* API 28 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setAllowedCapturePolicy, (AAudioStreamBuilder * builder, aaudio_allowed_capture_policy_t capturePolicy)) /* API 29 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSessionId, (AAudioStreamBuilder * builder, aaudio_session_id_t sessionId))                            /* API 28 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setPrivacySensitive, (AAudioStreamBuilder * builder, bool privacySensitive))                             /* API 30 */ | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setDataCallback, (AAudioStreamBuilder * builder, AAudioStream_dataCallback callback, void *userData)) | ||||
| SDL_PROC_UNUSED(void, AAudioStreamBuilder_setFramesPerDataCallback, (AAudioStreamBuilder * builder, int32_t numFrames)) | ||||
| SDL_PROC(void, AAudioStreamBuilder_setErrorCallback, (AAudioStreamBuilder * builder, AAudioStream_errorCallback callback, void *userData)) | ||||
| SDL_PROC(aaudio_result_t, AAudioStreamBuilder_openStream, (AAudioStreamBuilder * builder, AAudioStream **stream)) | ||||
| SDL_PROC(aaudio_result_t, AAudioStreamBuilder_delete, (AAudioStreamBuilder * builder)) | ||||
| SDL_PROC_UNUSED(aaudio_result_t, AAudioStream_release, (AAudioStream * stream)) /* API 30 */ | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_close, (AAudioStream * stream)) | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_requestStart, (AAudioStream * stream)) | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_requestPause, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(aaudio_result_t, AAudioStream_requestFlush, (AAudioStream * stream)) | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_requestStop, (AAudioStream * stream)) | ||||
| SDL_PROC(aaudio_stream_state_t, AAudioStream_getState, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(aaudio_result_t, AAudioStream_waitForStateChange, (AAudioStream * stream, aaudio_stream_state_t inputState, aaudio_stream_state_t *nextState, int64_t timeoutNanoseconds)) | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_read, (AAudioStream * stream, void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)) | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_write, (AAudioStream * stream, const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)) | ||||
| SDL_PROC_UNUSED(aaudio_result_t, AAudioStream_setBufferSizeInFrames, (AAudioStream * stream, int32_t numFrames)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getBufferSizeInFrames, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getFramesPerBurst, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getBufferCapacityInFrames, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getFramesPerDataCallback, (AAudioStream * stream)) | ||||
| SDL_PROC(int32_t, AAudioStream_getXRunCount, (AAudioStream * stream)) | ||||
| SDL_PROC(int32_t, AAudioStream_getSampleRate, (AAudioStream * stream)) | ||||
| SDL_PROC(int32_t, AAudioStream_getChannelCount, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getSamplesPerFrame, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(int32_t, AAudioStream_getDeviceId, (AAudioStream * stream)) | ||||
| SDL_PROC(aaudio_format_t, AAudioStream_getFormat, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(aaudio_sharing_mode_t, AAudioStream_getSharingMode, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(aaudio_performance_mode_t, AAudioStream_getPerformanceMode, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(aaudio_direction_t, AAudioStream_getDirection, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(int64_t, AAudioStream_getFramesWritten, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(int64_t, AAudioStream_getFramesRead, (AAudioStream * stream)) | ||||
| SDL_PROC_UNUSED(aaudio_session_id_t, AAudioStream_getSessionId, (AAudioStream * stream)) /* API 28 */ | ||||
| SDL_PROC(aaudio_result_t, AAudioStream_getTimestamp, (AAudioStream * stream, clockid_t clockid, int64_t *framePosition, int64_t *timeNanoseconds)) | ||||
| SDL_PROC_UNUSED(aaudio_usage_t, AAudioStream_getUsage, (AAudioStream * stream))                                 /* API 28 */ | ||||
| SDL_PROC_UNUSED(aaudio_content_type_t, AAudioStream_getContentType, (AAudioStream * stream))                    /* API 28 */ | ||||
| SDL_PROC_UNUSED(aaudio_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(bool, AAudioStream_isPrivacySensitive, (AAudioStream * stream))                                 /* API 30 */ | ||||
|   | ||||
| @@ -34,7 +34,7 @@ | ||||
| /* Allow access to a raw mixing buffer */ | ||||
|  | ||||
| #include <sys/types.h> | ||||
| #include <signal.h>             /* For kill() */ | ||||
| #include <signal.h> /* For kill() */ | ||||
| #include <string.h> | ||||
|  | ||||
| #include "SDL_timer.h" | ||||
| @@ -46,64 +46,46 @@ | ||||
| #include "SDL_loadso.h" | ||||
| #endif | ||||
|  | ||||
| static int (*ALSA_snd_pcm_open) | ||||
|   (snd_pcm_t **, const char *, snd_pcm_stream_t, int); | ||||
| static int (*ALSA_snd_pcm_close) (snd_pcm_t * pcm); | ||||
| static snd_pcm_sframes_t (*ALSA_snd_pcm_writei) | ||||
|   (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 int (*ALSA_snd_pcm_recover) (snd_pcm_t *, int, int); | ||||
| static int (*ALSA_snd_pcm_prepare) (snd_pcm_t *); | ||||
| static int (*ALSA_snd_pcm_drain) (snd_pcm_t *); | ||||
| static const char *(*ALSA_snd_strerror) (int); | ||||
| static size_t(*ALSA_snd_pcm_hw_params_sizeof) (void); | ||||
| static size_t(*ALSA_snd_pcm_sw_params_sizeof) (void); | ||||
| static void (*ALSA_snd_pcm_hw_params_copy) | ||||
|   (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_set_access) | ||||
|   (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_channels) | ||||
|   (snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int); | ||||
| 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_rate_near) | ||||
|   (snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, 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_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_sw_params_current) (snd_pcm_t *, | ||||
|                                               snd_pcm_sw_params_t *); | ||||
| static int (*ALSA_snd_pcm_sw_params_set_start_threshold) | ||||
|   (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_nonblock) (snd_pcm_t *, int); | ||||
| static int (*ALSA_snd_pcm_open)(snd_pcm_t **, const char *, snd_pcm_stream_t, int); | ||||
| static int (*ALSA_snd_pcm_close)(snd_pcm_t *pcm); | ||||
| static snd_pcm_sframes_t (*ALSA_snd_pcm_writei)(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 int (*ALSA_snd_pcm_recover)(snd_pcm_t *, int, int); | ||||
| static int (*ALSA_snd_pcm_prepare)(snd_pcm_t *); | ||||
| static int (*ALSA_snd_pcm_drain)(snd_pcm_t *); | ||||
| static const char *(*ALSA_snd_strerror)(int); | ||||
| static size_t (*ALSA_snd_pcm_hw_params_sizeof)(void); | ||||
| static size_t (*ALSA_snd_pcm_sw_params_sizeof)(void); | ||||
| static void (*ALSA_snd_pcm_hw_params_copy)(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_set_access)(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_channels)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int); | ||||
| 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_rate_near)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, 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_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_sw_params_current)(snd_pcm_t *, | ||||
|                                              snd_pcm_sw_params_t *); | ||||
| static int (*ALSA_snd_pcm_sw_params_set_start_threshold)(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_nonblock)(snd_pcm_t *, int); | ||||
| static int (*ALSA_snd_pcm_wait)(snd_pcm_t *, int); | ||||
| static int (*ALSA_snd_pcm_sw_params_set_avail_min) | ||||
|   (snd_pcm_t *, snd_pcm_sw_params_t *, snd_pcm_uframes_t); | ||||
| static int (*ALSA_snd_pcm_sw_params_set_avail_min)(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_device_name_hint) (int, const char *, void ***); | ||||
| static char* (*ALSA_snd_device_name_get_hint) (const void *, const char *); | ||||
| static int (*ALSA_snd_device_name_free_hint) (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 int (*ALSA_snd_device_name_free_hint)(void **); | ||||
| static snd_pcm_sframes_t (*ALSA_snd_pcm_avail)(snd_pcm_t *); | ||||
| #ifdef SND_CHMAP_API_VERSION | ||||
| static snd_pcm_chmap_t* (*ALSA_snd_pcm_get_chmap) (snd_pcm_t *); | ||||
| static int (*ALSA_snd_pcm_chmap_print) (const snd_pcm_chmap_t *map, size_t maxlen, char *buf); | ||||
| static snd_pcm_chmap_t *(*ALSA_snd_pcm_get_chmap)(snd_pcm_t *); | ||||
| static int (*ALSA_snd_pcm_chmap_print)(const snd_pcm_chmap_t *map, size_t maxlen, char *buf); | ||||
| #endif | ||||
|  | ||||
| #ifdef SDL_AUDIO_DRIVER_ALSA_DYNAMIC | ||||
| @@ -113,8 +95,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 void *alsa_handle = NULL; | ||||
|  | ||||
| static int | ||||
| load_alsa_sym(const char *fn, void **addr) | ||||
| static int load_alsa_sym(const char *fn, void **addr) | ||||
| { | ||||
|     *addr = SDL_LoadFunction(alsa_handle, fn); | ||||
|     if (*addr == NULL) { | ||||
| @@ -126,14 +107,14 @@ load_alsa_sym(const char *fn, void **addr) | ||||
| } | ||||
|  | ||||
| /* cast funcs to char* first, to please GCC's strict aliasing rules. */ | ||||
| #define SDL_ALSA_SYM(x) \ | ||||
|     if (!load_alsa_sym(#x, (void **) (char *) &ALSA_##x)) return -1 | ||||
| #define SDL_ALSA_SYM(x)                                 \ | ||||
|     if (!load_alsa_sym(#x, (void **)(char *)&ALSA_##x)) \ | ||||
|     return -1 | ||||
| #else | ||||
| #define SDL_ALSA_SYM(x) ALSA_##x = x | ||||
| #endif | ||||
|  | ||||
| static int | ||||
| load_alsa_syms(void) | ||||
| static int load_alsa_syms(void) | ||||
| { | ||||
|     SDL_ALSA_SYM(snd_pcm_open); | ||||
|     SDL_ALSA_SYM(snd_pcm_close); | ||||
| @@ -183,8 +164,7 @@ load_alsa_syms(void) | ||||
|  | ||||
| #ifdef SDL_AUDIO_DRIVER_ALSA_DYNAMIC | ||||
|  | ||||
| static void | ||||
| UnloadALSALibrary(void) | ||||
| static void UnloadALSALibrary(void) | ||||
| { | ||||
|     if (alsa_handle != NULL) { | ||||
|         SDL_UnloadObject(alsa_handle); | ||||
| @@ -192,8 +172,7 @@ UnloadALSALibrary(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| LoadALSALibrary(void) | ||||
| static int LoadALSALibrary(void) | ||||
| { | ||||
|     int retval = 0; | ||||
|     if (alsa_handle == NULL) { | ||||
| @@ -213,13 +192,11 @@ LoadALSALibrary(void) | ||||
|  | ||||
| #else | ||||
|  | ||||
| static void | ||||
| UnloadALSALibrary(void) | ||||
| static void UnloadALSALibrary(void) | ||||
| { | ||||
| } | ||||
|  | ||||
| static int | ||||
| LoadALSALibrary(void) | ||||
| static int LoadALSALibrary(void) | ||||
| { | ||||
|     load_alsa_syms(); | ||||
|     return 0; | ||||
| @@ -227,8 +204,7 @@ LoadALSALibrary(void) | ||||
|  | ||||
| #endif /* SDL_AUDIO_DRIVER_ALSA_DYNAMIC */ | ||||
|  | ||||
| static const char * | ||||
| get_audio_device(void *handle, const int channels) | ||||
| static const char *get_audio_device(void *handle, const int channels) | ||||
| { | ||||
|     const char *device; | ||||
|  | ||||
| @@ -237,7 +213,7 @@ get_audio_device(void *handle, const int channels) | ||||
|     } | ||||
|  | ||||
|     /* !!! FIXME: we also check "SDL_AUDIO_DEVICE_NAME" at the higher level. */ | ||||
|     device = SDL_getenv("AUDIODEV");    /* Is there a standard variable name? */ | ||||
|     device = SDL_getenv("AUDIODEV"); /* Is there a standard variable name? */ | ||||
|     if (device != NULL) { | ||||
|         return device; | ||||
|     } | ||||
| @@ -251,49 +227,50 @@ get_audio_device(void *handle, const int channels) | ||||
|     return "default"; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* This function waits until it is possible to write a full sound buffer */ | ||||
| static void | ||||
| ALSA_WaitDevice(_THIS) | ||||
| static void ALSA_WaitDevice(_THIS) | ||||
| { | ||||
| #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; | ||||
|     while (SDL_AtomicGet(&this->enabled)) { | ||||
|         const snd_pcm_sframes_t rc = ALSA_snd_pcm_avail(this->hidden->pcm_handle); | ||||
|         if ((rc < 0) && (rc != -EAGAIN)) { | ||||
|             /* Hmm, not much we can do - abort */ | ||||
|             fprintf(stderr, "ALSA snd_pcm_avail failed (unrecoverable): %s\n", | ||||
|                         ALSA_snd_strerror(rc)); | ||||
|                     ALSA_snd_strerror(rc)); | ||||
|             SDL_OpenedAudioDeviceDisconnected(this); | ||||
|             return; | ||||
|         } else if (rc < needed) { | ||||
|             const Uint32 delay = ((needed - (SDL_max(rc, 0))) * 1000) / this->spec.freq; | ||||
|             SDL_Delay(SDL_max(delay, 10)); | ||||
|         } else { | ||||
|             break;  /* ready to go! */ | ||||
|             break; /* ready to go! */ | ||||
|         } | ||||
|     } | ||||
| #endif | ||||
| } | ||||
|  | ||||
|  | ||||
| /* !!! FIXME: is there a channel swizzler in alsalib instead? */ | ||||
| /* | ||||
|  * https://bugzilla.libsdl.org/show_bug.cgi?id=110 | ||||
|  * "For Linux ALSA, this is FL-FR-RL-RR-C-LFE | ||||
|  *  and for Windows DirectX [and CoreAudio], this is FL-FR-C-LFE-RL-RR" | ||||
|  */ | ||||
| #define SWIZ6(T) \ | ||||
| static void swizzle_alsa_channels_6_##T(void *buffer, const Uint32 bufferlen) { \ | ||||
|     T *ptr = (T *) buffer; \ | ||||
|     Uint32 i; \ | ||||
|     for (i = 0; i < bufferlen; i++, ptr += 6) { \ | ||||
|         T tmp; \ | ||||
|         tmp = ptr[2]; ptr[2] = ptr[4]; ptr[4] = tmp; \ | ||||
|         tmp = ptr[3]; ptr[3] = ptr[5]; ptr[5] = tmp; \ | ||||
|     } \ | ||||
| } | ||||
|  | ||||
| #define SWIZ6(T)                                                                  \ | ||||
|     static void swizzle_alsa_channels_6_##T(void *buffer, const Uint32 bufferlen) \ | ||||
|     {                                                                             \ | ||||
|         T *ptr = (T *)buffer;                                                     \ | ||||
|         Uint32 i;                                                                 \ | ||||
|         for (i = 0; i < bufferlen; i++, ptr += 6) {                               \ | ||||
|             T tmp;                                                                \ | ||||
|             tmp = ptr[2];                                                         \ | ||||
|             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: this screams for a SIMD shuffle operation. */ | ||||
| @@ -302,31 +279,32 @@ static void swizzle_alsa_channels_6_##T(void *buffer, const Uint32 bufferlen) { | ||||
|  * For Linux ALSA, this appears to be FL-FR-RL-RR-C-LFE-SL-SR | ||||
|  *  and for Windows DirectX [and CoreAudio], this is FL-FR-C-LFE-SL-SR-RL-RR" | ||||
|  */ | ||||
| #define SWIZ8(T) \ | ||||
| static void swizzle_alsa_channels_8_##T(void *buffer, const Uint32 bufferlen) { \ | ||||
|     T *ptr = (T *) buffer; \ | ||||
|     Uint32 i; \ | ||||
|     for (i = 0; i < bufferlen; i++, ptr += 6) { \ | ||||
|         const T center = ptr[2]; \ | ||||
|         const T subwoofer = ptr[3]; \ | ||||
|         const T side_left = ptr[4]; \ | ||||
|         const T side_right = ptr[5]; \ | ||||
|         const T rear_left = ptr[6]; \ | ||||
|         const T rear_right = ptr[7]; \ | ||||
|         ptr[2] = rear_left; \ | ||||
|         ptr[3] = rear_right; \ | ||||
|         ptr[4] = center; \ | ||||
|         ptr[5] = subwoofer; \ | ||||
|         ptr[6] = side_left; \ | ||||
|         ptr[7] = side_right; \ | ||||
|     } \ | ||||
| } | ||||
| #define SWIZ8(T)                                                                  \ | ||||
|     static void swizzle_alsa_channels_8_##T(void *buffer, const Uint32 bufferlen) \ | ||||
|     {                                                                             \ | ||||
|         T *ptr = (T *)buffer;                                                     \ | ||||
|         Uint32 i;                                                                 \ | ||||
|         for (i = 0; i < bufferlen; i++, ptr += 6) {                               \ | ||||
|             const T center = ptr[2];                                              \ | ||||
|             const T subwoofer = ptr[3];                                           \ | ||||
|             const T side_left = ptr[4];                                           \ | ||||
|             const T side_right = ptr[5];                                          \ | ||||
|             const T rear_left = ptr[6];                                           \ | ||||
|             const T rear_right = ptr[7];                                          \ | ||||
|             ptr[2] = rear_left;                                                   \ | ||||
|             ptr[3] = rear_right;                                                  \ | ||||
|             ptr[4] = center;                                                      \ | ||||
|             ptr[5] = subwoofer;                                                   \ | ||||
|             ptr[6] = side_left;                                                   \ | ||||
|             ptr[7] = side_right;                                                  \ | ||||
|         }                                                                         \ | ||||
|     } | ||||
|  | ||||
| #define CHANNEL_SWIZZLE(x) \ | ||||
|     x(Uint64) \ | ||||
|     x(Uint32) \ | ||||
|     x(Uint16) \ | ||||
|     x(Uint8) | ||||
|     x(Uint64)              \ | ||||
|         x(Uint32)          \ | ||||
|             x(Uint16)      \ | ||||
|                 x(Uint8) | ||||
|  | ||||
| CHANNEL_SWIZZLE(SWIZ6) | ||||
| CHANNEL_SWIZZLE(SWIZ8) | ||||
| @@ -335,53 +313,59 @@ CHANNEL_SWIZZLE(SWIZ8) | ||||
| #undef SWIZ6 | ||||
| #undef SWIZ8 | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Called right before feeding this->hidden->mixbuf to the hardware. Swizzle | ||||
|  *  channels from Windows/Mac order to the format alsalib will want. | ||||
|  */ | ||||
| static void | ||||
| swizzle_alsa_channels(_THIS, void *buffer, Uint32 bufferlen) | ||||
| static void swizzle_alsa_channels(_THIS, void *buffer, Uint32 bufferlen) | ||||
| { | ||||
|     switch (this->spec.channels) { | ||||
|         #define CHANSWIZ(chans) \ | ||||
|         case chans: \ | ||||
|             switch ((this->spec.format & (0xFF))) { \ | ||||
|                 case 8: swizzle_alsa_channels_##chans##_Uint8(buffer, bufferlen); break; \ | ||||
|                 case 16: 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; | ||||
| #define CHANSWIZ(chans)                                                \ | ||||
|     case chans:                                                        \ | ||||
|         switch ((this->spec.format & (0xFF))) {                        \ | ||||
|         case 8:                                                        \ | ||||
|             swizzle_alsa_channels_##chans##_Uint8(buffer, bufferlen);  \ | ||||
|             break;                                                     \ | ||||
|         case 16:                                                       \ | ||||
|             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; | ||||
|  | ||||
|         CHANSWIZ(6); | ||||
|         CHANSWIZ(8); | ||||
|         #undef CHANSWIZ | ||||
|         default: break; | ||||
| #undef CHANSWIZ | ||||
|     default: | ||||
|         break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| #ifdef SND_CHMAP_API_VERSION | ||||
| /* Some devices have the right channel map, no swizzling necessary */ | ||||
| static void | ||||
| no_swizzle(_THIS, void *buffer, Uint32 bufferlen) | ||||
| static void no_swizzle(_THIS, void *buffer, Uint32 bufferlen) | ||||
| { | ||||
| } | ||||
| #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) * | ||||
|                                 this->spec.channels; | ||||
|     snd_pcm_uframes_t frames_left = ((snd_pcm_uframes_t) this->spec.samples); | ||||
|                            this->spec.channels; | ||||
|     snd_pcm_uframes_t frames_left = ((snd_pcm_uframes_t)this->spec.samples); | ||||
|  | ||||
|     this->hidden->swizzle_func(this, this->hidden->mixbuf, frames_left); | ||||
|  | ||||
|     while ( frames_left > 0 && SDL_AtomicGet(&this->enabled) ) { | ||||
|     while (frames_left > 0 && SDL_AtomicGet(&this->enabled)) { | ||||
|         int status = ALSA_snd_pcm_writei(this->hidden->pcm_handle, | ||||
|                                          sample_buf, frames_left); | ||||
|  | ||||
| @@ -413,29 +397,27 @@ ALSA_PlayDevice(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| ALSA_GetDeviceBuf(_THIS) | ||||
| static Uint8 *ALSA_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     return this->hidden->mixbuf; | ||||
| } | ||||
|  | ||||
| static int | ||||
| ALSA_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int 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) * | ||||
|                                 this->spec.channels; | ||||
|                            this->spec.channels; | ||||
|     const int total_frames = buflen / frame_size; | ||||
|     snd_pcm_uframes_t frames_left = total_frames; | ||||
|     snd_pcm_uframes_t wait_time = frame_size / 2; | ||||
|  | ||||
|     SDL_assert((buflen % frame_size) == 0); | ||||
|  | ||||
|     while ( frames_left > 0 && SDL_AtomicGet(&this->enabled) ) { | ||||
|     while (frames_left > 0 && SDL_AtomicGet(&this->enabled)) { | ||||
|         int status; | ||||
|  | ||||
|         status = ALSA_snd_pcm_readi(this->hidden->pcm_handle, | ||||
|                                         sample_buf, frames_left); | ||||
|                                     sample_buf, frames_left); | ||||
|  | ||||
|         if (status == -EAGAIN) { | ||||
|             ALSA_snd_pcm_wait(this->hidden->pcm_handle, wait_time); | ||||
| @@ -462,14 +444,12 @@ ALSA_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     return (total_frames - frames_left) * frame_size; | ||||
| } | ||||
|  | ||||
| static void | ||||
| ALSA_FlushCapture(_THIS) | ||||
| static void ALSA_FlushCapture(_THIS) | ||||
| { | ||||
|     ALSA_snd_pcm_reset(this->hidden->pcm_handle); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ALSA_CloseDevice(_THIS) | ||||
| static void ALSA_CloseDevice(_THIS) | ||||
| { | ||||
|     if (this->hidden->pcm_handle) { | ||||
|         /* Wait for the submitted audio to drain | ||||
| @@ -484,8 +464,7 @@ ALSA_CloseDevice(_THIS) | ||||
|     SDL_free(this->hidden); | ||||
| } | ||||
|  | ||||
| static int | ||||
| ALSA_set_buffer_size(_THIS, snd_pcm_hw_params_t *params) | ||||
| static int ALSA_set_buffer_size(_THIS, snd_pcm_hw_params_t *params) | ||||
| { | ||||
|     int status; | ||||
|     snd_pcm_hw_params_t *hwparams; | ||||
| @@ -499,49 +478,48 @@ ALSA_set_buffer_size(_THIS, snd_pcm_hw_params_t *params) | ||||
|     /* Attempt to match the period size to the requested buffer size */ | ||||
|     persize = this->spec.samples; | ||||
|     status = ALSA_snd_pcm_hw_params_set_period_size_near( | ||||
|                 this->hidden->pcm_handle, hwparams, &persize, NULL); | ||||
|     if ( status < 0 ) { | ||||
|         this->hidden->pcm_handle, hwparams, &persize, NULL); | ||||
|     if (status < 0) { | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     /* Need to at least double buffer */ | ||||
|     periods = 2; | ||||
|     status = ALSA_snd_pcm_hw_params_set_periods_min( | ||||
|                 this->hidden->pcm_handle, hwparams, &periods, NULL); | ||||
|     if ( status < 0 ) { | ||||
|         this->hidden->pcm_handle, hwparams, &periods, NULL); | ||||
|     if (status < 0) { | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     status = ALSA_snd_pcm_hw_params_set_periods_first( | ||||
|                 this->hidden->pcm_handle, hwparams, &periods, NULL); | ||||
|     if ( status < 0 ) { | ||||
|         this->hidden->pcm_handle, hwparams, &periods, NULL); | ||||
|     if (status < 0) { | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     /* "set" the hardware with the desired parameters */ | ||||
|     status = ALSA_snd_pcm_hw_params(this->hidden->pcm_handle, hwparams); | ||||
|     if ( status < 0 ) { | ||||
|     if (status < 0) { | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     this->spec.samples = persize; | ||||
|  | ||||
|     /* This is useful for debugging */ | ||||
|     if ( SDL_getenv("SDL_AUDIO_ALSA_DEBUG") ) { | ||||
|     if (SDL_getenv("SDL_AUDIO_ALSA_DEBUG")) { | ||||
|         snd_pcm_uframes_t bufsize; | ||||
|  | ||||
|         ALSA_snd_pcm_hw_params_get_buffer_size(hwparams, &bufsize); | ||||
|  | ||||
|         fprintf(stderr, | ||||
|             "ALSA: period size = %ld, periods = %u, buffer size = %lu\n", | ||||
|             persize, periods, bufsize); | ||||
|                 "ALSA: period size = %ld, periods = %u, buffer size = %lu\n", | ||||
|                 persize, periods, bufsize); | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| ALSA_OpenDevice(_THIS, const char *devname) | ||||
| static int ALSA_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     int status = 0; | ||||
|     SDL_bool iscapture = this->iscapture; | ||||
| @@ -568,9 +546,9 @@ ALSA_OpenDevice(_THIS, const char *devname) | ||||
|     /* Open the audio device */ | ||||
|     /* Name of device should depend on # channels in spec */ | ||||
|     status = ALSA_snd_pcm_open(&pcm_handle, | ||||
|                 get_audio_device(this->handle, this->spec.channels), | ||||
|                 iscapture ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK, | ||||
|                 SND_PCM_NONBLOCK); | ||||
|                                get_audio_device(this->handle, this->spec.channels), | ||||
|                                iscapture ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK, | ||||
|                                SND_PCM_NONBLOCK); | ||||
|  | ||||
|     if (status < 0) { | ||||
|         return SDL_SetError("ALSA: Couldn't open audio device: %s", ALSA_snd_strerror(status)); | ||||
| @@ -707,18 +685,18 @@ ALSA_OpenDevice(_THIS, const char *devname) | ||||
|     /* Allocate mixing buffer */ | ||||
|     if (!iscapture) { | ||||
|         this->hidden->mixlen = this->spec.size; | ||||
|         this->hidden->mixbuf = (Uint8 *) SDL_malloc(this->hidden->mixlen); | ||||
|         this->hidden->mixbuf = (Uint8 *)SDL_malloc(this->hidden->mixlen); | ||||
|         if (this->hidden->mixbuf == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
|         SDL_memset(this->hidden->mixbuf, this->spec.silence, this->hidden->mixlen); | ||||
|     } | ||||
|  | ||||
|     #if !SDL_ALSA_NON_BLOCKING | ||||
| #if !SDL_ALSA_NON_BLOCKING | ||||
|     if (!iscapture) { | ||||
|         ALSA_snd_pcm_nonblock(pcm_handle, 0); | ||||
|     } | ||||
|     #endif | ||||
| #endif | ||||
|  | ||||
|     /* We're ready to rock and roll. :-) */ | ||||
|     return 0; | ||||
| @@ -731,10 +709,9 @@ typedef struct ALSA_Device | ||||
|     struct ALSA_Device *next; | ||||
| } ALSA_Device; | ||||
|  | ||||
| static void | ||||
| add_device(const int iscapture, const char *name, void *hint, ALSA_Device **pSeen) | ||||
| static void 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 *handle = NULL; | ||||
|     char *ptr; | ||||
| @@ -754,7 +731,7 @@ add_device(const int iscapture, const char *name, void *hint, ALSA_Device **pSee | ||||
|             return; | ||||
|         } | ||||
|     } else { | ||||
|         desc = (char *) name; | ||||
|         desc = (char *)name; | ||||
|     } | ||||
|  | ||||
|     SDL_assert(name != NULL); | ||||
| @@ -791,11 +768,9 @@ add_device(const int iscapture, const char *name, void *hint, ALSA_Device **pSee | ||||
|     *pSeen = dev; | ||||
| } | ||||
|  | ||||
|  | ||||
| static ALSA_Device *hotplug_devices = NULL; | ||||
|  | ||||
| static void | ||||
| ALSA_HotplugIteration(void) | ||||
| static void ALSA_HotplugIteration(void) | ||||
| { | ||||
|     void **hints = NULL; | ||||
|     ALSA_Device *dev; | ||||
| @@ -810,7 +785,7 @@ ALSA_HotplugIteration(void) | ||||
|         int bestmatch = 0xFFFF; | ||||
|         size_t match_len = 0; | ||||
|         int defaultdev = -1; | ||||
|         static const char * const prefixes[] = { | ||||
|         static const char *const prefixes[] = { | ||||
|             "hw:", "sysdefault:", "default:", NULL | ||||
|         }; | ||||
|  | ||||
| @@ -853,7 +828,7 @@ ALSA_HotplugIteration(void) | ||||
|  | ||||
|             /* if we didn't find a device name prefix we like at all... */ | ||||
|             if ((match == NULL) && (defaultdev != i)) { | ||||
|                 continue;  /* ...skip anything that isn't the default device. */ | ||||
|                 continue; /* ...skip anything that isn't the default device. */ | ||||
|             } | ||||
|  | ||||
|             name = ALSA_snd_device_name_get_hint(hints[i], "NAME"); | ||||
| @@ -879,7 +854,7 @@ ALSA_HotplugIteration(void) | ||||
|                 prev = NULL; | ||||
|                 for (dev = unseen; dev; dev = next) { | ||||
|                     next = dev->next; | ||||
|                     if ( (SDL_strcmp(dev->name, name) == 0) && (((isinput) && dev->iscapture) || ((isoutput) && !dev->iscapture)) ) { | ||||
|                     if ((SDL_strcmp(dev->name, name) == 0) && (((isinput) && dev->iscapture) || ((isoutput) && !dev->iscapture))) { | ||||
|                         if (prev) { | ||||
|                             prev->next = next; | ||||
|                         } else { | ||||
| @@ -911,7 +886,7 @@ ALSA_HotplugIteration(void) | ||||
|  | ||||
|         ALSA_snd_device_name_free_hint(hints); | ||||
|  | ||||
|         hotplug_devices = seen;   /* now we have a known-good list of attached devices. */ | ||||
|         hotplug_devices = seen; /* now we have a known-good list of attached devices. */ | ||||
|  | ||||
|         /* report anything still in unseen as removed. */ | ||||
|         for (dev = unseen; dev; dev = next) { | ||||
| @@ -928,8 +903,7 @@ ALSA_HotplugIteration(void) | ||||
| static SDL_atomic_t ALSA_hotplug_shutdown; | ||||
| static SDL_Thread *ALSA_hotplug_thread; | ||||
|  | ||||
| static int SDLCALL | ||||
| ALSA_HotplugThread(void *arg) | ||||
| static int SDLCALL ALSA_HotplugThread(void *arg) | ||||
| { | ||||
|     SDL_SetThreadPriority(SDL_THREAD_PRIORITY_LOW); | ||||
|  | ||||
| @@ -940,17 +914,16 @@ ALSA_HotplugThread(void *arg) | ||||
|             SDL_Delay(100); | ||||
|         } | ||||
|  | ||||
|         ALSA_HotplugIteration();  /* run the check. */ | ||||
|         ALSA_HotplugIteration(); /* run the check. */ | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static void | ||||
| ALSA_DetectDevices(void) | ||||
| static 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. */ | ||||
|  | ||||
| #if SDL_ALSA_HOTPLUG_THREAD | ||||
|     SDL_AtomicSet(&ALSA_hotplug_shutdown, 0); | ||||
| @@ -959,8 +932,7 @@ ALSA_DetectDevices(void) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static void | ||||
| ALSA_Deinitialize(void) | ||||
| static void ALSA_Deinitialize(void) | ||||
| { | ||||
|     ALSA_Device *dev; | ||||
|     ALSA_Device *next; | ||||
| @@ -985,8 +957,7 @@ ALSA_Deinitialize(void) | ||||
|     UnloadALSALibrary(); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| ALSA_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool ALSA_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     if (LoadALSALibrary() < 0) { | ||||
|         return SDL_FALSE; | ||||
| @@ -1006,10 +977,9 @@ ALSA_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|     impl->SupportsNonPow2Samples = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
|  | ||||
| AudioBootStrap ALSA_bootstrap = { | ||||
|     "alsa", "ALSA PCM audio", ALSA_Init, SDL_FALSE | ||||
| }; | ||||
|   | ||||
| @@ -28,7 +28,7 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|   | ||||
| @@ -32,11 +32,10 @@ | ||||
|  | ||||
| #include <android/log.h> | ||||
|  | ||||
| static SDL_AudioDevice* audioDevice = NULL; | ||||
| static SDL_AudioDevice* captureDevice = NULL; | ||||
| static SDL_AudioDevice *audioDevice = NULL; | ||||
| static SDL_AudioDevice *captureDevice = NULL; | ||||
|  | ||||
| static int | ||||
| ANDROIDAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int ANDROIDAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     SDL_AudioFormat test_format; | ||||
|     SDL_bool iscapture = this->iscapture; | ||||
| @@ -50,7 +49,7 @@ ANDROIDAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|         audioDevice = this; | ||||
|     } | ||||
|  | ||||
|     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) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
| @@ -78,32 +77,27 @@ ANDROIDAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| ANDROIDAUDIO_PlayDevice(_THIS) | ||||
| static void ANDROIDAUDIO_PlayDevice(_THIS) | ||||
| { | ||||
|     Android_JNI_WriteAudioBuffer(); | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| ANDROIDAUDIO_GetDeviceBuf(_THIS) | ||||
| static Uint8 *ANDROIDAUDIO_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     return Android_JNI_GetAudioBuffer(); | ||||
| } | ||||
|  | ||||
| static int | ||||
| ANDROIDAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int ANDROIDAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     return Android_JNI_CaptureAudioBuffer(buffer, buflen); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ANDROIDAUDIO_FlushCapture(_THIS) | ||||
| static void ANDROIDAUDIO_FlushCapture(_THIS) | ||||
| { | ||||
|     Android_JNI_FlushCapturedAudio(); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ANDROIDAUDIO_CloseDevice(_THIS) | ||||
| static void ANDROIDAUDIO_CloseDevice(_THIS) | ||||
| { | ||||
|     /* 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 | ||||
| @@ -119,8 +113,7 @@ ANDROIDAUDIO_CloseDevice(_THIS) | ||||
|     SDL_free(this->hidden); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| ANDROIDAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool ANDROIDAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     /* Set the function pointers */ | ||||
|     impl->OpenDevice = ANDROIDAUDIO_OpenDevice; | ||||
| @@ -135,7 +128,7 @@ ANDROIDAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->OnlyHasDefaultOutputDevice = SDL_TRUE; | ||||
|     impl->OnlyHasDefaultCaptureDevice = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap ANDROIDAUDIO_bootstrap = { | ||||
| @@ -148,7 +141,7 @@ void ANDROIDAUDIO_PauseDevices(void) | ||||
|     /* TODO: Handle multiple devices? */ | ||||
|     struct SDL_PrivateAudioData *private; | ||||
|     if (audioDevice != NULL && audioDevice->hidden != NULL) { | ||||
|         private = (struct SDL_PrivateAudioData *) audioDevice->hidden; | ||||
|         private = (struct SDL_PrivateAudioData *)audioDevice->hidden; | ||||
|         if (SDL_AtomicGet(&audioDevice->paused)) { | ||||
|             /* The device is already paused, leave it alone */ | ||||
|             private->resume = SDL_FALSE; | ||||
| @@ -160,7 +153,7 @@ void ANDROIDAUDIO_PauseDevices(void) | ||||
|     } | ||||
|  | ||||
|     if (captureDevice != NULL && captureDevice->hidden != NULL) { | ||||
|         private = (struct SDL_PrivateAudioData *) captureDevice->hidden; | ||||
|         private = (struct SDL_PrivateAudioData *)captureDevice->hidden; | ||||
|         if (SDL_AtomicGet(&captureDevice->paused)) { | ||||
|             /* The device is already paused, leave it alone */ | ||||
|             private->resume = SDL_FALSE; | ||||
| @@ -178,7 +171,7 @@ void ANDROIDAUDIO_ResumeDevices(void) | ||||
|     /* TODO: Handle multiple devices? */ | ||||
|     struct SDL_PrivateAudioData *private; | ||||
|     if (audioDevice != NULL && audioDevice->hidden != NULL) { | ||||
|         private = (struct SDL_PrivateAudioData *) audioDevice->hidden; | ||||
|         private = (struct SDL_PrivateAudioData *)audioDevice->hidden; | ||||
|         if (private->resume) { | ||||
|             SDL_AtomicSet(&audioDevice->paused, 0); | ||||
|             private->resume = SDL_FALSE; | ||||
| @@ -187,7 +180,7 @@ void ANDROIDAUDIO_ResumeDevices(void) | ||||
|     } | ||||
|  | ||||
|     if (captureDevice != NULL && captureDevice->hidden != NULL) { | ||||
|         private = (struct SDL_PrivateAudioData *) captureDevice->hidden; | ||||
|         private = (struct SDL_PrivateAudioData *)captureDevice->hidden; | ||||
|         if (private->resume) { | ||||
|             SDL_AtomicSet(&captureDevice->paused, 0); | ||||
|             private->resume = SDL_FALSE; | ||||
| @@ -204,4 +197,3 @@ void ANDROIDAUDIO_PauseDevices(void) {} | ||||
| #endif /* SDL_AUDIO_DRIVER_ANDROID */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|  | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|   | ||||
| @@ -48,7 +48,7 @@ | ||||
| #endif | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|   | ||||
| @@ -34,21 +34,20 @@ | ||||
| #define DEBUG_COREAUDIO 0 | ||||
|  | ||||
| #if DEBUG_COREAUDIO | ||||
|     #define CHECK_RESULT(msg) \ | ||||
|         if (result != noErr) { \ | ||||
|             printf("COREAUDIO: Got error %d from '%s'!\n", (int) result, msg); \ | ||||
|             SDL_SetError("CoreAudio error (%s): %d", msg, (int) result); \ | ||||
|             return 0; \ | ||||
|         } | ||||
| #define CHECK_RESULT(msg)                                                 \ | ||||
|     if (result != noErr) {                                                \ | ||||
|         printf("COREAUDIO: Got error %d from '%s'!\n", (int)result, msg); \ | ||||
|         SDL_SetError("CoreAudio error (%s): %d", msg, (int)result);       \ | ||||
|         return 0;                                                         \ | ||||
|     } | ||||
| #else | ||||
|     #define CHECK_RESULT(msg) \ | ||||
|         if (result != noErr) { \ | ||||
|             SDL_SetError("CoreAudio error (%s): %d", msg, (int) result); \ | ||||
|             return 0; \ | ||||
|         } | ||||
| #define CHECK_RESULT(msg)                                           \ | ||||
|     if (result != noErr) {                                          \ | ||||
|         SDL_SetError("CoreAudio error (%s): %d", msg, (int)result); \ | ||||
|         return 0;                                                   \ | ||||
|     } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #if MACOSX_COREAUDIO | ||||
| static const AudioObjectPropertyAddress devlist_address = { | ||||
|     kAudioHardwarePropertyDevices, | ||||
| @@ -68,10 +67,9 @@ typedef struct AudioDeviceList | ||||
| static AudioDeviceList *output_devs = NULL; | ||||
| static AudioDeviceList *capture_devs = NULL; | ||||
|  | ||||
| static SDL_bool | ||||
| add_to_internal_dev_list(const int iscapture, AudioDeviceID devId) | ||||
| static SDL_bool 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) { | ||||
|         return SDL_FALSE; | ||||
|     } | ||||
| @@ -87,16 +85,14 @@ add_to_internal_dev_list(const int iscapture, AudioDeviceID devId) | ||||
|     return SDL_TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| addToDevList(const char *name, SDL_AudioSpec *spec, const int iscapture, AudioDeviceID devId, void *data) | ||||
| static void addToDevList(const char *name, SDL_AudioSpec *spec, const int iscapture, AudioDeviceID devId, void *data) | ||||
| { | ||||
|     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 | ||||
| build_device_list(int iscapture, addDevFn addfn, void *addfndata) | ||||
| static void build_device_list(int iscapture, addDevFn addfn, void *addfndata) | ||||
| { | ||||
|     OSStatus result = noErr; | ||||
|     UInt32 size = 0; | ||||
| @@ -109,7 +105,7 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) | ||||
|     if (result != kAudioHardwareNoError) | ||||
|         return; | ||||
|  | ||||
|     devs = (AudioDeviceID *) alloca(size); | ||||
|     devs = (AudioDeviceID *)alloca(size); | ||||
|     if (devs == NULL) | ||||
|         return; | ||||
|  | ||||
| @@ -118,7 +114,7 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) | ||||
|     if (result != kAudioHardwareNoError) | ||||
|         return; | ||||
|  | ||||
|     max = size / sizeof (AudioDeviceID); | ||||
|     max = size / sizeof(AudioDeviceID); | ||||
|     for (i = 0; i < max; i++) { | ||||
|         CFStringRef cfstr = NULL; | ||||
|         char *ptr = NULL; | ||||
| @@ -148,7 +144,7 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) | ||||
|         if (result != noErr) | ||||
|             continue; | ||||
|  | ||||
|         buflist = (AudioBufferList *) SDL_malloc(size); | ||||
|         buflist = (AudioBufferList *)SDL_malloc(size); | ||||
|         if (buflist == NULL) | ||||
|             continue; | ||||
|  | ||||
| @@ -168,13 +164,13 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) | ||||
|         if (spec.channels == 0) | ||||
|             continue; | ||||
|  | ||||
|         size = sizeof (sampleRate); | ||||
|         size = sizeof(sampleRate); | ||||
|         result = AudioObjectGetPropertyData(dev, &freqaddr, 0, NULL, &size, &sampleRate); | ||||
|         if (result == noErr) { | ||||
|             spec.freq = (int) sampleRate; | ||||
|             spec.freq = (int)sampleRate; | ||||
|         } | ||||
|  | ||||
|         size = sizeof (CFStringRef); | ||||
|         size = sizeof(CFStringRef); | ||||
|         result = AudioObjectGetPropertyData(dev, &nameaddr, 0, NULL, &size, &cfstr); | ||||
|         if (result != kAudioHardwareNoError) | ||||
|             continue; | ||||
| @@ -182,10 +178,9 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) | ||||
|         len = CFStringGetMaximumSizeForEncoding(CFStringGetLength(cfstr), | ||||
|                                                 kCFStringEncodingUTF8); | ||||
|  | ||||
|         ptr = (char *) SDL_malloc(len + 1); | ||||
|         ptr = (char *)SDL_malloc(len + 1); | ||||
|         usable = ((ptr != NULL) && | ||||
|                   (CFStringGetCString | ||||
|                    (cfstr, ptr, len + 1, kCFStringEncodingUTF8))); | ||||
|                   (CFStringGetCString(cfstr, ptr, len + 1, kCFStringEncodingUTF8))); | ||||
|  | ||||
|         CFRelease(cfstr); | ||||
|  | ||||
| @@ -204,16 +199,15 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) | ||||
| #if DEBUG_COREAUDIO | ||||
|             printf("COREAUDIO: Found %s device #%d: '%s' (devid %d)\n", | ||||
|                    ((iscapture) ? "capture" : "output"), | ||||
|                    (int) i, ptr, (int) dev); | ||||
|                    (int)i, ptr, (int)dev); | ||||
| #endif | ||||
|             addfn(ptr, &spec, iscapture, dev, addfndata); | ||||
|         } | ||||
|         SDL_free(ptr);  /* addfn() would have copied the string. */ | ||||
|         SDL_free(ptr); /* addfn() would have copied the string. */ | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| free_audio_device_list(AudioDeviceList **list) | ||||
| static void free_audio_device_list(AudioDeviceList **list) | ||||
| { | ||||
|     AudioDeviceList *item = *list; | ||||
|     while (item) { | ||||
| @@ -224,17 +218,15 @@ free_audio_device_list(AudioDeviceList **list) | ||||
|     *list = NULL; | ||||
| } | ||||
|  | ||||
| static void | ||||
| COREAUDIO_DetectDevices(void) | ||||
| static void COREAUDIO_DetectDevices(void) | ||||
| { | ||||
|     build_device_list(SDL_TRUE, addToDevList, NULL); | ||||
|     build_device_list(SDL_FALSE, addToDevList, NULL); | ||||
| } | ||||
|  | ||||
| static void | ||||
| build_device_change_list(const char *name, SDL_AudioSpec *spec, const int iscapture, AudioDeviceID devId, void *data) | ||||
| static void 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; | ||||
|     for (item = *list; item != NULL; item = item->next) { | ||||
|         if (item->devid == devId) { | ||||
| @@ -243,12 +235,11 @@ build_device_change_list(const char *name, SDL_AudioSpec *spec, const int iscapt | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     add_to_internal_dev_list(iscapture, devId);  /* new device, add it. */ | ||||
|     SDL_AddAudioDevice(iscapture, name, spec, (void *) ((size_t) devId)); | ||||
|     add_to_internal_dev_list(iscapture, devId); /* new device, add it. */ | ||||
|     SDL_AddAudioDevice(iscapture, name, spec, (void *)((size_t)devId)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| reprocess_device_list(const int iscapture, AudioDeviceList **list) | ||||
| static void reprocess_device_list(const int iscapture, AudioDeviceList **list) | ||||
| { | ||||
|     AudioDeviceList *item; | ||||
|     AudioDeviceList *prev = NULL; | ||||
| @@ -265,7 +256,7 @@ reprocess_device_list(const int iscapture, AudioDeviceList **list) | ||||
|         if (item->alive) { | ||||
|             prev = item; | ||||
|         } else { | ||||
|             SDL_RemoveAudioDevice(iscapture, (void *) ((size_t) item->devid)); | ||||
|             SDL_RemoveAudioDevice(iscapture, (void *)((size_t)item->devid)); | ||||
|             if (prev) { | ||||
|                 prev->next = item->next; | ||||
|             } else { | ||||
| @@ -278,8 +269,7 @@ reprocess_device_list(const int iscapture, AudioDeviceList **list) | ||||
| } | ||||
|  | ||||
| /* this is called when the system's list of available audio devices changes. */ | ||||
| static OSStatus | ||||
| device_list_changed(AudioObjectID systemObj, UInt32 num_addr, const AudioObjectPropertyAddress *addrs, void *data) | ||||
| static OSStatus device_list_changed(AudioObjectID systemObj, UInt32 num_addr, const AudioObjectPropertyAddress *addrs, void *data) | ||||
| { | ||||
|     reprocess_device_list(SDL_TRUE, &capture_devs); | ||||
|     reprocess_device_list(SDL_FALSE, &output_devs); | ||||
| @@ -287,7 +277,6 @@ device_list_changed(AudioObjectID systemObj, UInt32 num_addr, const AudioObjectP | ||||
| } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| static int open_playback_devices; | ||||
| static int open_capture_devices; | ||||
| static int num_open_devices; | ||||
| @@ -339,16 +328,14 @@ static void interruption_begin(_THIS) | ||||
|  | ||||
| static void interruption_end(_THIS) | ||||
| { | ||||
|     if (this != NULL && this->hidden != NULL && this->hidden->audioQueue != NULL | ||||
|     && this->hidden->interrupted | ||||
|     && AudioQueueStart(this->hidden->audioQueue, NULL) == AVAudioSessionErrorCodeNone) { | ||||
|     if (this != NULL && this->hidden != NULL && this->hidden->audioQueue != NULL && this->hidden->interrupted && AudioQueueStart(this->hidden->audioQueue, NULL) == AVAudioSessionErrorCodeNone) { | ||||
|         this->hidden->interrupted = SDL_FALSE; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @interface SDLInterruptionListener : NSObject | ||||
|  | ||||
| @property (nonatomic, assign) SDL_AudioDevice *device; | ||||
| @property(nonatomic, assign) SDL_AudioDevice *device; | ||||
|  | ||||
| @end | ||||
|  | ||||
| @@ -356,7 +343,7 @@ static void interruption_end(_THIS) | ||||
|  | ||||
| - (void)audioSessionInterruption:(NSNotification *)note | ||||
| { | ||||
|     @synchronized (self) { | ||||
|     @synchronized(self) { | ||||
|         NSNumber *type = note.userInfo[AVAudioSessionInterruptionTypeKey]; | ||||
|         if (type.unsignedIntegerValue == AVAudioSessionInterruptionTypeBegan) { | ||||
|             interruption_begin(self.device); | ||||
| @@ -368,7 +355,7 @@ static void interruption_end(_THIS) | ||||
|  | ||||
| - (void)applicationBecameActive:(NSNotification *)note | ||||
| { | ||||
|     @synchronized (self) { | ||||
|     @synchronized(self) { | ||||
|         interruption_end(self.device); | ||||
|     } | ||||
| } | ||||
| @@ -504,9 +491,9 @@ static BOOL update_audio_session(_THIS, SDL_bool open, SDL_bool allow_playandrec | ||||
|             this->hidden->interruption_listener = CFBridgingRetain(listener); | ||||
|         } else { | ||||
|             SDLInterruptionListener *listener = nil; | ||||
|             listener = (SDLInterruptionListener *) CFBridgingRelease(this->hidden->interruption_listener); | ||||
|             listener = (SDLInterruptionListener *)CFBridgingRelease(this->hidden->interruption_listener); | ||||
|             [center removeObserver:listener]; | ||||
|             @synchronized (listener) { | ||||
|             @synchronized(listener) { | ||||
|                 listener.device = NULL; | ||||
|             } | ||||
|         } | ||||
| @@ -516,25 +503,23 @@ static BOOL update_audio_session(_THIS, SDL_bool open, SDL_bool allow_playandrec | ||||
| } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* The AudioQueue callback */ | ||||
| static void | ||||
| outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer) | ||||
| static void outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer) | ||||
| { | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *) inUserData; | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *)inUserData; | ||||
|  | ||||
|     /* This flag is set before this->mixer_lock is destroyed during | ||||
|        shutdown, so check it before grabbing the mutex, and then check it | ||||
|        again _after_ in case we blocked waiting on the lock. */ | ||||
|     if (SDL_AtomicGet(&this->shutdown)) { | ||||
|         return;  /* don't do anything, since we don't even want to enqueue this buffer again. */ | ||||
|         return; /* don't do anything, since we don't even want to enqueue this buffer again. */ | ||||
|     } | ||||
|  | ||||
|     SDL_LockMutex(this->mixer_lock); | ||||
|  | ||||
|     if (SDL_AtomicGet(&this->shutdown)) { | ||||
|         SDL_UnlockMutex(this->mixer_lock); | ||||
|         return;  /* don't do anything, since we don't even want to enqueue this buffer again. */ | ||||
|         return; /* don't do anything, since we don't even want to enqueue this buffer again. */ | ||||
|     } | ||||
|  | ||||
|     if (!SDL_AtomicGet(&this->enabled) || SDL_AtomicGet(&this->paused)) { | ||||
| @@ -542,7 +527,7 @@ outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffe | ||||
|         SDL_memset(inBuffer->mAudioData, this->spec.silence, inBuffer->mAudioDataBytesCapacity); | ||||
|     } else if (this->stream) { | ||||
|         UInt32 remaining = inBuffer->mAudioDataBytesCapacity; | ||||
|         Uint8 *ptr = (Uint8 *) inBuffer->mAudioData; | ||||
|         Uint8 *ptr = (Uint8 *)inBuffer->mAudioData; | ||||
|  | ||||
|         while (remaining > 0) { | ||||
|             if (SDL_AudioStreamAvailable(this->stream) == 0) { | ||||
| @@ -568,14 +553,14 @@ outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffe | ||||
|         } | ||||
|     } else { | ||||
|         UInt32 remaining = inBuffer->mAudioDataBytesCapacity; | ||||
|         Uint8 *ptr = (Uint8 *) inBuffer->mAudioData; | ||||
|         Uint8 *ptr = (Uint8 *)inBuffer->mAudioData; | ||||
|  | ||||
|         while (remaining > 0) { | ||||
|             UInt32 len; | ||||
|             if (this->hidden->bufferOffset >= this->hidden->bufferSize) { | ||||
|                 /* Generate the data */ | ||||
|                 (*this->callbackspec.callback)(this->callbackspec.userdata, | ||||
|                             this->hidden->buffer, this->hidden->bufferSize); | ||||
|                                                this->hidden->buffer, this->hidden->bufferSize); | ||||
|                 this->hidden->bufferOffset = 0; | ||||
|             } | ||||
|  | ||||
| @@ -583,8 +568,7 @@ outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffe | ||||
|             if (len > remaining) { | ||||
|                 len = remaining; | ||||
|             } | ||||
|             SDL_memcpy(ptr, (char *)this->hidden->buffer + | ||||
|                        this->hidden->bufferOffset, len); | ||||
|             SDL_memcpy(ptr, (char *)this->hidden->buffer + this->hidden->bufferOffset, len); | ||||
|             ptr = ptr + len; | ||||
|             remaining -= len; | ||||
|             this->hidden->bufferOffset += len; | ||||
| @@ -598,20 +582,19 @@ outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffe | ||||
|     SDL_UnlockMutex(this->mixer_lock); | ||||
| } | ||||
|  | ||||
| static void | ||||
| inputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, | ||||
|               const AudioTimeStamp *inStartTime, UInt32 inNumberPacketDescriptions, | ||||
|               const AudioStreamPacketDescription *inPacketDescs) | ||||
| static void inputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, | ||||
|                           const AudioTimeStamp *inStartTime, UInt32 inNumberPacketDescriptions, | ||||
|                           const AudioStreamPacketDescription *inPacketDescs) | ||||
| { | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *) inUserData; | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *)inUserData; | ||||
|  | ||||
|     if (SDL_AtomicGet(&this->shutdown)) { | ||||
|         return;  /* don't do anything. */ | ||||
|         return; /* don't do anything. */ | ||||
|     } | ||||
|  | ||||
|     /* ignore unless we're active. */ | ||||
|     if (!SDL_AtomicGet(&this->paused) && SDL_AtomicGet(&this->enabled)) { | ||||
|         const Uint8 *ptr = (const Uint8 *) inBuffer->mAudioData; | ||||
|         const Uint8 *ptr = (const Uint8 *)inBuffer->mAudioData; | ||||
|         UInt32 remaining = inBuffer->mAudioDataByteSize; | ||||
|         while (remaining > 0) { | ||||
|             UInt32 len = this->hidden->bufferSize - this->hidden->bufferOffset; | ||||
| @@ -636,35 +619,32 @@ inputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer | ||||
|     AudioQueueEnqueueBuffer(this->hidden->audioQueue, inBuffer, 0, NULL); | ||||
| } | ||||
|  | ||||
|  | ||||
| #if MACOSX_COREAUDIO | ||||
| static const AudioObjectPropertyAddress alive_address = | ||||
| { | ||||
| static const AudioObjectPropertyAddress alive_address = { | ||||
|     kAudioDevicePropertyDeviceIsAlive, | ||||
|     kAudioObjectPropertyScopeGlobal, | ||||
|     kAudioObjectPropertyElementMain | ||||
| }; | ||||
|  | ||||
| static OSStatus | ||||
| device_unplugged(AudioObjectID devid, UInt32 num_addr, const AudioObjectPropertyAddress *addrs, void *data) | ||||
| static OSStatus 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; | ||||
|     UInt32 isAlive = 1; | ||||
|     UInt32 size = sizeof (isAlive); | ||||
|     UInt32 size = sizeof(isAlive); | ||||
|     OSStatus error; | ||||
|  | ||||
|     if (!SDL_AtomicGet(&this->enabled)) { | ||||
|         return 0;  /* already known to be dead. */ | ||||
|         return 0; /* already known to be dead. */ | ||||
|     } | ||||
|  | ||||
|     error = AudioObjectGetPropertyData(this->hidden->deviceID, &alive_address, | ||||
|                                        0, NULL, &size, &isAlive); | ||||
|  | ||||
|     if (error == kAudioHardwareBadDeviceError) { | ||||
|         dead = SDL_TRUE;  /* device was unplugged. */ | ||||
|         dead = SDL_TRUE; /* device was unplugged. */ | ||||
|     } else if ((error == kAudioHardwareNoError) && (!isAlive)) { | ||||
|         dead = SDL_TRUE;  /* device died in some other way. */ | ||||
|         dead = SDL_TRUE; /* device died in some other way. */ | ||||
|     } | ||||
|  | ||||
|     if (dead) { | ||||
| @@ -675,20 +655,18 @@ device_unplugged(AudioObjectID devid, UInt32 num_addr, const AudioObjectProperty | ||||
| } | ||||
|  | ||||
| /* macOS calls this when the default device changed (if we have a default device open). */ | ||||
| static OSStatus | ||||
| default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress *inAddresses, void *inUserData) | ||||
| static OSStatus default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress *inAddresses, void *inUserData) | ||||
| { | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *) inUserData; | ||||
|     #if DEBUG_COREAUDIO | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *)inUserData; | ||||
| #if DEBUG_COREAUDIO | ||||
|     printf("COREAUDIO: default device changed for SDL audio device %p!\n", this); | ||||
|     #endif | ||||
|     SDL_AtomicSet(&this->hidden->device_change_flag, 1);  /* let the audioqueue thread pick up on this when safe to do so. */ | ||||
| #endif | ||||
|     SDL_AtomicSet(&this->hidden->device_change_flag, 1); /* let the audioqueue thread pick up on this when safe to do so. */ | ||||
|     return noErr; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static void | ||||
| COREAUDIO_CloseDevice(_THIS) | ||||
| static void COREAUDIO_CloseDevice(_THIS) | ||||
| { | ||||
|     const SDL_bool iscapture = this->iscapture; | ||||
|     int i; | ||||
| @@ -696,7 +674,7 @@ COREAUDIO_CloseDevice(_THIS) | ||||
| /* !!! FIXME: what does iOS do when a bluetooth audio device vanishes? Headphones unplugged? */ | ||||
| /* !!! FIXME: (we only do a "default" device on iOS right now...can we do more?) */ | ||||
| #if MACOSX_COREAUDIO | ||||
|     if (this->handle != NULL) {  /* we don't register this listener for default devices. */ | ||||
|     if (this->handle != NULL) { /* we don't register this listener for default devices. */ | ||||
|         AudioObjectRemovePropertyListener(this->hidden->deviceID, &alive_address, device_unplugged, this); | ||||
|     } | ||||
| #endif | ||||
| @@ -710,7 +688,7 @@ COREAUDIO_CloseDevice(_THIS) | ||||
|     } | ||||
|  | ||||
|     if (this->hidden->thread) { | ||||
|         SDL_assert(SDL_AtomicGet(&this->shutdown) != 0);  /* should have been set by SDL_audio.c */ | ||||
|         SDL_assert(SDL_AtomicGet(&this->shutdown) != 0); /* should have been set by SDL_audio.c */ | ||||
|         SDL_WaitThread(this->hidden->thread, NULL); | ||||
|     } | ||||
|  | ||||
| @@ -728,7 +706,7 @@ COREAUDIO_CloseDevice(_THIS) | ||||
|         if (open_devices[i] == this) { | ||||
|             --num_open_devices; | ||||
|             if (i < num_open_devices) { | ||||
|                 SDL_memmove(&open_devices[i], &open_devices[i+1], sizeof(open_devices[i])*(num_open_devices - i)); | ||||
|                 SDL_memmove(&open_devices[i], &open_devices[i + 1], sizeof(open_devices[i]) * (num_open_devices - i)); | ||||
|             } | ||||
|             break; | ||||
|         } | ||||
| @@ -750,12 +728,11 @@ COREAUDIO_CloseDevice(_THIS) | ||||
| } | ||||
|  | ||||
| #if MACOSX_COREAUDIO | ||||
| static int | ||||
| prepare_device(_THIS) | ||||
| static int prepare_device(_THIS) | ||||
| { | ||||
|     void *handle = this->handle; | ||||
|     SDL_bool iscapture = this->iscapture; | ||||
|     AudioDeviceID devid = (AudioDeviceID) ((size_t) handle); | ||||
|     AudioDeviceID devid = (AudioDeviceID)((size_t)handle); | ||||
|     OSStatus result = noErr; | ||||
|     UInt32 size = 0; | ||||
|     UInt32 alive = 0; | ||||
| @@ -768,23 +745,20 @@ prepare_device(_THIS) | ||||
|     }; | ||||
|  | ||||
|     if (handle == NULL) { | ||||
|         size = sizeof (AudioDeviceID); | ||||
|         size = sizeof(AudioDeviceID); | ||||
|         addr.mSelector = | ||||
|             ((iscapture) ? kAudioHardwarePropertyDefaultInputDevice : | ||||
|             kAudioHardwarePropertyDefaultOutputDevice); | ||||
|             ((iscapture) ? kAudioHardwarePropertyDefaultInputDevice : kAudioHardwarePropertyDefaultOutputDevice); | ||||
|         result = AudioObjectGetPropertyData(kAudioObjectSystemObject, &addr, | ||||
|                                             0, NULL, &size, &devid); | ||||
|         CHECK_RESULT("AudioHardwareGetProperty (default device)"); | ||||
|     } | ||||
|  | ||||
|     addr.mSelector = kAudioDevicePropertyDeviceIsAlive; | ||||
|     addr.mScope = iscapture ? kAudioDevicePropertyScopeInput : | ||||
|                     kAudioDevicePropertyScopeOutput; | ||||
|     addr.mScope = iscapture ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput; | ||||
|  | ||||
|     size = sizeof (alive); | ||||
|     size = sizeof(alive); | ||||
|     result = AudioObjectGetPropertyData(devid, &addr, 0, NULL, &size, &alive); | ||||
|     CHECK_RESULT | ||||
|         ("AudioDeviceGetProperty (kAudioDevicePropertyDeviceIsAlive)"); | ||||
|     CHECK_RESULT("AudioDeviceGetProperty (kAudioDevicePropertyDeviceIsAlive)"); | ||||
|  | ||||
|     if (!alive) { | ||||
|         SDL_SetError("CoreAudio: requested device exists, but isn't alive."); | ||||
| @@ -792,7 +766,7 @@ prepare_device(_THIS) | ||||
|     } | ||||
|  | ||||
|     addr.mSelector = kAudioDevicePropertyHogMode; | ||||
|     size = sizeof (pid); | ||||
|     size = sizeof(pid); | ||||
|     result = AudioObjectGetPropertyData(devid, &addr, 0, NULL, &size, &pid); | ||||
|  | ||||
|     /* some devices don't support this property, so errors are fine here. */ | ||||
| @@ -805,8 +779,7 @@ prepare_device(_THIS) | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
| static int | ||||
| assign_device_to_audioqueue(_THIS) | ||||
| static int assign_device_to_audioqueue(_THIS) | ||||
| { | ||||
|     const AudioObjectPropertyAddress prop = { | ||||
|         kAudioDevicePropertyDeviceUID, | ||||
| @@ -816,7 +789,7 @@ assign_device_to_audioqueue(_THIS) | ||||
|  | ||||
|     OSStatus result; | ||||
|     CFStringRef devuid; | ||||
|     UInt32 devuidsize = sizeof (devuid); | ||||
|     UInt32 devuidsize = sizeof(devuid); | ||||
|     result = AudioObjectGetPropertyData(this->hidden->deviceID, &prop, 0, NULL, &devuidsize, &devuid); | ||||
|     CHECK_RESULT("AudioObjectGetPropertyData (kAudioDevicePropertyDeviceUID)"); | ||||
|     result = AudioQueueSetProperty(this->hidden->audioQueue, kAudioQueueProperty_CurrentDevice, &devuid, devuidsize); | ||||
| @@ -826,8 +799,7 @@ assign_device_to_audioqueue(_THIS) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static int | ||||
| prepare_audioqueue(_THIS) | ||||
| static int prepare_audioqueue(_THIS) | ||||
| { | ||||
|     const AudioStreamBasicDescription *strdesc = &this->hidden->strdesc; | ||||
|     const int iscapture = this->iscapture; | ||||
| @@ -835,7 +807,8 @@ prepare_audioqueue(_THIS) | ||||
|     int i, numAudioBuffers = 2; | ||||
|     AudioChannelLayout layout; | ||||
|     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); | ||||
|  | ||||
| @@ -847,7 +820,7 @@ prepare_audioqueue(_THIS) | ||||
|         CHECK_RESULT("AudioQueueNewOutput"); | ||||
|     } | ||||
|  | ||||
|     #if MACOSX_COREAUDIO | ||||
| #if MACOSX_COREAUDIO | ||||
|     if (!assign_device_to_audioqueue(this)) { | ||||
|         return 0; | ||||
|     } | ||||
| @@ -861,7 +834,7 @@ prepare_audioqueue(_THIS) | ||||
|         /* If this fails, oh well, we won't notice a device had an extraordinary event take place. */ | ||||
|         AudioObjectAddPropertyListener(this->hidden->deviceID, &alive_address, device_unplugged, this); | ||||
|     } | ||||
|     #endif | ||||
| #endif | ||||
|  | ||||
|     /* Calculate the final parameters for this audio specification */ | ||||
|     SDL_CalculateAudioSpec(&this->spec); | ||||
| @@ -918,12 +891,12 @@ prepare_audioqueue(_THIS) | ||||
|         MINIMUM_AUDIO_BUFFER_TIME_MS = 40.0; | ||||
|     } | ||||
| #endif | ||||
|     if (msecs < MINIMUM_AUDIO_BUFFER_TIME_MS) {  /* use more buffers if we have a VERY small sample set. */ | ||||
|     if (msecs < MINIMUM_AUDIO_BUFFER_TIME_MS) { /* use more buffers if we have a VERY small sample set. */ | ||||
|         numAudioBuffers = ((int)SDL_ceil(MINIMUM_AUDIO_BUFFER_TIME_MS / msecs) * 2); | ||||
|     } | ||||
|  | ||||
|     this->hidden->numAudioBuffers = numAudioBuffers; | ||||
|     this->hidden->audioBuffer = SDL_calloc(1, sizeof (AudioQueueBufferRef) * numAudioBuffers); | ||||
|     this->hidden->audioBuffer = SDL_calloc(1, sizeof(AudioQueueBufferRef) * numAudioBuffers); | ||||
|     if (this->hidden->audioBuffer == NULL) { | ||||
|         SDL_OutOfMemory(); | ||||
|         return 0; | ||||
| @@ -950,24 +923,23 @@ prepare_audioqueue(_THIS) | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
| static int | ||||
| audioqueue_thread(void *arg) | ||||
| static int audioqueue_thread(void *arg) | ||||
| { | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *) arg; | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *)arg; | ||||
|     int rc; | ||||
|  | ||||
|     #if MACOSX_COREAUDIO | ||||
| #if MACOSX_COREAUDIO | ||||
|     const AudioObjectPropertyAddress default_device_address = { | ||||
|         this->iscapture ? kAudioHardwarePropertyDefaultInputDevice : kAudioHardwarePropertyDefaultOutputDevice, | ||||
|         kAudioObjectPropertyScopeGlobal, | ||||
|         kAudioObjectPropertyElementMain | ||||
|     }; | ||||
|  | ||||
|     if (this->handle == NULL) {  /* opened the default device? Register to know if the user picks a new default. */ | ||||
|     if (this->handle == NULL) { /* opened the default device? Register to know if the user picks a new default. */ | ||||
|         /* we don't care if this fails; we just won't change to new default devices, but we still otherwise function in this case. */ | ||||
|         AudioObjectAddPropertyListener(kAudioObjectSystemObject, &default_device_address, default_device_changed, this); | ||||
|     } | ||||
|     #endif | ||||
| #endif | ||||
|  | ||||
|     rc = prepare_audioqueue(this); | ||||
|     if (!rc) { | ||||
| @@ -984,14 +956,14 @@ audioqueue_thread(void *arg) | ||||
|     while (!SDL_AtomicGet(&this->shutdown)) { | ||||
|         CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.10, 1); | ||||
|  | ||||
|         #if MACOSX_COREAUDIO | ||||
| #if MACOSX_COREAUDIO | ||||
|         if ((this->handle == NULL) && SDL_AtomicGet(&this->hidden->device_change_flag)) { | ||||
|             const AudioDeviceID prev_devid = this->hidden->deviceID; | ||||
|             SDL_AtomicSet(&this->hidden->device_change_flag, 0); | ||||
|  | ||||
|             #if DEBUG_COREAUDIO | ||||
| #if DEBUG_COREAUDIO | ||||
|             printf("COREAUDIO: audioqueue_thread is trying to switch to new default device!\n"); | ||||
|             #endif | ||||
| #endif | ||||
|  | ||||
|             /* if any of this fails, there's not much to do but wait to see if the user gives up | ||||
|                and quits (flagging the audioqueue for shutdown), or toggles to some other system | ||||
| @@ -1009,26 +981,25 @@ audioqueue_thread(void *arg) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         #endif | ||||
| #endif | ||||
|     } | ||||
|  | ||||
|     if (!this->iscapture) {  /* Drain off any pending playback. */ | ||||
|         const CFTimeInterval secs = (((this->spec.size / (SDL_AUDIO_BITSIZE(this->spec.format) / 8)) / this->spec.channels) / ((CFTimeInterval) this->spec.freq)) * 2.0; | ||||
|     if (!this->iscapture) { /* Drain off any pending playback. */ | ||||
|         const CFTimeInterval secs = (((this->spec.size / (SDL_AUDIO_BITSIZE(this->spec.format) / 8)) / this->spec.channels) / ((CFTimeInterval)this->spec.freq)) * 2.0; | ||||
|         CFRunLoopRunInMode(kCFRunLoopDefaultMode, secs, 0); | ||||
|     } | ||||
|  | ||||
|     #if MACOSX_COREAUDIO | ||||
| #if MACOSX_COREAUDIO | ||||
|     if (this->handle == NULL) { | ||||
|         /* we don't care if this fails; we just won't change to new default devices, but we still otherwise function in this case. */ | ||||
|         AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &default_device_address, default_device_changed, this); | ||||
|     } | ||||
|     #endif | ||||
| #endif | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| COREAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int COREAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     AudioStreamBasicDescription *strdesc; | ||||
|     SDL_AudioFormat test_format; | ||||
| @@ -1064,7 +1035,7 @@ COREAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     /* Stop CoreAudio from doing expensive audio rate conversion */ | ||||
|     @autoreleasepool { | ||||
|         AVAudioSession* session = [AVAudioSession sharedInstance]; | ||||
|         AVAudioSession *session = [AVAudioSession sharedInstance]; | ||||
|         [session setPreferredSampleRate:this->spec.freq error:nil]; | ||||
|         this->spec.freq = (int)session.sampleRate; | ||||
| #if TARGET_OS_TV | ||||
| @@ -1108,7 +1079,7 @@ COREAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|         break; | ||||
|     } | ||||
|  | ||||
|     if (!test_format) {      /* shouldn't happen, but just in case... */ | ||||
|     if (!test_format) { /* shouldn't happen, but just in case... */ | ||||
|         return SDL_SetError("%s: Unsupported audio format", "coreaudio"); | ||||
|     } | ||||
|     this->spec.format = test_format; | ||||
| @@ -1133,7 +1104,7 @@ COREAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     /* This has to init in a new thread so it can get its own CFRunLoop. :/ */ | ||||
|     this->hidden->ready_semaphore = SDL_CreateSemaphore(0); | ||||
|     if (!this->hidden->ready_semaphore) { | ||||
|         return -1;  /* oh well. */ | ||||
|         return -1; /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     this->hidden->thread = SDL_CreateThreadInternal(audioqueue_thread, "AudioQueue thread", 512 * 1024, this); | ||||
| @@ -1153,10 +1124,9 @@ COREAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| } | ||||
|  | ||||
| #if !MACOSX_COREAUDIO | ||||
| static int | ||||
| COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| static int COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| { | ||||
|     AVAudioSession* session = [AVAudioSession sharedInstance]; | ||||
|     AVAudioSession *session = [AVAudioSession sharedInstance]; | ||||
|  | ||||
|     if (name != NULL) { | ||||
|         *name = NULL; | ||||
| @@ -1166,9 +1136,8 @@ COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
|     spec->channels = [session outputNumberOfChannels]; | ||||
|     return 0; | ||||
| } | ||||
| #else /* MACOSX_COREAUDIO */ | ||||
| static int | ||||
| COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| #else  /* MACOSX_COREAUDIO */ | ||||
| static int COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| { | ||||
|     AudioDeviceID devid; | ||||
|     AudioBufferList *buflist; | ||||
| @@ -1207,7 +1176,7 @@ COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
|  | ||||
|     /* Get the Device ID */ | ||||
|     cfstr = NULL; | ||||
|     size = sizeof (AudioDeviceID); | ||||
|     size = sizeof(AudioDeviceID); | ||||
|     result = AudioObjectGetPropertyData(kAudioObjectSystemObject, &addr, | ||||
|                                         0, NULL, &size, &devid); | ||||
|  | ||||
| @@ -1217,7 +1186,7 @@ COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
|  | ||||
|     if (name != NULL) { | ||||
|         /* Use the Device ID to get the name */ | ||||
|         size = sizeof (CFStringRef); | ||||
|         size = sizeof(CFStringRef); | ||||
|         result = AudioObjectGetPropertyData(devid, &nameaddr, 0, NULL, &size, &cfstr); | ||||
|  | ||||
|         if (result != noErr) { | ||||
| @@ -1225,8 +1194,8 @@ COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
|         } | ||||
|  | ||||
|         len = CFStringGetMaximumSizeForEncoding(CFStringGetLength(cfstr), | ||||
|                                                         kCFStringEncodingUTF8); | ||||
|         devname = (char *) SDL_malloc(len + 1); | ||||
|                                                 kCFStringEncodingUTF8); | ||||
|         devname = (char *)SDL_malloc(len + 1); | ||||
|         usable = ((devname != NULL) && | ||||
|                   (CFStringGetCString(cfstr, devname, len + 1, kCFStringEncodingUTF8))); | ||||
|         CFRelease(cfstr); | ||||
| @@ -1258,13 +1227,13 @@ COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
|         return SDL_SetError("%s: Default Device Sample Rate not found", "coreaudio"); | ||||
|     } | ||||
|  | ||||
|     spec->freq = (int) sampleRate; | ||||
|     spec->freq = (int)sampleRate; | ||||
|  | ||||
|     result = AudioObjectGetPropertyDataSize(devid, &bufaddr, 0, NULL, &size); | ||||
|     if (result != noErr) | ||||
|         return SDL_SetError("%s: Default Device Data Size not found", "coreaudio"); | ||||
|  | ||||
|     buflist = (AudioBufferList *) SDL_malloc(size); | ||||
|     buflist = (AudioBufferList *)SDL_malloc(size); | ||||
|     if (buflist == NULL) | ||||
|         return SDL_SetError("%s: Default Device Buffer List not found", "coreaudio"); | ||||
|  | ||||
| @@ -1288,8 +1257,7 @@ COREAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| } | ||||
| #endif /* MACOSX_COREAUDIO */ | ||||
|  | ||||
| static void | ||||
| COREAUDIO_Deinitialize(void) | ||||
| static void COREAUDIO_Deinitialize(void) | ||||
| { | ||||
| #if MACOSX_COREAUDIO | ||||
|     AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &devlist_address, device_list_changed, NULL); | ||||
| @@ -1298,8 +1266,7 @@ COREAUDIO_Deinitialize(void) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| COREAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool COREAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     /* Set the function pointers */ | ||||
|     impl->OpenDevice = COREAUDIO_OpenDevice; | ||||
| @@ -1319,7 +1286,7 @@ COREAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|     impl->SupportsNonPow2Samples = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap COREAUDIO_bootstrap = { | ||||
|   | ||||
| @@ -44,21 +44,20 @@ static SDL_bool SupportsIMMDevice = SDL_FALSE; | ||||
| #endif /* HAVE_MMDEVICEAPI_H */ | ||||
|  | ||||
| /* DirectX function pointers for audio */ | ||||
| static void* DSoundDLL = NULL; | ||||
| typedef HRESULT (WINAPI *fnDirectSoundCreate8)(LPGUID,LPDIRECTSOUND*,LPUNKNOWN); | ||||
| typedef HRESULT (WINAPI *fnDirectSoundEnumerateW)(LPDSENUMCALLBACKW, LPVOID); | ||||
| typedef HRESULT (WINAPI *fnDirectSoundCaptureCreate8)(LPCGUID,LPDIRECTSOUNDCAPTURE8 *,LPUNKNOWN); | ||||
| typedef HRESULT (WINAPI *fnDirectSoundCaptureEnumerateW)(LPDSENUMCALLBACKW,LPVOID); | ||||
| static void *DSoundDLL = NULL; | ||||
| typedef HRESULT(WINAPI *fnDirectSoundCreate8)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN); | ||||
| typedef HRESULT(WINAPI *fnDirectSoundEnumerateW)(LPDSENUMCALLBACKW, LPVOID); | ||||
| typedef HRESULT(WINAPI *fnDirectSoundCaptureCreate8)(LPCGUID, LPDIRECTSOUNDCAPTURE8 *, LPUNKNOWN); | ||||
| typedef HRESULT(WINAPI *fnDirectSoundCaptureEnumerateW)(LPDSENUMCALLBACKW, LPVOID); | ||||
| static fnDirectSoundCreate8 pDirectSoundCreate8 = NULL; | ||||
| static fnDirectSoundEnumerateW pDirectSoundEnumerateW = NULL; | ||||
| static fnDirectSoundCaptureCreate8 pDirectSoundCaptureCreate8 = NULL; | ||||
| 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_IEEE_FLOAT = { 0x00000003, 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 void | ||||
| DSOUND_Unload(void) | ||||
| static void DSOUND_Unload(void) | ||||
| { | ||||
|     pDirectSoundCreate8 = NULL; | ||||
|     pDirectSoundEnumerateW = NULL; | ||||
| @@ -71,9 +70,7 @@ DSOUND_Unload(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| static int | ||||
| DSOUND_Load(void) | ||||
| static int DSOUND_Load(void) | ||||
| { | ||||
|     int loaded = 0; | ||||
|  | ||||
| @@ -83,17 +80,19 @@ DSOUND_Load(void) | ||||
|     if (DSoundDLL == NULL) { | ||||
|         SDL_SetError("DirectSound: failed to load DSOUND.DLL"); | ||||
|     } else { | ||||
|         /* Now make sure we have DirectX 8 or better... */ | ||||
|         #define DSOUNDLOAD(f) { \ | ||||
|             p##f = (fn##f) SDL_LoadFunction(DSoundDLL, #f); \ | ||||
|             if (!p##f) loaded = 0; \ | ||||
|         } | ||||
|         loaded = 1;  /* will reset if necessary. */ | ||||
| /* Now make sure we have DirectX 8 or better... */ | ||||
| #define DSOUNDLOAD(f)                                  \ | ||||
|     {                                                  \ | ||||
|         p##f = (fn##f)SDL_LoadFunction(DSoundDLL, #f); \ | ||||
|         if (!p##f)                                     \ | ||||
|             loaded = 0;                                \ | ||||
|     } | ||||
|         loaded = 1; /* will reset if necessary. */ | ||||
|         DSOUNDLOAD(DirectSoundCreate8); | ||||
|         DSOUNDLOAD(DirectSoundEnumerateW); | ||||
|         DSOUNDLOAD(DirectSoundCaptureCreate8); | ||||
|         DSOUNDLOAD(DirectSoundCaptureEnumerateW); | ||||
|         #undef DSOUNDLOAD | ||||
| #undef DSOUNDLOAD | ||||
|  | ||||
|         if (!loaded) { | ||||
|             SDL_SetError("DirectSound: System doesn't appear to have DX8."); | ||||
| @@ -107,8 +106,7 @@ DSOUND_Load(void) | ||||
|     return loaded; | ||||
| } | ||||
|  | ||||
| static int | ||||
| SetDSerror(const char *function, int code) | ||||
| static int SetDSerror(const char *function, int code) | ||||
| { | ||||
|     const char *error; | ||||
|  | ||||
| @@ -154,14 +152,12 @@ SetDSerror(const char *function, int code) | ||||
|     return SDL_SetError("%s: %s (0x%x)", function, error, code); | ||||
| } | ||||
|  | ||||
| static void | ||||
| DSOUND_FreeDeviceHandle(void *handle) | ||||
| static void DSOUND_FreeDeviceHandle(void *handle) | ||||
| { | ||||
|     SDL_free(handle); | ||||
| } | ||||
|  | ||||
| static int | ||||
| DSOUND_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| static int DSOUND_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| { | ||||
| #if HAVE_MMDEVICEAPI_H | ||||
|     if (SupportsIMMDevice) { | ||||
| @@ -171,29 +167,27 @@ DSOUND_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
|     return SDL_Unsupported(); | ||||
| } | ||||
|  | ||||
| static BOOL CALLBACK | ||||
| FindAllDevs(LPGUID guid, LPCWSTR desc, LPCWSTR module, LPVOID data) | ||||
| static BOOL CALLBACK FindAllDevs(LPGUID guid, LPCWSTR desc, LPCWSTR module, LPVOID data) | ||||
| { | ||||
|     const int iscapture = (int) ((size_t) data); | ||||
|     if (guid != NULL) {  /* skip default device */ | ||||
|     const int iscapture = (int)((size_t)data); | ||||
|     if (guid != NULL) { /* skip default device */ | ||||
|         char *str = WIN_LookupAudioDeviceName(desc, guid); | ||||
|         if (str != NULL) { | ||||
|             LPGUID cpyguid = (LPGUID) SDL_malloc(sizeof (GUID)); | ||||
|             SDL_memcpy(cpyguid, guid, sizeof (GUID)); | ||||
|             LPGUID cpyguid = (LPGUID)SDL_malloc(sizeof(GUID)); | ||||
|             SDL_memcpy(cpyguid, guid, sizeof(GUID)); | ||||
|  | ||||
|             /* Note that spec is NULL, because we are required to connect to the | ||||
|              * device before getting the channel mask and output format, making | ||||
|              * this information inaccessible at enumeration time | ||||
|              */ | ||||
|             SDL_AddAudioDevice(iscapture, str, NULL, cpyguid); | ||||
|             SDL_free(str);  /* addfn() makes a copy of this string. */ | ||||
|             SDL_free(str); /* addfn() makes a copy of this string. */ | ||||
|         } | ||||
|     } | ||||
|     return TRUE;  /* keep enumerating. */ | ||||
|     return TRUE; /* keep enumerating. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| DSOUND_DetectDevices(void) | ||||
| static void DSOUND_DetectDevices(void) | ||||
| { | ||||
| #if HAVE_MMDEVICEAPI_H | ||||
|     if (SupportsIMMDevice) { | ||||
| @@ -207,9 +201,7 @@ DSOUND_DetectDevices(void) | ||||
| #endif /* HAVE_MMDEVICEAPI_H*/ | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| DSOUND_WaitDevice(_THIS) | ||||
| static void DSOUND_WaitDevice(_THIS) | ||||
| { | ||||
|     DWORD status = 0; | ||||
|     DWORD cursor = 0; | ||||
| @@ -266,8 +258,7 @@ DSOUND_WaitDevice(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| DSOUND_PlayDevice(_THIS) | ||||
| static void DSOUND_PlayDevice(_THIS) | ||||
| { | ||||
|     /* Unlock the buffer, allowing it to play */ | ||||
|     if (this->hidden->locked_buf) { | ||||
| @@ -277,8 +268,7 @@ DSOUND_PlayDevice(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| DSOUND_GetDeviceBuf(_THIS) | ||||
| static Uint8 *DSOUND_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     DWORD cursor = 0; | ||||
|     DWORD junk = 0; | ||||
| @@ -319,14 +309,13 @@ DSOUND_GetDeviceBuf(_THIS) | ||||
|     /* Lock the audio buffer */ | ||||
|     result = IDirectSoundBuffer_Lock(this->hidden->mixbuf, cursor, | ||||
|                                      this->spec.size, | ||||
|                                      (LPVOID *) & this->hidden->locked_buf, | ||||
|                                      (LPVOID *)&this->hidden->locked_buf, | ||||
|                                      &rawlen, NULL, &junk, 0); | ||||
|     if (result == DSERR_BUFFERLOST) { | ||||
|         IDirectSoundBuffer_Restore(this->hidden->mixbuf); | ||||
|         result = IDirectSoundBuffer_Lock(this->hidden->mixbuf, cursor, | ||||
|                                          this->spec.size, | ||||
|                                          (LPVOID *) & this-> | ||||
|                                          hidden->locked_buf, &rawlen, NULL, | ||||
|                                          (LPVOID *)&this->hidden->locked_buf, &rawlen, NULL, | ||||
|                                          &junk, 0); | ||||
|     } | ||||
|     if (result != DS_OK) { | ||||
| @@ -336,8 +325,7 @@ DSOUND_GetDeviceBuf(_THIS) | ||||
|     return this->hidden->locked_buf; | ||||
| } | ||||
|  | ||||
| static int | ||||
| DSOUND_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int DSOUND_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = this->hidden; | ||||
|     DWORD junk, cursor, ptr1len, ptr2len; | ||||
| @@ -346,7 +334,7 @@ DSOUND_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     SDL_assert(buflen == this->spec.size); | ||||
|  | ||||
|     while (SDL_TRUE) { | ||||
|         if (SDL_AtomicGet(&this->shutdown)) {  /* in case the buffer froze... */ | ||||
|         if (SDL_AtomicGet(&this->shutdown)) { /* in case the buffer froze... */ | ||||
|             SDL_memset(buffer, this->spec.silence, buflen); | ||||
|             return buflen; | ||||
|         } | ||||
| @@ -355,7 +343,7 @@ DSOUND_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|             return -1; | ||||
|         } | ||||
|         if ((cursor / this->spec.size) == h->lastchunk) { | ||||
|             SDL_Delay(1);  /* FIXME: find out how much time is left and sleep that long */ | ||||
|             SDL_Delay(1); /* FIXME: find out how much time is left and sleep that long */ | ||||
|         } else { | ||||
|             break; | ||||
|         } | ||||
| @@ -380,8 +368,7 @@ DSOUND_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     return ptr1len; | ||||
| } | ||||
|  | ||||
| static void | ||||
| DSOUND_FlushCapture(_THIS) | ||||
| static void DSOUND_FlushCapture(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = this->hidden; | ||||
|     DWORD junk, cursor; | ||||
| @@ -390,8 +377,7 @@ DSOUND_FlushCapture(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| DSOUND_CloseDevice(_THIS) | ||||
| static void DSOUND_CloseDevice(_THIS) | ||||
| { | ||||
|     if (this->hidden->mixbuf != NULL) { | ||||
|         IDirectSoundBuffer_Stop(this->hidden->mixbuf); | ||||
| @@ -414,8 +400,7 @@ DSOUND_CloseDevice(_THIS) | ||||
|    number of audio chunks available in the created buffer. This is for | ||||
|    playback devices, not capture. | ||||
| */ | ||||
| static int | ||||
| CreateSecondary(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt) | ||||
| static int CreateSecondary(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt) | ||||
| { | ||||
|     LPDIRECTSOUND sndObj = this->hidden->sound; | ||||
|     LPDIRECTSOUNDBUFFER *sndbuf = &this->hidden->mixbuf; | ||||
| @@ -439,14 +424,14 @@ CreateSecondary(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt) | ||||
|  | ||||
|     /* Silence the initial audio buffer */ | ||||
|     result = IDirectSoundBuffer_Lock(*sndbuf, 0, format.dwBufferBytes, | ||||
|                                      (LPVOID *) & pvAudioPtr1, &dwAudioBytes1, | ||||
|                                      (LPVOID *) & pvAudioPtr2, &dwAudioBytes2, | ||||
|                                      (LPVOID *)&pvAudioPtr1, &dwAudioBytes1, | ||||
|                                      (LPVOID *)&pvAudioPtr2, &dwAudioBytes2, | ||||
|                                      DSBLOCK_ENTIREBUFFER); | ||||
|     if (result == DS_OK) { | ||||
|         SDL_memset(pvAudioPtr1, this->spec.silence, dwAudioBytes1); | ||||
|         IDirectSoundBuffer_Unlock(*sndbuf, | ||||
|                                   (LPVOID) pvAudioPtr1, dwAudioBytes1, | ||||
|                                   (LPVOID) pvAudioPtr2, dwAudioBytes2); | ||||
|                                   (LPVOID)pvAudioPtr1, dwAudioBytes1, | ||||
|                                   (LPVOID)pvAudioPtr2, dwAudioBytes2); | ||||
|     } | ||||
|  | ||||
|     /* We're ready to go */ | ||||
| @@ -457,8 +442,7 @@ CreateSecondary(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt) | ||||
|    number of audio chunks available in the created buffer. This is for | ||||
|    capture devices, not playback. | ||||
| */ | ||||
| static int | ||||
| CreateCaptureBuffer(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt) | ||||
| static int CreateCaptureBuffer(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt) | ||||
| { | ||||
|     LPDIRECTSOUNDCAPTURE capture = this->hidden->capture; | ||||
|     LPDIRECTSOUNDCAPTUREBUFFER *capturebuf = &this->hidden->capturebuf; | ||||
| @@ -466,7 +450,7 @@ CreateCaptureBuffer(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt) | ||||
|     HRESULT result; | ||||
|  | ||||
|     SDL_zero(format); | ||||
|     format.dwSize = sizeof (format); | ||||
|     format.dwSize = sizeof(format); | ||||
|     format.dwFlags = DSCBCAPS_WAVEMAPPED; | ||||
|     format.dwBufferBytes = bufsize; | ||||
|     format.lpwfxFormat = wfmt; | ||||
| @@ -497,15 +481,14 @@ CreateCaptureBuffer(_THIS, const DWORD bufsize, WAVEFORMATEX *wfmt) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| DSOUND_OpenDevice(_THIS, const char *devname) | ||||
| static int DSOUND_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     const DWORD numchunks = 8; | ||||
|     HRESULT result; | ||||
|     SDL_bool tried_format = SDL_FALSE; | ||||
|     SDL_bool iscapture = this->iscapture; | ||||
|     SDL_AudioFormat test_format; | ||||
|     LPGUID guid = (LPGUID) this->handle; | ||||
|     LPGUID guid = (LPGUID)this->handle; | ||||
|     DWORD bufsize; | ||||
|  | ||||
|     /* Initialize all variables that we clean on shutdown */ | ||||
| @@ -551,8 +534,8 @@ DSOUND_OpenDevice(_THIS, const char *devname) | ||||
|             bufsize = numchunks * this->spec.size; | ||||
|             if ((bufsize < DSBSIZE_MIN) || (bufsize > DSBSIZE_MAX)) { | ||||
|                 SDL_SetError("Sound buffer size must be between %d and %d", | ||||
|                              (int) ((DSBSIZE_MIN < numchunks) ? 1 : DSBSIZE_MIN / numchunks), | ||||
|                              (int) (DSBSIZE_MAX / numchunks)); | ||||
|                              (int)((DSBSIZE_MIN < numchunks) ? 1 : DSBSIZE_MIN / numchunks), | ||||
|                              (int)(DSBSIZE_MAX / numchunks)); | ||||
|             } else { | ||||
|                 int rc; | ||||
|                 WAVEFORMATEXTENSIBLE wfmt; | ||||
| @@ -568,8 +551,7 @@ DSOUND_OpenDevice(_THIS, const char *devname) | ||||
|                     } | ||||
|                     wfmt.Samples.wValidBitsPerSample = SDL_AUDIO_BITSIZE(this->spec.format); | ||||
|  | ||||
|                     switch (this->spec.channels) | ||||
|                     { | ||||
|                     switch (this->spec.channels) { | ||||
|                     case 3: /* 3.0 (or 2.1) */ | ||||
|                         wfmt.dwChannelMask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER; | ||||
|                         break; | ||||
| @@ -604,7 +586,7 @@ DSOUND_OpenDevice(_THIS, const char *devname) | ||||
|                 wfmt.Format.nBlockAlign = wfmt.Format.nChannels * (wfmt.Format.wBitsPerSample / 8); | ||||
|                 wfmt.Format.nAvgBytesPerSec = wfmt.Format.nSamplesPerSec * wfmt.Format.nBlockAlign; | ||||
|  | ||||
|                 rc = iscapture ? CreateCaptureBuffer(this, bufsize, (WAVEFORMATEX*) &wfmt) : CreateSecondary(this, bufsize, (WAVEFORMATEX*) &wfmt); | ||||
|                 rc = iscapture ? CreateCaptureBuffer(this, bufsize, (WAVEFORMATEX *)&wfmt) : CreateSecondary(this, bufsize, (WAVEFORMATEX *)&wfmt); | ||||
|                 if (rc == 0) { | ||||
|                     this->hidden->num_buffers = numchunks; | ||||
|                     break; | ||||
| @@ -619,19 +601,17 @@ DSOUND_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     if (!test_format) { | ||||
|         if (tried_format) { | ||||
|             return -1;  /* CreateSecondary() should have called SDL_SetError(). */ | ||||
|             return -1; /* CreateSecondary() should have called SDL_SetError(). */ | ||||
|         } | ||||
|         return SDL_SetError("%s: Unsupported audio format", "directsound"); | ||||
|     } | ||||
|  | ||||
|     /* Playback buffers will auto-start playing in DSOUND_WaitDevice() */ | ||||
|  | ||||
|     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 (SupportsIMMDevice) { | ||||
| @@ -642,9 +622,7 @@ DSOUND_Deinitialize(void) | ||||
|     DSOUND_Unload(); | ||||
| } | ||||
|  | ||||
|  | ||||
| static SDL_bool | ||||
| DSOUND_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool DSOUND_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     if (!DSOUND_Load()) { | ||||
|         return SDL_FALSE; | ||||
| @@ -670,7 +648,7 @@ DSOUND_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|     impl->SupportsNonPow2Samples = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap DSOUND_bootstrap = { | ||||
|   | ||||
| @@ -28,7 +28,7 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| /* The DirectSound objects */ | ||||
| struct SDL_PrivateAudioData | ||||
|   | ||||
| @@ -36,21 +36,19 @@ | ||||
|  | ||||
| /* !!! FIXME: these should be SDL hints, not environment variables. */ | ||||
| /* environment variables and defaults. */ | ||||
| #define DISKENVR_OUTFILE         "SDL_DISKAUDIOFILE" | ||||
| #define DISKDEFAULT_OUTFILE      "sdlaudio.raw" | ||||
| #define DISKENVR_INFILE         "SDL_DISKAUDIOFILEIN" | ||||
| #define DISKDEFAULT_INFILE      "sdlaudio-in.raw" | ||||
| #define DISKENVR_IODELAY      "SDL_DISKAUDIODELAY" | ||||
| #define DISKENVR_OUTFILE    "SDL_DISKAUDIOFILE" | ||||
| #define DISKDEFAULT_OUTFILE "sdlaudio.raw" | ||||
| #define DISKENVR_INFILE     "SDL_DISKAUDIOFILEIN" | ||||
| #define DISKDEFAULT_INFILE  "sdlaudio-in.raw" | ||||
| #define DISKENVR_IODELAY    "SDL_DISKAUDIODELAY" | ||||
|  | ||||
| /* This function waits until it is possible to write a full sound buffer */ | ||||
| static void | ||||
| DISKAUDIO_WaitDevice(_THIS) | ||||
| static void DISKAUDIO_WaitDevice(_THIS) | ||||
| { | ||||
|     SDL_Delay(_this->hidden->io_delay); | ||||
| } | ||||
|  | ||||
| static void | ||||
| DISKAUDIO_PlayDevice(_THIS) | ||||
| static void DISKAUDIO_PlayDevice(_THIS) | ||||
| { | ||||
|     const size_t written = SDL_RWwrite(_this->hidden->io, | ||||
|                                        _this->hidden->mixbuf, | ||||
| @@ -65,14 +63,12 @@ DISKAUDIO_PlayDevice(_THIS) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| DISKAUDIO_GetDeviceBuf(_THIS) | ||||
| static Uint8 *DISKAUDIO_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     return _this->hidden->mixbuf; | ||||
| } | ||||
|  | ||||
| static int | ||||
| DISKAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int DISKAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = _this->hidden; | ||||
|     const int origbuflen = buflen; | ||||
| @@ -81,9 +77,9 @@ DISKAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|  | ||||
|     if (h->io) { | ||||
|         const size_t br = SDL_RWread(h->io, buffer, 1, buflen); | ||||
|         buflen -= (int) br; | ||||
|         buffer = ((Uint8 *) buffer) + br; | ||||
|         if (buflen > 0) {  /* EOF (or error, but whatever). */ | ||||
|         buflen -= (int)br; | ||||
|         buffer = ((Uint8 *)buffer) + br; | ||||
|         if (buflen > 0) { /* EOF (or error, but whatever). */ | ||||
|             SDL_RWclose(h->io); | ||||
|             h->io = NULL; | ||||
|         } | ||||
| @@ -95,15 +91,12 @@ DISKAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     return origbuflen; | ||||
| } | ||||
|  | ||||
| static void | ||||
| DISKAUDIO_FlushCapture(_THIS) | ||||
| static void DISKAUDIO_FlushCapture(_THIS) | ||||
| { | ||||
|     /* 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) { | ||||
|         SDL_RWclose(_this->hidden->io); | ||||
| @@ -112,9 +105,7 @@ DISKAUDIO_CloseDevice(_THIS) | ||||
|     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) { | ||||
|         devname = SDL_getenv(iscapture ? DISKENVR_INFILE : DISKENVR_OUTFILE); | ||||
| @@ -125,8 +116,7 @@ get_filename(const SDL_bool iscapture, const char *devname) | ||||
|     return devname; | ||||
| } | ||||
|  | ||||
| static int | ||||
| DISKAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int DISKAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     void *handle = _this->handle; | ||||
|     /* handle != NULL means "user specified the placeholder name on the fake detected device list" */ | ||||
| @@ -155,7 +145,7 @@ DISKAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     /* Allocate mixing buffer */ | ||||
|     if (!iscapture) { | ||||
|         _this->hidden->mixbuf = (Uint8 *) SDL_malloc(_this->spec.size); | ||||
|         _this->hidden->mixbuf = (Uint8 *)SDL_malloc(_this->spec.size); | ||||
|         if (_this->hidden->mixbuf == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
| @@ -163,24 +153,22 @@ DISKAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     } | ||||
|  | ||||
|     SDL_LogCritical(SDL_LOG_CATEGORY_AUDIO, | ||||
|                 "You are using the SDL disk i/o audio driver!\n"); | ||||
|                     "You are using the SDL disk i/o audio driver!\n"); | ||||
|     SDL_LogCritical(SDL_LOG_CATEGORY_AUDIO, | ||||
|                 " %s file [%s].\n", iscapture ? "Reading from" : "Writing to", | ||||
|                 fname); | ||||
|                     " %s file [%s].\n", iscapture ? "Reading from" : "Writing to", | ||||
|                     fname); | ||||
|  | ||||
|     /* We're ready to rock and roll. :-) */ | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| DISKAUDIO_DetectDevices(void) | ||||
| static void DISKAUDIO_DetectDevices(void) | ||||
| { | ||||
|     SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *) 0x1); | ||||
|     SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *) 0x2); | ||||
|     SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *)0x1); | ||||
|     SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *)0x2); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| DISKAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool DISKAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     /* Set the function pointers */ | ||||
|     impl->OpenDevice = DISKAUDIO_OpenDevice; | ||||
| @@ -197,7 +185,7 @@ DISKAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|     impl->SupportsNonPow2Samples = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap DISKAUDIO_bootstrap = { | ||||
|   | ||||
| @@ -27,7 +27,7 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *_this | ||||
| #define _THIS SDL_AudioDevice *_this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|   | ||||
| @@ -24,8 +24,8 @@ | ||||
|  | ||||
| /* Allow access to a raw mixing buffer */ | ||||
|  | ||||
| #include <stdio.h>              /* For perror() */ | ||||
| #include <string.h>             /* For strerror() */ | ||||
| #include <stdio.h>  /* For perror() */ | ||||
| #include <string.h> /* For strerror() */ | ||||
| #include <errno.h> | ||||
| #include <unistd.h> | ||||
| #include <fcntl.h> | ||||
| @@ -42,16 +42,12 @@ | ||||
| #include "../SDL_audiodev_c.h" | ||||
| #include "SDL_dspaudio.h" | ||||
|  | ||||
|  | ||||
| static void | ||||
| DSP_DetectDevices(void) | ||||
| static void DSP_DetectDevices(void) | ||||
| { | ||||
|     SDL_EnumUnixAudioDevices(0, NULL); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| DSP_CloseDevice(_THIS) | ||||
| static void DSP_CloseDevice(_THIS) | ||||
| { | ||||
|     if (this->hidden->audio_fd >= 0) { | ||||
|         close(this->hidden->audio_fd); | ||||
| @@ -60,9 +56,7 @@ DSP_CloseDevice(_THIS) | ||||
|     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; | ||||
|     const int flags = ((iscapture) ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT); | ||||
| @@ -205,11 +199,12 @@ DSP_OpenDevice(_THIS, const char *devname) | ||||
|     SDL_CalculateAudioSpec(&this->spec); | ||||
|  | ||||
|     /* 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) { | ||||
|         return SDL_SetError("Fragment size must be a power of two"); | ||||
|     } | ||||
|     frag_spec |= 0x00020000;    /* two fragments, for low latency */ | ||||
|     frag_spec |= 0x00020000; /* two fragments, for low latency */ | ||||
|  | ||||
|     /* Set the audio buffering parameters */ | ||||
| #ifdef DEBUG_AUDIO | ||||
| @@ -233,7 +228,7 @@ DSP_OpenDevice(_THIS, const char *devname) | ||||
|     /* Allocate mixing buffer */ | ||||
|     if (!iscapture) { | ||||
|         this->hidden->mixlen = this->spec.size; | ||||
|         this->hidden->mixbuf = (Uint8 *) SDL_malloc(this->hidden->mixlen); | ||||
|         this->hidden->mixbuf = (Uint8 *)SDL_malloc(this->hidden->mixlen); | ||||
|         if (this->hidden->mixbuf == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
| @@ -244,9 +239,7 @@ DSP_OpenDevice(_THIS, const char *devname) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| DSP_PlayDevice(_THIS) | ||||
| static void DSP_PlayDevice(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = this->hidden; | ||||
|     if (write(h->audio_fd, h->mixbuf, h->mixlen) == -1) { | ||||
| @@ -258,27 +251,24 @@ DSP_PlayDevice(_THIS) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| DSP_GetDeviceBuf(_THIS) | ||||
| static Uint8 *DSP_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     return this->hidden->mixbuf; | ||||
| } | ||||
|  | ||||
| static int | ||||
| DSP_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int DSP_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     return (int)read(this->hidden->audio_fd, buffer, buflen); | ||||
| } | ||||
|  | ||||
| static void | ||||
| DSP_FlushCapture(_THIS) | ||||
| static void DSP_FlushCapture(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = this->hidden; | ||||
|     audio_buf_info info; | ||||
|     if (ioctl(h->audio_fd, SNDCTL_DSP_GETISPACE, &info) == 0) { | ||||
|         while (info.bytes > 0) { | ||||
|             char buf[512]; | ||||
|             const size_t len = SDL_min(sizeof (buf), info.bytes); | ||||
|             const size_t len = SDL_min(sizeof(buf), info.bytes); | ||||
|             const ssize_t br = read(h->audio_fd, buf, len); | ||||
|             if (br <= 0) { | ||||
|                 break; | ||||
| @@ -289,22 +279,20 @@ DSP_FlushCapture(_THIS) | ||||
| } | ||||
|  | ||||
| static SDL_bool InitTimeDevicesExist = SDL_FALSE; | ||||
| static int | ||||
| look_for_devices_test(int fd) | ||||
| static int 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. */ | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| DSP_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool DSP_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     InitTimeDevicesExist = SDL_FALSE; | ||||
|     SDL_EnumUnixAudioDevices(0, look_for_devices_test); | ||||
|     if (!InitTimeDevicesExist) { | ||||
|         SDL_SetError("dsp: No such audio device"); | ||||
|         return SDL_FALSE;  /* maybe try a different backend. */ | ||||
|         return SDL_FALSE; /* maybe try a different backend. */ | ||||
|     } | ||||
|  | ||||
|     /* Set the function pointers */ | ||||
| @@ -319,10 +307,9 @@ DSP_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->AllowsArbitraryDeviceNames = SDL_TRUE; | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
|  | ||||
| AudioBootStrap DSP_bootstrap = { | ||||
|     "dsp", "OSS /dev/dsp standard audio", DSP_Init, SDL_FALSE | ||||
| }; | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
| @@ -37,7 +37,7 @@ struct SDL_PrivateAudioData | ||||
|     Uint8 *mixbuf; | ||||
|     int mixlen; | ||||
| }; | ||||
| #define FUDGE_TICKS 10      /* The scheduler overhead ticks per frame */ | ||||
| #define FUDGE_TICKS 10 /* The scheduler overhead ticks per frame */ | ||||
|  | ||||
| #endif /* SDL_dspaudio_h_ */ | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|   | ||||
| @@ -27,15 +27,14 @@ | ||||
| #include "../SDL_audio_c.h" | ||||
| #include "SDL_dummyaudio.h" | ||||
|  | ||||
| static int | ||||
| DUMMYAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int DUMMYAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     _this->hidden = (void *) 0x1;  /* just something non-NULL */ | ||||
|     return 0;                   /* always succeeds. */ | ||||
|     _this->hidden = (void *)0x1; /* just something non-NULL */ | ||||
|  | ||||
|     return 0; /* always succeeds. */ | ||||
| } | ||||
|  | ||||
| static int | ||||
| DUMMYAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int DUMMYAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     /* Delay to make this sort of simulate real audio input. */ | ||||
|     SDL_Delay((_this->spec.samples * 1000) / _this->spec.freq); | ||||
| @@ -45,8 +44,7 @@ DUMMYAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     return buflen; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| DUMMYAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool DUMMYAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     /* Set the function pointers */ | ||||
|     impl->OpenDevice = DUMMYAUDIO_OpenDevice; | ||||
| @@ -56,7 +54,7 @@ DUMMYAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->OnlyHasDefaultCaptureDevice = SDL_TRUE; | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap DUMMYAUDIO_bootstrap = { | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *_this | ||||
| #define _THIS SDL_AudioDevice *_this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|   | ||||
| @@ -33,10 +33,10 @@ | ||||
|    !!! FIXME:  true always once pthread support becomes widespread. Revisit this code | ||||
|    !!! FIXME:  at some point and see what needs to be done for that! */ | ||||
|  | ||||
| static void | ||||
| FeedAudioDevice(_THIS, const void *buf, const int buflen) | ||||
| static void FeedAudioDevice(_THIS, const void *buf, const int buflen) | ||||
| { | ||||
|     const int framelen = (SDL_AUDIO_BITSIZE(this->spec.format) / 8) * this->spec.channels; | ||||
|     /* *INDENT-OFF* */ /* clang-format off */ | ||||
|     MAIN_THREAD_EM_ASM({ | ||||
|         var SDL2 = Module['SDL2']; | ||||
|         var numChannels = SDL2.audio.currentOutputBuffer['numberOfChannels']; | ||||
| @@ -51,10 +51,10 @@ FeedAudioDevice(_THIS, const void *buf, const int buflen) | ||||
|             } | ||||
|         } | ||||
|     }, buf, buflen / framelen); | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| HandleAudioProcess(_THIS) | ||||
| static void HandleAudioProcess(_THIS) | ||||
| { | ||||
|     SDL_AudioCallback callback = this->callbackspec.callback; | ||||
|     const int stream_len = this->callbackspec.size; | ||||
| @@ -70,12 +70,12 @@ HandleAudioProcess(_THIS) | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     if (this->stream == NULL) {  /* no conversion necessary. */ | ||||
|     if (this->stream == NULL) { /* no conversion necessary. */ | ||||
|         SDL_assert(this->spec.size == stream_len); | ||||
|         callback(this->callbackspec.userdata, this->work_buffer, stream_len); | ||||
|     } else {  /* streaming/converting */ | ||||
|     } else { /* streaming/converting */ | ||||
|         int got; | ||||
|         while (SDL_AudioStreamAvailable(this->stream) < ((int) this->spec.size)) { | ||||
|         while (SDL_AudioStreamAvailable(this->stream) < ((int)this->spec.size)) { | ||||
|             callback(this->callbackspec.userdata, this->work_buffer, stream_len); | ||||
|             if (SDL_AudioStreamPut(this->stream, this->work_buffer, stream_len) == -1) { | ||||
|                 SDL_AudioStreamClear(this->stream); | ||||
| @@ -94,8 +94,7 @@ HandleAudioProcess(_THIS) | ||||
|     FeedAudioDevice(this, this->work_buffer, this->spec.size); | ||||
| } | ||||
|  | ||||
| static void | ||||
| HandleCaptureProcess(_THIS) | ||||
| static void HandleCaptureProcess(_THIS) | ||||
| { | ||||
|     SDL_AudioCallback callback = this->callbackspec.callback; | ||||
|     const int stream_len = this->callbackspec.size; | ||||
| @@ -106,6 +105,7 @@ HandleCaptureProcess(_THIS) | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     /* *INDENT-OFF* */ /* clang-format off */ | ||||
|     MAIN_THREAD_EM_ASM({ | ||||
|         var SDL2 = Module['SDL2']; | ||||
|         var numChannels = SDL2.capture.currentCaptureBuffer.numberOfChannels; | ||||
| @@ -126,13 +126,14 @@ HandleCaptureProcess(_THIS) | ||||
|             } | ||||
|         } | ||||
|     }, 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. */ | ||||
|  | ||||
|     if (this->stream == NULL) {  /* no conversion necessary. */ | ||||
|     if (this->stream == NULL) { /* no conversion necessary. */ | ||||
|         SDL_assert(this->spec.size == stream_len); | ||||
|         callback(this->callbackspec.userdata, this->work_buffer, stream_len); | ||||
|     } else {  /* streaming/converting */ | ||||
|     } else { /* streaming/converting */ | ||||
|         if (SDL_AudioStreamPut(this->stream, this->work_buffer, this->spec.size) == -1) { | ||||
|             SDL_AtomicSet(&this->enabled, 0); | ||||
|         } | ||||
| @@ -143,15 +144,14 @@ HandleCaptureProcess(_THIS) | ||||
|             if (got != stream_len) { | ||||
|                 SDL_memset(this->work_buffer, this->callbackspec.silence, stream_len); | ||||
|             } | ||||
|             callback(this->callbackspec.userdata, this->work_buffer, stream_len);  /* Send it to the app. */ | ||||
|             callback(this->callbackspec.userdata, this->work_buffer, stream_len); /* Send it to the app. */ | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| EMSCRIPTENAUDIO_CloseDevice(_THIS) | ||||
| static void EMSCRIPTENAUDIO_CloseDevice(_THIS) | ||||
| { | ||||
|     /* *INDENT-OFF* */ /* clang-format off */ | ||||
|     MAIN_THREAD_EM_ASM({ | ||||
|         var SDL2 = Module['SDL2']; | ||||
|         if ($0) { | ||||
| @@ -190,14 +190,14 @@ EMSCRIPTENAUDIO_CloseDevice(_THIS) | ||||
|             SDL2.audioContext = undefined; | ||||
|         } | ||||
|     }, this->iscapture); | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
| #if 0  /* !!! FIXME: currently not used. Can we move some stuff off the SDL2 namespace? --ryan. */ | ||||
|     SDL_free(this->hidden); | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static int | ||||
| EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     SDL_AudioFormat test_format; | ||||
|     SDL_bool iscapture = this->iscapture; | ||||
| @@ -205,6 +205,7 @@ EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     /* based on parts of library_sdl.js */ | ||||
|  | ||||
|     /* *INDENT-OFF* */ /* clang-format off */ | ||||
|     /* create context */ | ||||
|     result = MAIN_THREAD_EM_ASM_INT({ | ||||
|         if(typeof(Module['SDL2']) === 'undefined') { | ||||
| @@ -229,6 +230,8 @@ EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|         } | ||||
|         return SDL2.audioContext === undefined ? -1 : 0; | ||||
|     }, iscapture); | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
|     if (result < 0) { | ||||
|         return SDL_SetError("Web Audio API is not available!"); | ||||
|     } | ||||
| @@ -268,6 +271,7 @@ EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     SDL_CalculateAudioSpec(&this->spec); | ||||
|  | ||||
|     /* *INDENT-OFF* */ /* clang-format off */ | ||||
|     if (iscapture) { | ||||
|         /* The idea is to take the capture media stream, hook it up to an | ||||
|            audio graph where we can pass it through a ScriptProcessorNode | ||||
| @@ -339,17 +343,16 @@ EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|             SDL2.audio.scriptProcessorNode['connect'](SDL2.audioContext['destination']); | ||||
|         }, this->spec.channels, this->spec.samples, HandleAudioProcess, this); | ||||
|     } | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| EMSCRIPTENAUDIO_LockOrUnlockDeviceWithNoMixerLock(SDL_AudioDevice * device) | ||||
| static void EMSCRIPTENAUDIO_LockOrUnlockDeviceWithNoMixerLock(SDL_AudioDevice *device) | ||||
| { | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     SDL_bool available, capture_available; | ||||
|  | ||||
| @@ -363,6 +366,7 @@ EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->LockDevice = impl->UnlockDevice = EMSCRIPTENAUDIO_LockOrUnlockDeviceWithNoMixerLock; | ||||
|     impl->ProvidesOwnCallbackThread = SDL_TRUE; | ||||
|  | ||||
|     /* *INDENT-OFF* */ /* clang-format off */ | ||||
|     /* check availability */ | ||||
|     available = MAIN_THREAD_EM_ASM_INT({ | ||||
|         if (typeof(AudioContext) !== 'undefined') { | ||||
| @@ -372,11 +376,13 @@ EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|         } | ||||
|         return false; | ||||
|     }); | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
|     if (!available) { | ||||
|         SDL_SetError("No audio context available"); | ||||
|     } | ||||
|  | ||||
|     /* *INDENT-OFF* */ /* clang-format off */ | ||||
|     capture_available = available && MAIN_THREAD_EM_ASM_INT({ | ||||
|         if ((typeof(navigator.mediaDevices) !== 'undefined') && (typeof(navigator.mediaDevices.getUserMedia) !== 'undefined')) { | ||||
|             return true; | ||||
| @@ -385,6 +391,7 @@ EMSCRIPTENAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|         } | ||||
|         return false; | ||||
|     }); | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
|     impl->HasCaptureSupport = capture_available ? SDL_TRUE : SDL_FALSE; | ||||
|     impl->OnlyHasDefaultCaptureDevice = capture_available ? SDL_TRUE : SDL_FALSE; | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|   | ||||
| @@ -42,8 +42,7 @@ extern "C" | ||||
|  | ||||
| /* !!! FIXME: have the callback call the higher level to avoid code dupe. */ | ||||
| /* The Haiku callback for handling the audio buffer */ | ||||
| static void | ||||
| FillSound(void *device, void *stream, size_t len, | ||||
| static void FillSound(void *device, void *stream, size_t len, | ||||
|           const media_raw_audio_format & format) | ||||
| { | ||||
|     SDL_AudioDevice *audio = (SDL_AudioDevice *) device; | ||||
| @@ -85,8 +84,7 @@ FillSound(void *device, void *stream, size_t len, | ||||
|     SDL_UnlockMutex(audio->mixer_lock); | ||||
| } | ||||
|  | ||||
| static void | ||||
| HAIKUAUDIO_CloseDevice(_THIS) | ||||
| static void HAIKUAUDIO_CloseDevice(_THIS) | ||||
| { | ||||
|     if (_this->hidden->audio_obj) { | ||||
|         _this->hidden->audio_obj->Stop(); | ||||
| @@ -100,8 +98,7 @@ static const int sig_list[] = { | ||||
|     SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGWINCH, 0 | ||||
| }; | ||||
|  | ||||
| static inline void | ||||
| MaskSignals(sigset_t * omask) | ||||
| static inline void MaskSignals(sigset_t * omask) | ||||
| { | ||||
|     sigset_t mask; | ||||
|     int i; | ||||
| @@ -113,15 +110,13 @@ MaskSignals(sigset_t * omask) | ||||
|     sigprocmask(SIG_BLOCK, &mask, omask); | ||||
| } | ||||
|  | ||||
| static inline void | ||||
| UnmaskSignals(sigset_t * omask) | ||||
| static inline void UnmaskSignals(sigset_t * omask) | ||||
| { | ||||
|     sigprocmask(SIG_SETMASK, omask, NULL); | ||||
| } | ||||
|  | ||||
|  | ||||
| static int | ||||
| HAIKUAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int HAIKUAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     media_raw_audio_format format; | ||||
|     SDL_AudioFormat test_format; | ||||
| @@ -208,14 +203,12 @@ HAIKUAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| HAIKUAUDIO_Deinitialize(void) | ||||
| static void HAIKUAUDIO_Deinitialize(void) | ||||
| { | ||||
|     SDL_QuitBeApp(); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| HAIKUAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool HAIKUAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| { | ||||
|     /* Initialize the Be Application, if it's not already started */ | ||||
|     if (SDL_InitBeApp() < 0) { | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *_this | ||||
| #define _THIS SDL_AudioDevice *_this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|   | ||||
| @@ -29,36 +29,33 @@ | ||||
| #include "SDL_loadso.h" | ||||
| #include "../../thread/SDL_systhread.h" | ||||
|  | ||||
|  | ||||
| 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 void (*JACK_jack_on_shutdown) (jack_client_t *, JackShutdownCallback, void *); | ||||
| static int (*JACK_jack_activate) (jack_client_t *); | ||||
| static int (*JACK_jack_deactivate) (jack_client_t *); | ||||
| static void * (*JACK_jack_port_get_buffer) (jack_port_t *, jack_nframes_t); | ||||
| static int (*JACK_jack_port_unregister) (jack_client_t *, jack_port_t *); | ||||
| static void (*JACK_jack_free) (void *); | ||||
| static const char ** (*JACK_jack_get_ports) (jack_client_t *, const char *, const char *, unsigned long); | ||||
| static jack_nframes_t (*JACK_jack_get_sample_rate) (jack_client_t *); | ||||
| static jack_nframes_t (*JACK_jack_get_buffer_size) (jack_client_t *); | ||||
| static jack_port_t * (*JACK_jack_port_register) (jack_client_t *, const char *, const char *, unsigned long, unsigned long); | ||||
| static jack_port_t * (*JACK_jack_port_by_name) (jack_client_t *, const char *); | ||||
| static const char * (*JACK_jack_port_name) (const jack_port_t *); | ||||
| static const char * (*JACK_jack_port_type) (const jack_port_t *); | ||||
| static int (*JACK_jack_connect) (jack_client_t *, const char *, const char *); | ||||
| static int (*JACK_jack_set_process_callback) (jack_client_t *, JackProcessCallback, void *); | ||||
| 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 void (*JACK_jack_on_shutdown)(jack_client_t *, JackShutdownCallback, void *); | ||||
| static int (*JACK_jack_activate)(jack_client_t *); | ||||
| static int (*JACK_jack_deactivate)(jack_client_t *); | ||||
| static void *(*JACK_jack_port_get_buffer)(jack_port_t *, jack_nframes_t); | ||||
| static int (*JACK_jack_port_unregister)(jack_client_t *, jack_port_t *); | ||||
| static void (*JACK_jack_free)(void *); | ||||
| static const char **(*JACK_jack_get_ports)(jack_client_t *, const char *, const char *, unsigned long); | ||||
| static jack_nframes_t (*JACK_jack_get_sample_rate)(jack_client_t *); | ||||
| static jack_nframes_t (*JACK_jack_get_buffer_size)(jack_client_t *); | ||||
| static jack_port_t *(*JACK_jack_port_register)(jack_client_t *, const char *, const char *, unsigned long, unsigned long); | ||||
| static jack_port_t *(*JACK_jack_port_by_name)(jack_client_t *, const char *); | ||||
| static const char *(*JACK_jack_port_name)(const jack_port_t *); | ||||
| static const char *(*JACK_jack_port_type)(const jack_port_t *); | ||||
| static int (*JACK_jack_connect)(jack_client_t *, const char *, const char *); | ||||
| static int (*JACK_jack_set_process_callback)(jack_client_t *, JackProcessCallback, void *); | ||||
|  | ||||
| static int load_jack_syms(void); | ||||
|  | ||||
|  | ||||
| #ifdef SDL_AUDIO_DRIVER_JACK_DYNAMIC | ||||
|  | ||||
| static const char *jack_library = SDL_AUDIO_DRIVER_JACK_DYNAMIC; | ||||
| static void *jack_handle = NULL; | ||||
|  | ||||
| /* !!! FIXME: this is copy/pasted in several places now */ | ||||
| static int | ||||
| load_jack_sym(const char *fn, void **addr) | ||||
| static int load_jack_sym(const char *fn, void **addr) | ||||
| { | ||||
|     *addr = SDL_LoadFunction(jack_handle, fn); | ||||
|     if (*addr == NULL) { | ||||
| @@ -70,11 +67,11 @@ load_jack_sym(const char *fn, void **addr) | ||||
| } | ||||
|  | ||||
| /* cast funcs to char* first, to please GCC's strict aliasing rules. */ | ||||
| #define SDL_JACK_SYM(x) \ | ||||
|     if (!load_jack_sym(#x, (void **) (char *) &JACK_##x)) return -1 | ||||
| #define SDL_JACK_SYM(x)                                 \ | ||||
|     if (!load_jack_sym(#x, (void **)(char *)&JACK_##x)) \ | ||||
|     return -1 | ||||
|  | ||||
| static void | ||||
| UnloadJackLibrary(void) | ||||
| static void UnloadJackLibrary(void) | ||||
| { | ||||
|     if (jack_handle != NULL) { | ||||
|         SDL_UnloadObject(jack_handle); | ||||
| @@ -82,8 +79,7 @@ UnloadJackLibrary(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| LoadJackLibrary(void) | ||||
| static int LoadJackLibrary(void) | ||||
| { | ||||
|     int retval = 0; | ||||
|     if (jack_handle == NULL) { | ||||
| @@ -105,13 +101,11 @@ LoadJackLibrary(void) | ||||
|  | ||||
| #define SDL_JACK_SYM(x) JACK_##x = x | ||||
|  | ||||
| static void | ||||
| UnloadJackLibrary(void) | ||||
| static void UnloadJackLibrary(void) | ||||
| { | ||||
| } | ||||
|  | ||||
| static int | ||||
| LoadJackLibrary(void) | ||||
| static int LoadJackLibrary(void) | ||||
| { | ||||
|     load_jack_syms(); | ||||
|     return 0; | ||||
| @@ -119,9 +113,7 @@ LoadJackLibrary(void) | ||||
|  | ||||
| #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_close); | ||||
| @@ -143,23 +135,20 @@ load_jack_syms(void) | ||||
|     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_SemPost(this->hidden->iosem);  /* unblock the SDL thread. */ | ||||
|     SDL_SemPost(this->hidden->iosem); /* unblock the SDL thread. */ | ||||
| } | ||||
|  | ||||
| // !!! FIXME: implement and register these! | ||||
| //typedef int(* JackSampleRateCallback)(jack_nframes_t nframes, void *arg) | ||||
| //typedef int(* JackBufferSizeCallback)(jack_nframes_t nframes, void *arg) | ||||
| // typedef int(* JackSampleRateCallback)(jack_nframes_t nframes, void *arg) | ||||
| // typedef int(* JackBufferSizeCallback)(jack_nframes_t nframes, void *arg) | ||||
|  | ||||
| static int | ||||
| jackProcessPlaybackCallback(jack_nframes_t nframes, void *arg) | ||||
| static int 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; | ||||
|     const int total_channels = this->spec.channels; | ||||
|     const int total_frames = this->spec.samples; | ||||
| @@ -171,9 +160,9 @@ jackProcessPlaybackCallback(jack_nframes_t nframes, void *arg) | ||||
|     } | ||||
|  | ||||
|     for (channelsi = 0; channelsi < total_channels; channelsi++) { | ||||
|         float *dst = (float *) JACK_jack_port_get_buffer(ports[channelsi], nframes); | ||||
|         float *dst = (float *)JACK_jack_port_get_buffer(ports[channelsi], nframes); | ||||
|         if (dst) { | ||||
|             const float *src = ((float *) this->hidden->iobuffer) + channelsi; | ||||
|             const float *src = ((float *)this->hidden->iobuffer) + channelsi; | ||||
|             int framesi; | ||||
|             for (framesi = 0; framesi < total_frames; framesi++) { | ||||
|                 *(dst++) = *src; | ||||
| @@ -182,14 +171,12 @@ jackProcessPlaybackCallback(jack_nframes_t nframes, void *arg) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     SDL_SemPost(this->hidden->iosem);  /* tell SDL thread we're done; refill the buffer. */ | ||||
|     return 0;  /* success */ | ||||
|     SDL_SemPost(this->hidden->iosem); /* tell SDL thread we're done; refill the buffer. */ | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* This function waits until it is possible to write a full sound buffer */ | ||||
| static void | ||||
| JACK_WaitDevice(_THIS) | ||||
| static void JACK_WaitDevice(_THIS) | ||||
| { | ||||
|     if (SDL_AtomicGet(&this->enabled)) { | ||||
|         if (SDL_SemWait(this->hidden->iosem) == -1) { | ||||
| @@ -198,17 +185,14 @@ JACK_WaitDevice(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| JACK_GetDeviceBuf(_THIS) | ||||
| static Uint8 *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)) { | ||||
|         jack_port_t **ports = this->hidden->sdlports; | ||||
|         const int total_channels = this->spec.channels; | ||||
| @@ -216,9 +200,9 @@ jackProcessCaptureCallback(jack_nframes_t nframes, void *arg) | ||||
|         int channelsi; | ||||
|  | ||||
|         for (channelsi = 0; channelsi < total_channels; channelsi++) { | ||||
|             const float *src = (const float *) JACK_jack_port_get_buffer(ports[channelsi], nframes); | ||||
|             const float *src = (const float *)JACK_jack_port_get_buffer(ports[channelsi], nframes); | ||||
|             if (src) { | ||||
|                 float *dst = ((float *) this->hidden->iobuffer) + channelsi; | ||||
|                 float *dst = ((float *)this->hidden->iobuffer) + channelsi; | ||||
|                 int framesi; | ||||
|                 for (framesi = 0; framesi < total_frames; framesi++) { | ||||
|                     *dst = *(src++); | ||||
| @@ -228,14 +212,13 @@ jackProcessCaptureCallback(jack_nframes_t nframes, void *arg) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     SDL_SemPost(this->hidden->iosem);  /* tell SDL thread we're done; new buffer is ready! */ | ||||
|     return 0;  /* success */ | ||||
|     SDL_SemPost(this->hidden->iosem); /* tell SDL thread we're done; new buffer is ready! */ | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| JACK_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int 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. */ | ||||
|  | ||||
|     /* Wait for JACK to fill the iobuffer */ | ||||
|     if (SDL_SemWait(this->hidden->iosem) == -1) { | ||||
| @@ -246,15 +229,12 @@ JACK_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     return buflen; | ||||
| } | ||||
|  | ||||
| static void | ||||
| JACK_FlushCapture(_THIS) | ||||
| static void JACK_FlushCapture(_THIS) | ||||
| { | ||||
|     SDL_SemWait(this->hidden->iosem); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| JACK_CloseDevice(_THIS) | ||||
| static void JACK_CloseDevice(_THIS) | ||||
| { | ||||
|     if (this->hidden->client) { | ||||
|         JACK_jack_deactivate(this->hidden->client); | ||||
| @@ -279,8 +259,7 @@ JACK_CloseDevice(_THIS) | ||||
|     SDL_free(this->hidden); | ||||
| } | ||||
|  | ||||
| static int | ||||
| JACK_OpenDevice(_THIS, const char *devname) | ||||
| static int JACK_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     /* Note that JACK uses "output" for capture devices (they output audio | ||||
|         data to us) and "input" for playback (we input audio data to them). | ||||
| @@ -300,7 +279,7 @@ JACK_OpenDevice(_THIS, const char *devname) | ||||
|     int i; | ||||
|  | ||||
|     /* Initialize all variables that we clean on shutdown */ | ||||
|     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) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
| @@ -328,7 +307,7 @@ JACK_OpenDevice(_THIS, const char *devname) | ||||
|         const char *type = JACK_jack_port_type(dport); | ||||
|         const int len = SDL_strlen(type); | ||||
|         /* See if type ends with "audio" */ | ||||
|         if (len >= 5 && !SDL_memcmp(type+len-5, "audio", 5)) { | ||||
|         if (len >= 5 && !SDL_memcmp(type + len - 5, "audio", 5)) { | ||||
|             audio_ports[channels++] = i; | ||||
|         } | ||||
|     } | ||||
| @@ -336,7 +315,6 @@ JACK_OpenDevice(_THIS, const char *devname) | ||||
|         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." */ | ||||
|  | ||||
|     /* Jack pretty much demands what it wants. */ | ||||
| @@ -349,23 +327,23 @@ JACK_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     this->hidden->iosem = SDL_CreateSemaphore(0); | ||||
|     if (!this->hidden->iosem) { | ||||
|         return -1;  /* error was set by SDL_CreateSemaphore */ | ||||
|         return -1; /* error was set by SDL_CreateSemaphore */ | ||||
|     } | ||||
|  | ||||
|     this->hidden->iobuffer = (float *) SDL_calloc(1, this->spec.size); | ||||
|     this->hidden->iobuffer = (float *)SDL_calloc(1, this->spec.size); | ||||
|     if (!this->hidden->iobuffer) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
|  | ||||
|     /* Build SDL's ports, which we will connect to the device ports. */ | ||||
|     this->hidden->sdlports = (jack_port_t **) SDL_calloc(channels, sizeof (jack_port_t *)); | ||||
|     this->hidden->sdlports = (jack_port_t **)SDL_calloc(channels, sizeof(jack_port_t *)); | ||||
|     if (this->hidden->sdlports == NULL) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
|  | ||||
|     for (i = 0; i < channels; i++) { | ||||
|         char portname[32]; | ||||
|         SDL_snprintf(portname, sizeof (portname), "sdl_jack_%s_%d", sdlportstr, i); | ||||
|         SDL_snprintf(portname, sizeof(portname), "sdl_jack_%s_%d", sdlportstr, i); | ||||
|         this->hidden->sdlports[i] = JACK_jack_port_register(client, portname, JACK_DEFAULT_AUDIO_TYPE, sdlportflags, 0); | ||||
|         if (this->hidden->sdlports[i] == NULL) { | ||||
|             return SDL_SetError("jack_port_register failed"); | ||||
| @@ -400,14 +378,12 @@ JACK_OpenDevice(_THIS, const char *devname) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| JACK_Deinitialize(void) | ||||
| static void JACK_Deinitialize(void) | ||||
| { | ||||
|     UnloadJackLibrary(); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| JACK_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool JACK_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     if (LoadJackLibrary() < 0) { | ||||
|         return SDL_FALSE; | ||||
| @@ -434,7 +410,7 @@ JACK_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->OnlyHasDefaultCaptureDevice = SDL_TRUE; | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap JACK_bootstrap = { | ||||
|   | ||||
| @@ -38,32 +38,27 @@ static SDL_AudioDevice *audio_device; | ||||
| static void FreePrivateData(_THIS); | ||||
| static int FindAudioFormat(_THIS); | ||||
|  | ||||
| static SDL_INLINE void | ||||
| contextLock(_THIS) | ||||
| static SDL_INLINE void contextLock(_THIS) | ||||
| { | ||||
|     LightLock_Lock(&this->hidden->lock); | ||||
| } | ||||
|  | ||||
| static SDL_INLINE void | ||||
| contextUnlock(_THIS) | ||||
| static SDL_INLINE void contextUnlock(_THIS) | ||||
| { | ||||
|     LightLock_Unlock(&this->hidden->lock); | ||||
| } | ||||
|  | ||||
| static void | ||||
| N3DSAUD_LockAudio(_THIS) | ||||
| static void N3DSAUD_LockAudio(_THIS) | ||||
| { | ||||
|     contextLock(this); | ||||
| } | ||||
|  | ||||
| static void | ||||
| N3DSAUD_UnlockAudio(_THIS) | ||||
| static void N3DSAUD_UnlockAudio(_THIS) | ||||
| { | ||||
|     contextUnlock(this); | ||||
| } | ||||
|  | ||||
| static void | ||||
| N3DSAUD_DspHook(DSP_HookType hook) | ||||
| static void N3DSAUD_DspHook(DSP_HookType hook) | ||||
| { | ||||
|     if (hook == DSPHOOK_ONCANCEL) { | ||||
|         contextLock(audio_device); | ||||
| @@ -74,12 +69,11 @@ N3DSAUD_DspHook(DSP_HookType hook) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| AudioFrameFinished(void *device) | ||||
| static void AudioFrameFinished(void *device) | ||||
| { | ||||
|     bool shouldBroadcast = false; | ||||
|     unsigned i; | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *) device; | ||||
|     SDL_AudioDevice *this = (SDL_AudioDevice *)device; | ||||
|  | ||||
|     contextLock(this); | ||||
|  | ||||
| @@ -97,13 +91,12 @@ AudioFrameFinished(void *device) | ||||
|     contextUnlock(this); | ||||
| } | ||||
|  | ||||
| static int | ||||
| N3DSAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int N3DSAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     Result ndsp_init_res; | ||||
|     Uint8 *data_vaddr; | ||||
|     float mix[12]; | ||||
|     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) { | ||||
|         return SDL_OutOfMemory(); | ||||
| @@ -142,14 +135,14 @@ N3DSAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     } | ||||
|  | ||||
|     this->hidden->mixlen = this->spec.size; | ||||
|     this->hidden->mixbuf = (Uint8 *) SDL_malloc(this->spec.size); | ||||
|     this->hidden->mixbuf = (Uint8 *)SDL_malloc(this->spec.size); | ||||
|     if (this->hidden->mixbuf == NULL) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
|  | ||||
|     SDL_memset(this->hidden->mixbuf, this->spec.silence, this->spec.size); | ||||
|  | ||||
|     data_vaddr = (Uint8 *) linearAlloc(this->hidden->mixlen * NUM_BUFFERS); | ||||
|     data_vaddr = (Uint8 *)linearAlloc(this->hidden->mixlen * NUM_BUFFERS); | ||||
|     if (data_vaddr == NULL) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
| @@ -188,8 +181,7 @@ N3DSAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| N3DSAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int N3DSAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     /* Delay to make this sort of simulate real audio input. */ | ||||
|     SDL_Delay((this->spec.samples * 1000) / this->spec.freq); | ||||
| @@ -199,8 +191,7 @@ N3DSAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     return buflen; | ||||
| } | ||||
|  | ||||
| static void | ||||
| N3DSAUDIO_PlayDevice(_THIS) | ||||
| static void N3DSAUDIO_PlayDevice(_THIS) | ||||
| { | ||||
|     size_t nextbuf; | ||||
|     size_t sampleLen; | ||||
| @@ -219,15 +210,14 @@ N3DSAUDIO_PlayDevice(_THIS) | ||||
|  | ||||
|     contextUnlock(this); | ||||
|  | ||||
|     memcpy((void *) this->hidden->waveBuf[nextbuf].data_vaddr, | ||||
|     memcpy((void *)this->hidden->waveBuf[nextbuf].data_vaddr, | ||||
|            this->hidden->mixbuf, sampleLen); | ||||
|     DSP_FlushDataCache(this->hidden->waveBuf[nextbuf].data_vaddr, sampleLen); | ||||
|  | ||||
|     ndspChnWaveBufAdd(0, &this->hidden->waveBuf[nextbuf]); | ||||
| } | ||||
|  | ||||
| static void | ||||
| N3DSAUDIO_WaitDevice(_THIS) | ||||
| static void N3DSAUDIO_WaitDevice(_THIS) | ||||
| { | ||||
|     contextLock(this); | ||||
|     while (!this->hidden->isCancelled && | ||||
| @@ -237,14 +227,12 @@ N3DSAUDIO_WaitDevice(_THIS) | ||||
|     contextUnlock(this); | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| N3DSAUDIO_GetDeviceBuf(_THIS) | ||||
| static Uint8 *N3DSAUDIO_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     return this->hidden->mixbuf; | ||||
| } | ||||
|  | ||||
| static void | ||||
| N3DSAUDIO_CloseDevice(_THIS) | ||||
| static void N3DSAUDIO_CloseDevice(_THIS) | ||||
| { | ||||
|     contextLock(this); | ||||
|  | ||||
| @@ -264,8 +252,7 @@ N3DSAUDIO_CloseDevice(_THIS) | ||||
|     FreePrivateData(this); | ||||
| } | ||||
|  | ||||
| static void | ||||
| N3DSAUDIO_ThreadInit(_THIS) | ||||
| static void N3DSAUDIO_ThreadInit(_THIS) | ||||
| { | ||||
|     s32 current_priority; | ||||
|     svcGetThreadPriority(¤t_priority, CUR_THREAD_HANDLE); | ||||
| @@ -275,8 +262,7 @@ N3DSAUDIO_ThreadInit(_THIS) | ||||
|     svcSetThreadPriority(CUR_THREAD_HANDLE, current_priority); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| N3DSAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| static SDL_bool N3DSAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     /* Set the function pointers */ | ||||
|     impl->OpenDevice = N3DSAUDIO_OpenDevice; | ||||
| @@ -306,15 +292,14 @@ AudioBootStrap N3DSAUDIO_bootstrap = { | ||||
| /** | ||||
|  * Cleans up all allocated memory, safe to call with null pointers | ||||
|  */ | ||||
| static void | ||||
| FreePrivateData(_THIS) | ||||
| static void FreePrivateData(_THIS) | ||||
| { | ||||
|     if (!this->hidden) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     if (this->hidden->waveBuf[0].data_vaddr) { | ||||
|         linearFree((void *) this->hidden->waveBuf[0].data_vaddr); | ||||
|         linearFree((void *)this->hidden->waveBuf[0].data_vaddr); | ||||
|     } | ||||
|  | ||||
|     if (this->hidden->mixbuf) { | ||||
| @@ -326,8 +311,7 @@ FreePrivateData(_THIS) | ||||
|     this->hidden = NULL; | ||||
| } | ||||
|  | ||||
| static int | ||||
| FindAudioFormat(_THIS) | ||||
| static int FindAudioFormat(_THIS) | ||||
| { | ||||
|     SDL_bool found_valid_format = SDL_FALSE; | ||||
|     Uint16 test_format = SDL_FirstAudioFormat(this->spec.format); | ||||
|   | ||||
| @@ -45,15 +45,12 @@ | ||||
|  | ||||
| /* #define DEBUG_AUDIO */ | ||||
|  | ||||
| static void | ||||
| NETBSDAUDIO_DetectDevices(void) | ||||
| static void NETBSDAUDIO_DetectDevices(void) | ||||
| { | ||||
|     SDL_EnumUnixAudioDevices(0, NULL); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| NETBSDAUDIO_Status(_THIS) | ||||
| static void NETBSDAUDIO_Status(_THIS) | ||||
| { | ||||
| #ifdef DEBUG_AUDIO | ||||
|     /* *INDENT-OFF* */ /* clang-format off */ | ||||
| @@ -119,12 +116,11 @@ NETBSDAUDIO_Status(_THIS) | ||||
|             this->spec.format, | ||||
|             this->spec.size); | ||||
|     /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
| #endif /* DEBUG_AUDIO */ | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| NETBSDAUDIO_PlayDevice(_THIS) | ||||
| static void NETBSDAUDIO_PlayDevice(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = this->hidden; | ||||
|     int written; | ||||
| @@ -143,17 +139,14 @@ NETBSDAUDIO_PlayDevice(_THIS) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| NETBSDAUDIO_GetDeviceBuf(_THIS) | ||||
| static Uint8 *NETBSDAUDIO_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     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; | ||||
|  | ||||
|     br = read(this->hidden->audio_fd, buffer, buflen); | ||||
| @@ -169,30 +162,28 @@ NETBSDAUDIO_CaptureFromDevice(_THIS, void *_buffer, int buflen) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| NETBSDAUDIO_FlushCapture(_THIS) | ||||
| static void NETBSDAUDIO_FlushCapture(_THIS) | ||||
| { | ||||
|     audio_info_t info; | ||||
|     size_t remain; | ||||
|     Uint8 buf[512]; | ||||
|  | ||||
|     if (ioctl(this->hidden->audio_fd, AUDIO_GETINFO, &info) < 0) { | ||||
|         return;  /* oh well. */ | ||||
|         return; /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     remain = (size_t) (info.record.samples * (SDL_AUDIO_BITSIZE(this->spec.format) / 8)); | ||||
|     remain = (size_t)(info.record.samples * (SDL_AUDIO_BITSIZE(this->spec.format) / 8)); | ||||
|     while (remain > 0) { | ||||
|         const size_t len = SDL_min(sizeof (buf), remain); | ||||
|         const size_t len = SDL_min(sizeof(buf), remain); | ||||
|         const int br = read(this->hidden->audio_fd, buf, len); | ||||
|         if (br <= 0) { | ||||
|             return;  /* oh well. */ | ||||
|             return; /* oh well. */ | ||||
|         } | ||||
|         remain -= br; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| NETBSDAUDIO_CloseDevice(_THIS) | ||||
| static void NETBSDAUDIO_CloseDevice(_THIS) | ||||
| { | ||||
|     if (this->hidden->audio_fd >= 0) { | ||||
|         close(this->hidden->audio_fd); | ||||
| @@ -201,8 +192,7 @@ NETBSDAUDIO_CloseDevice(_THIS) | ||||
|     SDL_free(this->hidden); | ||||
| } | ||||
|  | ||||
| static int | ||||
| NETBSDAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int NETBSDAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     SDL_bool iscapture = this->iscapture; | ||||
|     SDL_AudioFormat test_format; | ||||
| @@ -241,8 +231,7 @@ NETBSDAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|          * Use the device's native sample rate so the kernel doesn't have to | ||||
|          * resample. | ||||
|          */ | ||||
|         this->spec.freq = iscapture ? | ||||
|             hwinfo.record.sample_rate : hwinfo.play.sample_rate; | ||||
|         this->spec.freq = iscapture ? hwinfo.record.sample_rate : hwinfo.play.sample_rate; | ||||
|     } | ||||
| #endif | ||||
|  | ||||
| @@ -307,7 +296,7 @@ NETBSDAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     if (!iscapture) { | ||||
|         /* Allocate mixing buffer */ | ||||
|         this->hidden->mixlen = this->spec.size; | ||||
|         this->hidden->mixbuf = (Uint8 *) SDL_malloc(this->hidden->mixlen); | ||||
|         this->hidden->mixbuf = (Uint8 *)SDL_malloc(this->hidden->mixlen); | ||||
|         if (this->hidden->mixbuf == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
| @@ -320,8 +309,7 @@ NETBSDAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| NETBSDAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool NETBSDAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     /* Set the function pointers */ | ||||
|     impl->DetectDevices = NETBSDAUDIO_DetectDevices; | ||||
| @@ -335,10 +323,9 @@ NETBSDAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|     impl->AllowsArbitraryDeviceNames = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
|  | ||||
| AudioBootStrap NETBSDAUDIO_bootstrap = { | ||||
|     "netbsd", "NetBSD audio", NETBSDAUDIO_Init, SDL_FALSE | ||||
| }; | ||||
|   | ||||
| @@ -25,7 +25,7 @@ | ||||
|  | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
| @@ -41,7 +41,7 @@ struct SDL_PrivateAudioData | ||||
|     float next_frame; | ||||
| }; | ||||
|  | ||||
| #define FUDGE_TICKS 10      /* The scheduler overhead ticks per frame */ | ||||
| #define FUDGE_TICKS 10 /* The scheduler overhead ticks per frame */ | ||||
|  | ||||
| #endif /* SDL_netbsdaudio_h_ */ | ||||
|  | ||||
|   | ||||
| @@ -38,9 +38,9 @@ | ||||
| #include <android/log.h> | ||||
|  | ||||
| #if 0 | ||||
| #define LOG_TAG "SDL_openslES" | ||||
| #define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) | ||||
| #define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) | ||||
| #define LOG_TAG   "SDL_openslES" | ||||
| #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) | ||||
| #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) | ||||
| //#define LOGV(...)  __android_log_print(ANDROID_LOG_VERBOSE,LOG_TAG,__VA_ARGS__) | ||||
| #define LOGV(...) | ||||
| #else | ||||
| @@ -70,9 +70,9 @@ | ||||
| #define SL_SPEAKER_TOP_BACK_RIGHT        ((SLuint32) 0x00020000) | ||||
| */ | ||||
| #define SL_ANDROID_SPEAKER_STEREO (SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT) | ||||
| #define SL_ANDROID_SPEAKER_QUAD (SL_ANDROID_SPEAKER_STEREO | SL_SPEAKER_BACK_LEFT | SL_SPEAKER_BACK_RIGHT) | ||||
| #define SL_ANDROID_SPEAKER_5DOT1 (SL_ANDROID_SPEAKER_QUAD | SL_SPEAKER_FRONT_CENTER  | SL_SPEAKER_LOW_FREQUENCY) | ||||
| #define SL_ANDROID_SPEAKER_7DOT1 (SL_ANDROID_SPEAKER_5DOT1 | SL_SPEAKER_SIDE_LEFT | SL_SPEAKER_SIDE_RIGHT) | ||||
| #define SL_ANDROID_SPEAKER_QUAD   (SL_ANDROID_SPEAKER_STEREO | SL_SPEAKER_BACK_LEFT | SL_SPEAKER_BACK_RIGHT) | ||||
| #define SL_ANDROID_SPEAKER_5DOT1  (SL_ANDROID_SPEAKER_QUAD | SL_SPEAKER_FRONT_CENTER | SL_SPEAKER_LOW_FREQUENCY) | ||||
| #define SL_ANDROID_SPEAKER_7DOT1  (SL_ANDROID_SPEAKER_5DOT1 | SL_SPEAKER_SIDE_LEFT | SL_SPEAKER_SIDE_RIGHT) | ||||
|  | ||||
| /* engine interfaces */ | ||||
| static SLObjectItf engineObject = NULL; | ||||
| @@ -98,8 +98,8 @@ static SLAndroidSimpleBufferQueueItf recorderBufferQueue = NULL; | ||||
| static const char *sldevaudiorecorderstr = "SLES Audio Recorder"; | ||||
| static const char *sldevaudioplayerstr   = "SLES Audio Player"; | ||||
|  | ||||
| #define  SLES_DEV_AUDIO_RECORDER  sldevaudiorecorderstr | ||||
| #define  SLES_DEV_AUDIO_PLAYER  sldevaudioplayerstr | ||||
| #define SLES_DEV_AUDIO_RECORDER sldevaudiorecorderstr | ||||
| #define SLES_DEV_AUDIO_PLAYER   sldevaudioplayerstr | ||||
| static void openslES_DetectDevices( int iscapture ) | ||||
| { | ||||
|     LOGI( "openSLES_DetectDevices()" ); | ||||
| @@ -128,8 +128,7 @@ static void openslES_DestroyEngine(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| openslES_CreateEngine(void) | ||||
| static int openslES_CreateEngine(void) | ||||
| { | ||||
|     const SLInterfaceID ids[1] = { SL_IID_VOLUME }; | ||||
|     const SLboolean req[1] = { SL_BOOLEAN_FALSE }; | ||||
| @@ -183,17 +182,15 @@ error: | ||||
| } | ||||
|  | ||||
| /* this callback handler is called every time a buffer finishes recording */ | ||||
| static void | ||||
| bqRecorderCallback(SLAndroidSimpleBufferQueueItf bq, void *context) | ||||
| static void bqRecorderCallback(SLAndroidSimpleBufferQueueItf bq, void *context) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) context; | ||||
|     struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *)context; | ||||
|  | ||||
|     LOGV("SLES: Recording Callback"); | ||||
|     SDL_SemPost(audiodata->playsem); | ||||
| } | ||||
|  | ||||
| static void | ||||
| openslES_DestroyPCMRecorder(_THIS) | ||||
| static void openslES_DestroyPCMRecorder(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = this->hidden; | ||||
|     SLresult result; | ||||
| @@ -224,8 +221,7 @@ openslES_DestroyPCMRecorder(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| openslES_CreatePCMRecorder(_THIS) | ||||
| static int openslES_CreatePCMRecorder(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = this->hidden; | ||||
|     SLDataFormat_PCM format_pcm; | ||||
| @@ -252,8 +248,8 @@ openslES_CreatePCMRecorder(_THIS) | ||||
|     SDL_CalculateAudioSpec(&this->spec); | ||||
|  | ||||
|     LOGI("Try to open %u hz %u bit chan %u %s samples %u", | ||||
|           this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format), | ||||
|           this->spec.channels, (this->spec.format & 0x1000) ? "BE" : "LE", this->spec.samples); | ||||
|          this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format), | ||||
|          this->spec.channels, (this->spec.format & 0x1000) ? "BE" : "LE", this->spec.samples); | ||||
|  | ||||
|     /* configure audio source */ | ||||
|     loc_dev.locatorType = SL_DATALOCATOR_IODEVICE; | ||||
| @@ -267,13 +263,13 @@ openslES_CreatePCMRecorder(_THIS) | ||||
|     loc_bufq.locatorType = SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE; | ||||
|     loc_bufq.numBuffers = NUM_BUFFERS; | ||||
|  | ||||
|     format_pcm.formatType    = SL_DATAFORMAT_PCM; | ||||
|     format_pcm.numChannels   = this->spec.channels; | ||||
|     format_pcm.samplesPerSec = this->spec.freq * 1000;  /* / kilo Hz to milli Hz */ | ||||
|     format_pcm.formatType = SL_DATAFORMAT_PCM; | ||||
|     format_pcm.numChannels = this->spec.channels; | ||||
|     format_pcm.samplesPerSec = this->spec.freq * 1000; /* / kilo Hz to milli Hz */ | ||||
|     format_pcm.bitsPerSample = SDL_AUDIO_BITSIZE(this->spec.format); | ||||
|     format_pcm.containerSize = SDL_AUDIO_BITSIZE(this->spec.format); | ||||
|     format_pcm.endianness    = SL_BYTEORDER_LITTLEENDIAN; | ||||
|     format_pcm.channelMask   = SL_SPEAKER_FRONT_CENTER; | ||||
|     format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN; | ||||
|     format_pcm.channelMask = SL_SPEAKER_FRONT_CENTER; | ||||
|  | ||||
|     audioSnk.pLocator = &loc_bufq; | ||||
|     audioSnk.pFormat = &format_pcm; | ||||
| @@ -323,7 +319,7 @@ openslES_CreatePCMRecorder(_THIS) | ||||
|     } | ||||
|  | ||||
|     /* Create the sound buffers */ | ||||
|     audiodata->mixbuff = (Uint8 *) SDL_malloc(NUM_BUFFERS * this->spec.size); | ||||
|     audiodata->mixbuff = (Uint8 *)SDL_malloc(NUM_BUFFERS * this->spec.size); | ||||
|     if (audiodata->mixbuff == NULL) { | ||||
|         LOGE("mixbuffer allocate - out of memory"); | ||||
|         goto failed; | ||||
| @@ -363,17 +359,15 @@ failed: | ||||
| } | ||||
|  | ||||
| /* this callback handler is called every time a buffer finishes playing */ | ||||
| static void | ||||
| bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context) | ||||
| static void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) context; | ||||
|     struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *)context; | ||||
|  | ||||
|     LOGV("SLES: Playback Callback"); | ||||
|     SDL_SemPost(audiodata->playsem); | ||||
| } | ||||
|  | ||||
| static void | ||||
| openslES_DestroyPCMPlayer(_THIS) | ||||
| static void openslES_DestroyPCMPlayer(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = this->hidden; | ||||
|     SLresult result; | ||||
| @@ -405,8 +399,7 @@ openslES_DestroyPCMPlayer(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| openslES_CreatePCMPlayer(_THIS) | ||||
| static int openslES_CreatePCMPlayer(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = this->hidden; | ||||
|     SLDataLocator_AndroidSimpleBufferQueue loc_bufq; | ||||
| @@ -434,7 +427,7 @@ openslES_CreatePCMPlayer(_THIS) | ||||
|  | ||||
|         if (!test_format) { | ||||
|             /* Didn't find a compatible format : */ | ||||
|             LOGI( "No compatible audio format, using signed 16-bit audio" ); | ||||
|             LOGI("No compatible audio format, using signed 16-bit audio"); | ||||
|             test_format = AUDIO_S16SYS; | ||||
|         } | ||||
|         this->spec.format = test_format; | ||||
| @@ -447,16 +440,16 @@ openslES_CreatePCMPlayer(_THIS) | ||||
|     SDL_CalculateAudioSpec(&this->spec); | ||||
|  | ||||
|     LOGI("Try to open %u hz %s %u bit chan %u %s samples %u", | ||||
|           this->spec.freq, SDL_AUDIO_ISFLOAT(this->spec.format) ? "float" : "pcm", SDL_AUDIO_BITSIZE(this->spec.format), | ||||
|           this->spec.channels, (this->spec.format & 0x1000) ? "BE" : "LE", this->spec.samples); | ||||
|          this->spec.freq, SDL_AUDIO_ISFLOAT(this->spec.format) ? "float" : "pcm", SDL_AUDIO_BITSIZE(this->spec.format), | ||||
|          this->spec.channels, (this->spec.format & 0x1000) ? "BE" : "LE", this->spec.samples); | ||||
|  | ||||
|     /* configure audio source */ | ||||
|     loc_bufq.locatorType = SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE; | ||||
|     loc_bufq.numBuffers = NUM_BUFFERS; | ||||
|  | ||||
|     format_pcm.formatType    = SL_DATAFORMAT_PCM; | ||||
|     format_pcm.numChannels   = this->spec.channels; | ||||
|     format_pcm.samplesPerSec = this->spec.freq * 1000;  /* / kilo Hz to milli Hz */ | ||||
|     format_pcm.formatType = SL_DATAFORMAT_PCM; | ||||
|     format_pcm.numChannels = this->spec.channels; | ||||
|     format_pcm.samplesPerSec = this->spec.freq * 1000; /* / kilo Hz to milli Hz */ | ||||
|     format_pcm.bitsPerSample = SDL_AUDIO_BITSIZE(this->spec.format); | ||||
|     format_pcm.containerSize = SDL_AUDIO_BITSIZE(this->spec.format); | ||||
|  | ||||
| @@ -466,8 +459,7 @@ openslES_CreatePCMPlayer(_THIS) | ||||
|         format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN; | ||||
|     } | ||||
|  | ||||
|     switch (this->spec.channels) | ||||
|     { | ||||
|     switch (this->spec.channels) { | ||||
|     case 1: | ||||
|         format_pcm.channelMask = SL_SPEAKER_FRONT_LEFT; | ||||
|         break; | ||||
| @@ -512,7 +504,7 @@ openslES_CreatePCMPlayer(_THIS) | ||||
|     } | ||||
|  | ||||
|     audioSrc.pLocator = &loc_bufq; | ||||
|     audioSrc.pFormat = SDL_AUDIO_ISFLOAT(this->spec.format) ? (void*)&format_pcm_ex : (void*)&format_pcm; | ||||
|     audioSrc.pFormat = SDL_AUDIO_ISFLOAT(this->spec.format) ? (void *)&format_pcm_ex : (void *)&format_pcm; | ||||
|  | ||||
|     /* configure audio sink */ | ||||
|     loc_outmix.locatorType = SL_DATALOCATOR_OUTPUTMIX; | ||||
| @@ -573,7 +565,7 @@ openslES_CreatePCMPlayer(_THIS) | ||||
|     } | ||||
|  | ||||
|     /* Create the sound buffers */ | ||||
|     audiodata->mixbuff = (Uint8 *) SDL_malloc(NUM_BUFFERS * this->spec.size); | ||||
|     audiodata->mixbuff = (Uint8 *)SDL_malloc(NUM_BUFFERS * this->spec.size); | ||||
|     if (audiodata->mixbuff == NULL) { | ||||
|         LOGE("mixbuffer allocate - out of memory"); | ||||
|         goto failed; | ||||
| @@ -596,10 +588,9 @@ failed: | ||||
|     return -1; | ||||
| } | ||||
|  | ||||
| static int | ||||
| openslES_OpenDevice(_THIS, const char *devname) | ||||
| static int 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) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
| @@ -625,12 +616,10 @@ openslES_OpenDevice(_THIS, const char *devname) | ||||
|         } else { | ||||
|             return SDL_SetError("Open device failed!"); | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| openslES_WaitDevice(_THIS) | ||||
| static void openslES_WaitDevice(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = this->hidden; | ||||
|  | ||||
| @@ -640,8 +629,7 @@ openslES_WaitDevice(_THIS) | ||||
|     SDL_SemWait(audiodata->playsem); | ||||
| } | ||||
|  | ||||
| static void | ||||
| openslES_PlayDevice(_THIS) | ||||
| static void openslES_PlayDevice(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = this->hidden; | ||||
|     SLresult result; | ||||
| @@ -675,8 +663,7 @@ openslES_PlayDevice(_THIS) | ||||
| /* */ | ||||
| /* okay.. */ | ||||
|  | ||||
| static Uint8 * | ||||
| openslES_GetDeviceBuf(_THIS) | ||||
| static Uint8 *openslES_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = this->hidden; | ||||
|  | ||||
| @@ -684,8 +671,7 @@ openslES_GetDeviceBuf(_THIS) | ||||
|     return audiodata->pmixbuff[audiodata->next_buffer]; | ||||
| } | ||||
|  | ||||
| static int | ||||
| openslES_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int openslES_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *audiodata = this->hidden; | ||||
|     SLresult result; | ||||
| @@ -712,8 +698,7 @@ openslES_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     return this->spec.size; | ||||
| } | ||||
|  | ||||
| static void | ||||
| openslES_CloseDevice(_THIS) | ||||
| static void openslES_CloseDevice(_THIS) | ||||
| { | ||||
|     /* struct SDL_PrivateAudioData *audiodata = this->hidden; */ | ||||
|  | ||||
| @@ -728,8 +713,7 @@ openslES_CloseDevice(_THIS) | ||||
|     SDL_free(this->hidden); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| openslES_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool openslES_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     LOGI("openslES_Init() called"); | ||||
|  | ||||
| @@ -741,13 +725,13 @@ openslES_Init(SDL_AudioDriverImpl * impl) | ||||
|  | ||||
|     /* Set the function pointers */ | ||||
|     /* impl->DetectDevices = openslES_DetectDevices; */ | ||||
|     impl->OpenDevice    = openslES_OpenDevice; | ||||
|     impl->WaitDevice    = openslES_WaitDevice; | ||||
|     impl->PlayDevice    = openslES_PlayDevice; | ||||
|     impl->GetDeviceBuf  = openslES_GetDeviceBuf; | ||||
|     impl->OpenDevice = openslES_OpenDevice; | ||||
|     impl->WaitDevice = openslES_WaitDevice; | ||||
|     impl->PlayDevice = openslES_PlayDevice; | ||||
|     impl->GetDeviceBuf = openslES_GetDeviceBuf; | ||||
|     impl->CaptureFromDevice = openslES_CaptureFromDevice; | ||||
|     impl->CloseDevice   = openslES_CloseDevice; | ||||
|     impl->Deinitialize  = openslES_DestroyEngine; | ||||
|     impl->CloseDevice = openslES_CloseDevice; | ||||
|     impl->Deinitialize = openslES_DestroyEngine; | ||||
|  | ||||
|     /* and the capabilities */ | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|   | ||||
| @@ -26,15 +26,15 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| #define NUM_BUFFERS 2           /* -- Don't lower this! */ | ||||
| #define NUM_BUFFERS 2 /* -- Don't lower this! */ | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|     Uint8   *mixbuff; | ||||
|     int      next_buffer; | ||||
|     Uint8   *pmixbuff[NUM_BUFFERS]; | ||||
|     Uint8 *mixbuff; | ||||
|     int next_buffer; | ||||
|     Uint8 *pmixbuff[NUM_BUFFERS]; | ||||
|     SDL_sem *playsem; | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -77,7 +77,7 @@ enum PW_READY_FLAGS | ||||
| { | ||||
|     PW_READY_FLAG_BUFFER_ADDED = 0x1, | ||||
|     PW_READY_FLAG_STREAM_READY = 0x2, | ||||
|     PW_READY_FLAG_ALL_BITS     = 0x3 | ||||
|     PW_READY_FLAG_ALL_BITS = 0x3 | ||||
| }; | ||||
|  | ||||
| #define PW_ID_TO_HANDLE(x) (void *)((uintptr_t)x) | ||||
| @@ -117,17 +117,16 @@ static struct pw_properties *(*PIPEWIRE_pw_properties_new)(const char *, ...)SPA | ||||
| static int (*PIPEWIRE_pw_properties_set)(struct pw_properties *, const char *, const char *); | ||||
| static int (*PIPEWIRE_pw_properties_setf)(struct pw_properties *, const char *, const char *, ...) SPA_PRINTF_FUNC(3, 4); | ||||
|  | ||||
| static int         pipewire_version_major; | ||||
| static int         pipewire_version_minor; | ||||
| static int         pipewire_version_patch; | ||||
| static int pipewire_version_major; | ||||
| static int pipewire_version_minor; | ||||
| static int pipewire_version_patch; | ||||
|  | ||||
| #ifdef 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 | ||||
| pipewire_dlsym(const char *fn, void **addr) | ||||
| static int pipewire_dlsym(const char *fn, void **addr) | ||||
| { | ||||
|     *addr = SDL_LoadFunction(pipewire_handle, fn); | ||||
|     if (*addr == NULL) { | ||||
| @@ -143,8 +142,7 @@ pipewire_dlsym(const char *fn, void **addr) | ||||
|         return -1;                                             \ | ||||
|     } | ||||
|  | ||||
| static int | ||||
| load_pipewire_library() | ||||
| static int load_pipewire_library() | ||||
| { | ||||
|     if ((pipewire_handle = SDL_LoadObject(pipewire_library))) { | ||||
|         return 0; | ||||
| @@ -153,8 +151,7 @@ load_pipewire_library() | ||||
|     return -1; | ||||
| } | ||||
|  | ||||
| static void | ||||
| unload_pipewire_library() | ||||
| static void unload_pipewire_library() | ||||
| { | ||||
|     if (pipewire_handle) { | ||||
|         SDL_UnloadObject(pipewire_handle); | ||||
| @@ -166,21 +163,18 @@ unload_pipewire_library() | ||||
|  | ||||
| #define SDL_PIPEWIRE_SYM(x) PIPEWIRE_##x = x | ||||
|  | ||||
| static int | ||||
| load_pipewire_library() | ||||
| static int load_pipewire_library() | ||||
| { | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| unload_pipewire_library() | ||||
| static void unload_pipewire_library() | ||||
| { /* Nothing to do */ | ||||
| } | ||||
|  | ||||
| #endif /* SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC */ | ||||
|  | ||||
| static int | ||||
| load_pipewire_syms() | ||||
| static int load_pipewire_syms() | ||||
| { | ||||
|     SDL_PIPEWIRE_SYM(pw_get_library_version); | ||||
|     SDL_PIPEWIRE_SYM(pw_init); | ||||
| @@ -222,8 +216,7 @@ pipewire_version_at_least(int major, int minor, int patch) | ||||
|            (pipewire_version_major > major || pipewire_version_minor > minor || pipewire_version_patch >= patch); | ||||
| } | ||||
|  | ||||
| static int | ||||
| init_pipewire_library() | ||||
| static int init_pipewire_library() | ||||
| { | ||||
|     if (!load_pipewire_library()) { | ||||
|         if (!load_pipewire_syms()) { | ||||
| @@ -245,8 +238,7 @@ init_pipewire_library() | ||||
|     return -1; | ||||
| } | ||||
|  | ||||
| static void | ||||
| deinit_pipewire_library() | ||||
| static void deinit_pipewire_library() | ||||
| { | ||||
|     PIPEWIRE_pw_deinit(); | ||||
|     unload_pipewire_library(); | ||||
| @@ -257,8 +249,8 @@ struct node_object | ||||
| { | ||||
|     struct spa_list link; | ||||
|  | ||||
|     Uint32   id; | ||||
|     int      seq; | ||||
|     Uint32 id; | ||||
|     int seq; | ||||
|     SDL_bool persist; | ||||
|  | ||||
|     /* | ||||
| @@ -271,8 +263,8 @@ struct node_object | ||||
|     void *userdata; | ||||
|  | ||||
|     struct pw_proxy *proxy; | ||||
|     struct spa_hook  node_listener; | ||||
|     struct spa_hook  core_listener; | ||||
|     struct spa_hook node_listener; | ||||
|     struct spa_hook core_listener; | ||||
| }; | ||||
|  | ||||
| /* A sink/source node used for stream I/O. */ | ||||
| @@ -280,8 +272,8 @@ struct io_node | ||||
| { | ||||
|     struct spa_list link; | ||||
|  | ||||
|     Uint32        id; | ||||
|     SDL_bool      is_capture; | ||||
|     Uint32 id; | ||||
|     SDL_bool is_capture; | ||||
|     SDL_AudioSpec spec; | ||||
|  | ||||
|     const char *name; /* Friendly name */ | ||||
| @@ -292,26 +284,25 @@ struct io_node | ||||
|  | ||||
| /* The global hotplug thread and associated objects. */ | ||||
| static struct pw_thread_loop *hotplug_loop; | ||||
| static struct pw_core        *hotplug_core; | ||||
| static struct pw_context     *hotplug_context; | ||||
| static struct pw_registry    *hotplug_registry; | ||||
| static struct spa_hook        hotplug_registry_listener; | ||||
| static struct spa_hook        hotplug_core_listener; | ||||
| static struct spa_list        hotplug_pending_list; | ||||
| static struct spa_list        hotplug_io_list; | ||||
| static int                    hotplug_init_seq_val; | ||||
| static SDL_bool               hotplug_init_complete; | ||||
| static SDL_bool               hotplug_events_enabled; | ||||
| static struct pw_core *hotplug_core; | ||||
| static struct pw_context *hotplug_context; | ||||
| static struct pw_registry *hotplug_registry; | ||||
| static struct spa_hook hotplug_registry_listener; | ||||
| static struct spa_hook hotplug_core_listener; | ||||
| static struct spa_list hotplug_pending_list; | ||||
| static struct spa_list hotplug_io_list; | ||||
| static int hotplug_init_seq_val; | ||||
| static SDL_bool hotplug_init_complete; | ||||
| static SDL_bool hotplug_events_enabled; | ||||
|  | ||||
| static char *pipewire_default_sink_id   = NULL; | ||||
| static char *pipewire_default_sink_id = NULL; | ||||
| static char *pipewire_default_source_id = NULL; | ||||
|  | ||||
| /* The active node list */ | ||||
| static SDL_bool | ||||
| io_list_check_add(struct io_node *node) | ||||
| static SDL_bool io_list_check_add(struct io_node *node) | ||||
| { | ||||
|     struct io_node *n; | ||||
|     SDL_bool        ret = SDL_TRUE; | ||||
|     SDL_bool ret = SDL_TRUE; | ||||
|  | ||||
|     /* See if the node is already in the list */ | ||||
|     spa_list_for_each (n, &hotplug_io_list, link) { | ||||
| @@ -333,8 +324,7 @@ dup_found: | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static void | ||||
| io_list_remove(Uint32 id) | ||||
| static void io_list_remove(Uint32 id) | ||||
| { | ||||
|     struct io_node *n, *temp; | ||||
|  | ||||
| @@ -354,8 +344,7 @@ io_list_remove(Uint32 id) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| io_list_sort() | ||||
| static void io_list_sort() | ||||
| { | ||||
|     struct io_node *default_sink = NULL, *default_source = NULL; | ||||
|     struct io_node *n, *temp; | ||||
| @@ -380,8 +369,7 @@ io_list_sort() | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| io_list_clear() | ||||
| static void io_list_clear() | ||||
| { | ||||
|     struct io_node *n, *temp; | ||||
|  | ||||
| @@ -391,7 +379,7 @@ io_list_clear() | ||||
|     } | ||||
| } | ||||
|  | ||||
| static struct io_node* | ||||
| static struct io_node * | ||||
| io_list_get_by_id(Uint32 id) | ||||
| { | ||||
|     struct io_node *n, *temp; | ||||
| @@ -403,7 +391,7 @@ io_list_get_by_id(Uint32 id) | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| static struct io_node* | ||||
| static struct io_node * | ||||
| io_list_get_by_path(char *path) | ||||
| { | ||||
|     struct io_node *n, *temp; | ||||
| @@ -415,8 +403,7 @@ io_list_get_by_path(char *path) | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| static void | ||||
| node_object_destroy(struct node_object *node) | ||||
| static void node_object_destroy(struct node_object *node) | ||||
| { | ||||
|     SDL_assert(node); | ||||
|  | ||||
| @@ -428,15 +415,13 @@ node_object_destroy(struct node_object *node) | ||||
| } | ||||
|  | ||||
| /* The pending node list */ | ||||
| static void | ||||
| pending_list_add(struct node_object *node) | ||||
| static void pending_list_add(struct node_object *node) | ||||
| { | ||||
|     SDL_assert(node); | ||||
|     spa_list_append(&hotplug_pending_list, &node->link); | ||||
| } | ||||
|  | ||||
| static void | ||||
| pending_list_remove(Uint32 id) | ||||
| static void pending_list_remove(Uint32 id) | ||||
| { | ||||
|     struct node_object *node, *temp; | ||||
|  | ||||
| @@ -447,8 +432,7 @@ pending_list_remove(Uint32 id) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| pending_list_clear() | ||||
| static void pending_list_clear() | ||||
| { | ||||
|     struct node_object *node, *temp; | ||||
|  | ||||
| @@ -457,10 +441,9 @@ pending_list_clear() | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void * | ||||
| node_object_new(Uint32 id, const char *type, Uint32 version, const void *funcs, const struct pw_core_events *core_events) | ||||
| static void *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; | ||||
|  | ||||
|     /* Create the proxy object */ | ||||
| @@ -473,7 +456,7 @@ node_object_new(Uint32 id, const char *type, Uint32 version, const void *funcs, | ||||
|     node = PIPEWIRE_pw_proxy_get_user_data(proxy); | ||||
|     SDL_zerop(node); | ||||
|  | ||||
|     node->id    = id; | ||||
|     node->id = id; | ||||
|     node->proxy = proxy; | ||||
|  | ||||
|     /* Add the callbacks */ | ||||
| @@ -487,8 +470,7 @@ node_object_new(Uint32 id, const char *type, Uint32 version, const void *funcs, | ||||
| } | ||||
|  | ||||
| /* Core sync points */ | ||||
| static void | ||||
| core_events_hotplug_init_callback(void *object, uint32_t id, int seq) | ||||
| static void core_events_hotplug_init_callback(void *object, uint32_t id, int seq) | ||||
| { | ||||
|     if (id == PW_ID_CORE && seq == hotplug_init_seq_val) { | ||||
|         /* This core listener is no longer needed. */ | ||||
| @@ -500,11 +482,10 @@ core_events_hotplug_init_callback(void *object, uint32_t id, int seq) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| core_events_interface_callback(void *object, uint32_t id, int seq) | ||||
| static void core_events_interface_callback(void *object, uint32_t id, int seq) | ||||
| { | ||||
|     struct node_object *node = object; | ||||
|     struct io_node     *io   = node->userdata; | ||||
|     struct io_node *io = node->userdata; | ||||
|  | ||||
|     if (id == PW_ID_CORE && seq == node->seq) { | ||||
|         /* | ||||
| @@ -519,8 +500,7 @@ core_events_interface_callback(void *object, uint32_t id, int seq) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| core_events_metadata_callback(void *object, uint32_t id, int seq) | ||||
| static void core_events_metadata_callback(void *object, uint32_t id, int seq) | ||||
| { | ||||
|     struct node_object *node = object; | ||||
|  | ||||
| @@ -530,11 +510,10 @@ core_events_metadata_callback(void *object, uint32_t id, int seq) | ||||
| } | ||||
|  | ||||
| static const struct pw_core_events hotplug_init_core_events = { PW_VERSION_CORE_EVENTS, .done = core_events_hotplug_init_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 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 void | ||||
| hotplug_core_sync(struct node_object *node) | ||||
| static void hotplug_core_sync(struct node_object *node) | ||||
| { | ||||
|     /* | ||||
|      * Node sync events *must* come before the hotplug init sync events or the initial | ||||
| @@ -550,12 +529,11 @@ hotplug_core_sync(struct node_object *node) | ||||
| } | ||||
|  | ||||
| /* Helpers for retrieving values from params */ | ||||
| static SDL_bool | ||||
| get_range_param(const struct spa_pod *param, Uint32 key, int *def, int *min, int *max) | ||||
| static SDL_bool get_range_param(const struct spa_pod *param, Uint32 key, int *def, int *min, int *max) | ||||
| { | ||||
|     const struct spa_pod_prop *prop; | ||||
|     struct spa_pod            *value; | ||||
|     Uint32                     n_values, choice; | ||||
|     struct spa_pod *value; | ||||
|     Uint32 n_values, choice; | ||||
|  | ||||
|     prop = spa_pod_find_prop(param, NULL, key); | ||||
|  | ||||
| @@ -584,11 +562,10 @@ get_range_param(const struct spa_pod *param, Uint32 key, int *def, int *min, int | ||||
|     return SDL_FALSE; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| get_int_param(const struct spa_pod *param, Uint32 key, int *val) | ||||
| static SDL_bool get_int_param(const struct spa_pod *param, Uint32 key, int *val) | ||||
| { | ||||
|     const struct spa_pod_prop *prop; | ||||
|     Sint32                     v; | ||||
|     Sint32 v; | ||||
|  | ||||
|     prop = spa_pod_find_prop(param, NULL, key); | ||||
|  | ||||
| @@ -604,13 +581,12 @@ get_int_param(const struct spa_pod *param, Uint32 key, int *val) | ||||
| } | ||||
|  | ||||
| /* Interface node callbacks */ | ||||
| static void | ||||
| node_event_info(void *object, const struct pw_node_info *info) | ||||
| static void node_event_info(void *object, const struct pw_node_info *info) | ||||
| { | ||||
|     struct node_object *node = object; | ||||
|     struct io_node     *io   = node->userdata; | ||||
|     const char         *prop_val; | ||||
|     Uint32              i; | ||||
|     struct io_node *io = node->userdata; | ||||
|     const char *prop_val; | ||||
|     Uint32 i; | ||||
|  | ||||
|     if (info) { | ||||
|         prop_val = spa_dict_lookup(info->props, PW_KEY_AUDIO_CHANNELS); | ||||
| @@ -627,11 +603,10 @@ node_event_info(void *object, const struct pw_node_info *info) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| node_event_param(void *object, int seq, uint32_t id, uint32_t index, uint32_t next, const struct spa_pod *param) | ||||
| static void 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 io_node     *io   = node->userdata; | ||||
|     struct io_node *io = node->userdata; | ||||
|  | ||||
|     /* Get the default frequency */ | ||||
|     if (io->spec.freq == 0) { | ||||
| @@ -653,8 +628,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, | ||||
|                                                              .param = node_event_param }; | ||||
|  | ||||
| static char* | ||||
| get_name_from_json(const char *json) | ||||
| static char *get_name_from_json(const char *json) | ||||
| { | ||||
|     struct spa_json parser[2]; | ||||
|     char key[7]; /* "name" */ | ||||
| @@ -676,8 +650,7 @@ get_name_from_json(const char *json) | ||||
| } | ||||
|  | ||||
| /* Metadata node callback */ | ||||
| static int | ||||
| metadata_property(void *object, Uint32 subject, const char *key, const char *type, const char *value) | ||||
| static int metadata_property(void *object, Uint32 subject, const char *key, const char *type, const char *value) | ||||
| { | ||||
|     struct node_object *node = object; | ||||
|  | ||||
| @@ -703,9 +676,8 @@ 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 }; | ||||
|  | ||||
| /* Global registry callbacks */ | ||||
| static void | ||||
| registry_event_global_callback(void *object, uint32_t id, uint32_t permissions, const char *type, uint32_t version, | ||||
|                                const struct spa_dict *props) | ||||
| static void registry_event_global_callback(void *object, uint32_t id, uint32_t permissions, const char *type, uint32_t version, | ||||
|                                            const struct spa_dict *props) | ||||
| { | ||||
|     struct node_object *node; | ||||
|  | ||||
| @@ -714,12 +686,12 @@ registry_event_global_callback(void *object, uint32_t id, uint32_t permissions, | ||||
|         const char *media_class = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS); | ||||
|  | ||||
|         if (media_class) { | ||||
|             const char     *node_desc; | ||||
|             const char     *node_path; | ||||
|             const char *node_desc; | ||||
|             const char *node_path; | ||||
|             struct io_node *io; | ||||
|             SDL_bool        is_capture; | ||||
|             int             desc_buffer_len; | ||||
|             int             path_buffer_len; | ||||
|             SDL_bool is_capture; | ||||
|             int desc_buffer_len; | ||||
|             int path_buffer_len; | ||||
|  | ||||
|             /* Just want sink and capture */ | ||||
|             if (!SDL_strcasecmp(media_class, "Audio/Sink")) { | ||||
| @@ -751,11 +723,11 @@ registry_event_global_callback(void *object, uint32_t id, uint32_t permissions, | ||||
|                 } | ||||
|  | ||||
|                 /* Begin setting the node properties */ | ||||
|                 io->id          = id; | ||||
|                 io->is_capture  = is_capture; | ||||
|                 io->id = id; | ||||
|                 io->is_capture = is_capture; | ||||
|                 io->spec.format = AUDIO_F32; /* Pipewire uses floats internally, other formats require conversion. */ | ||||
|                 io->name        = io->buf; | ||||
|                 io->path        = io->buf + desc_buffer_len; | ||||
|                 io->name = io->buf; | ||||
|                 io->path = io->buf + desc_buffer_len; | ||||
|                 SDL_strlcpy(io->buf, node_desc, desc_buffer_len); | ||||
|                 SDL_strlcpy(io->buf + desc_buffer_len, node_path, path_buffer_len); | ||||
|  | ||||
| @@ -775,8 +747,7 @@ registry_event_global_callback(void *object, uint32_t id, uint32_t permissions, | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| registry_event_remove_callback(void *object, uint32_t id) | ||||
| static void registry_event_remove_callback(void *object, uint32_t id) | ||||
| { | ||||
|     io_list_remove(id); | ||||
|     pending_list_remove(id); | ||||
| @@ -786,8 +757,7 @@ static const struct pw_registry_events registry_events = { PW_VERSION_REGISTRY_E | ||||
|                                                            .global_remove = registry_event_remove_callback }; | ||||
|  | ||||
| /* The hotplug thread */ | ||||
| static int | ||||
| hotplug_loop_init() | ||||
| static int hotplug_loop_init() | ||||
| { | ||||
|     int res; | ||||
|  | ||||
| @@ -830,8 +800,7 @@ hotplug_loop_init() | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| hotplug_loop_destroy() | ||||
| static void hotplug_loop_destroy() | ||||
| { | ||||
|     if (hotplug_loop) { | ||||
|         PIPEWIRE_pw_thread_loop_stop(hotplug_loop); | ||||
| @@ -840,7 +809,7 @@ hotplug_loop_destroy() | ||||
|     pending_list_clear(); | ||||
|     io_list_clear(); | ||||
|  | ||||
|     hotplug_init_complete  = SDL_FALSE; | ||||
|     hotplug_init_complete = SDL_FALSE; | ||||
|     hotplug_events_enabled = SDL_FALSE; | ||||
|  | ||||
|     if (pipewire_default_sink_id != NULL) { | ||||
| @@ -873,8 +842,7 @@ hotplug_loop_destroy() | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| PIPEWIRE_DetectDevices() | ||||
| static void PIPEWIRE_DetectDevices() | ||||
| { | ||||
|     struct io_node *io; | ||||
|  | ||||
| @@ -916,11 +884,10 @@ 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)) | ||||
|  | ||||
| static void | ||||
| initialize_spa_info(const SDL_AudioSpec *spec, struct spa_audio_info_raw *info) | ||||
| static void initialize_spa_info(const SDL_AudioSpec *spec, struct spa_audio_info_raw *info) | ||||
| { | ||||
|     info->channels = spec->channels; | ||||
|     info->rate     = spec->freq; | ||||
|     info->rate = spec->freq; | ||||
|  | ||||
|     switch (spec->channels) { | ||||
|     case 1: | ||||
| @@ -984,14 +951,13 @@ initialize_spa_info(const SDL_AudioSpec *spec, struct spa_audio_info_raw *info) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| output_callback(void *data) | ||||
| static void output_callback(void *data) | ||||
| { | ||||
|     struct pw_buffer  *pw_buf; | ||||
|     struct pw_buffer *pw_buf; | ||||
|     struct spa_buffer *spa_buf; | ||||
|     Uint8             *dst; | ||||
|     Uint8 *dst; | ||||
|  | ||||
|     _THIS                    = (SDL_AudioDevice *)data; | ||||
|     _THIS = (SDL_AudioDevice *)data; | ||||
|     struct pw_stream *stream = this->hidden->stream; | ||||
|  | ||||
|     /* Shutting down, don't do anything */ | ||||
| @@ -1045,18 +1011,17 @@ output_callback(void *data) | ||||
|  | ||||
|     spa_buf->datas[0].chunk->offset = 0; | ||||
|     spa_buf->datas[0].chunk->stride = this->hidden->stride; | ||||
|     spa_buf->datas[0].chunk->size   = this->spec.size; | ||||
|     spa_buf->datas[0].chunk->size = this->spec.size; | ||||
|  | ||||
|     PIPEWIRE_pw_stream_queue_buffer(stream, pw_buf); | ||||
| } | ||||
|  | ||||
| static void | ||||
| input_callback(void *data) | ||||
| static void input_callback(void *data) | ||||
| { | ||||
|     struct pw_buffer  *pw_buf; | ||||
|     struct pw_buffer *pw_buf; | ||||
|     struct spa_buffer *spa_buf; | ||||
|     Uint8             *src; | ||||
|     _THIS                    = (SDL_AudioDevice *)data; | ||||
|     Uint8 *src; | ||||
|     _THIS = (SDL_AudioDevice *)data; | ||||
|     struct pw_stream *stream = this->hidden->stream; | ||||
|  | ||||
|     /* Shutting down, don't do anything */ | ||||
| @@ -1078,7 +1043,7 @@ input_callback(void *data) | ||||
|     if (!SDL_AtomicGet(&this->paused)) { | ||||
|         /* Calculate the offset and data size */ | ||||
|         const Uint32 offset = SPA_MIN(spa_buf->datas[0].chunk->offset, spa_buf->datas[0].maxsize); | ||||
|         const Uint32 size   = SPA_MIN(spa_buf->datas[0].chunk->size, spa_buf->datas[0].maxsize - offset); | ||||
|         const Uint32 size = SPA_MIN(spa_buf->datas[0].chunk->size, spa_buf->datas[0].maxsize - offset); | ||||
|  | ||||
|         src += offset; | ||||
|  | ||||
| @@ -1106,8 +1071,7 @@ input_callback(void *data) | ||||
|     PIPEWIRE_pw_stream_queue_buffer(stream, pw_buf); | ||||
| } | ||||
|  | ||||
| static void | ||||
| stream_add_buffer_callback(void *data, struct pw_buffer *buffer) | ||||
| static void stream_add_buffer_callback(void *data, struct pw_buffer *buffer) | ||||
| { | ||||
|     _THIS = data; | ||||
|  | ||||
| @@ -1118,7 +1082,7 @@ stream_add_buffer_callback(void *data, struct pw_buffer *buffer) | ||||
|          */ | ||||
|         if (this->spec.size > buffer->buffer->datas[0].maxsize) { | ||||
|             this->spec.samples = buffer->buffer->datas[0].maxsize / this->hidden->stride; | ||||
|             this->spec.size    = buffer->buffer->datas[0].maxsize; | ||||
|             this->spec.size = buffer->buffer->datas[0].maxsize; | ||||
|         } | ||||
|     } else if (this->hidden->buffer == NULL) { | ||||
|         /* | ||||
| @@ -1130,15 +1094,14 @@ stream_add_buffer_callback(void *data, struct pw_buffer *buffer) | ||||
|          * A packet size of 2 periods should be more than is ever needed. | ||||
|          */ | ||||
|         this->hidden->input_buffer_packet_size = SPA_MAX(this->spec.size, buffer->buffer->datas[0].maxsize) * 2; | ||||
|         this->hidden->buffer                   = SDL_NewDataQueue(this->hidden->input_buffer_packet_size, this->hidden->input_buffer_packet_size); | ||||
|         this->hidden->buffer = SDL_NewDataQueue(this->hidden->input_buffer_packet_size, this->hidden->input_buffer_packet_size); | ||||
|     } | ||||
|  | ||||
|     this->hidden->stream_init_status |= PW_READY_FLAG_BUFFER_ADDED; | ||||
|     PIPEWIRE_pw_thread_loop_signal(this->hidden->loop, false); | ||||
| } | ||||
|  | ||||
| static void | ||||
| stream_state_changed_callback(void *data, enum pw_stream_state old, enum pw_stream_state state, const char *error) | ||||
| static void stream_state_changed_callback(void *data, enum pw_stream_state old, enum pw_stream_state state, const char *error) | ||||
| { | ||||
|     _THIS = data; | ||||
|  | ||||
| @@ -1153,15 +1116,14 @@ stream_state_changed_callback(void *data, enum pw_stream_state old, enum pw_stre | ||||
|  | ||||
| static const struct pw_stream_events stream_output_events = { PW_VERSION_STREAM_EVENTS, | ||||
|                                                               .state_changed = stream_state_changed_callback, | ||||
|                                                               .add_buffer    = stream_add_buffer_callback, | ||||
|                                                               .process       = output_callback }; | ||||
| static const struct pw_stream_events stream_input_events  = { PW_VERSION_STREAM_EVENTS, | ||||
|                                                               .state_changed = stream_state_changed_callback, | ||||
|                                                               .add_buffer    = stream_add_buffer_callback, | ||||
|                                                               .process       = input_callback }; | ||||
|                                                               .add_buffer = stream_add_buffer_callback, | ||||
|                                                               .process = output_callback }; | ||||
| static const struct pw_stream_events stream_input_events = { PW_VERSION_STREAM_EVENTS, | ||||
|                                                              .state_changed = stream_state_changed_callback, | ||||
|                                                              .add_buffer = stream_add_buffer_callback, | ||||
|                                                              .process = input_callback }; | ||||
|  | ||||
| static int | ||||
| PIPEWIRE_OpenDevice(_THIS, const char *devname) | ||||
| static int PIPEWIRE_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     /* | ||||
|      * NOTE: The PW_STREAM_FLAG_RT_PROCESS flag can be set to call the stream | ||||
| @@ -1172,17 +1134,17 @@ PIPEWIRE_OpenDevice(_THIS, const char *devname) | ||||
|      */ | ||||
|     static const enum pw_stream_flags STREAM_FLAGS = PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_MAP_BUFFERS; | ||||
|  | ||||
|     char                         thread_name[PW_THREAD_NAME_BUFFER_LENGTH]; | ||||
|     Uint8                        pod_buffer[PW_POD_BUFFER_LENGTH]; | ||||
|     struct spa_pod_builder       b        = SPA_POD_BUILDER_INIT(pod_buffer, sizeof(pod_buffer)); | ||||
|     struct spa_audio_info_raw    spa_info = { 0 }; | ||||
|     const struct spa_pod        *params   = NULL; | ||||
|     char thread_name[PW_THREAD_NAME_BUFFER_LENGTH]; | ||||
|     Uint8 pod_buffer[PW_POD_BUFFER_LENGTH]; | ||||
|     struct spa_pod_builder b = SPA_POD_BUILDER_INIT(pod_buffer, sizeof(pod_buffer)); | ||||
|     struct spa_audio_info_raw spa_info = { 0 }; | ||||
|     const struct spa_pod *params = NULL; | ||||
|     struct SDL_PrivateAudioData *priv; | ||||
|     struct pw_properties        *props; | ||||
|     const char                  *app_name, *stream_name, *stream_role, *error; | ||||
|     Uint32                       node_id   = this->handle == NULL ? PW_ID_ANY : PW_HANDLE_TO_ID(this->handle); | ||||
|     SDL_bool                     iscapture = this->iscapture; | ||||
|     int                          res; | ||||
|     struct pw_properties *props; | ||||
|     const char *app_name, *stream_name, *stream_role, *error; | ||||
|     Uint32 node_id = this->handle == NULL ? PW_ID_ANY : PW_HANDLE_TO_ID(this->handle); | ||||
|     SDL_bool iscapture = this->iscapture; | ||||
|     int res; | ||||
|  | ||||
|     /* Clamp the period size to sane values */ | ||||
|     const int min_period = PW_MIN_SAMPLES * SPA_MAX(this->spec.freq / PW_BASE_CLOCK_RATE, 1); | ||||
| @@ -1226,7 +1188,7 @@ PIPEWIRE_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     if (this->spec.samples < min_period) { | ||||
|         this->spec.samples = min_period; | ||||
|         this->spec.size    = this->spec.samples * priv->stride; | ||||
|         this->spec.size = this->spec.samples * priv->stride; | ||||
|     } | ||||
|  | ||||
|     SDL_snprintf(thread_name, sizeof(thread_name), "SDLAudio%c%ld", (iscapture) ? 'C' : 'P', (long)this->handle); | ||||
| @@ -1344,8 +1306,7 @@ static void PIPEWIRE_CloseDevice(_THIS) | ||||
|     SDL_free(this->hidden); | ||||
| } | ||||
|  | ||||
| static int | ||||
| PIPEWIRE_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| static int PIPEWIRE_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| { | ||||
|     struct io_node *node; | ||||
|     char *target; | ||||
| @@ -1383,8 +1344,7 @@ failed: | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static void | ||||
| PIPEWIRE_Deinitialize() | ||||
| static void PIPEWIRE_Deinitialize() | ||||
| { | ||||
|     if (pipewire_initialized) { | ||||
|         hotplug_loop_destroy(); | ||||
| @@ -1393,8 +1353,7 @@ PIPEWIRE_Deinitialize() | ||||
|     } | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| PIPEWIRE_Init(SDL_AudioDriverImpl *impl) | ||||
| static SDL_bool PIPEWIRE_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     if (!pipewire_initialized) { | ||||
|         if (init_pipewire_library() < 0) { | ||||
| @@ -1410,15 +1369,15 @@ PIPEWIRE_Init(SDL_AudioDriverImpl *impl) | ||||
|     } | ||||
|  | ||||
|     /* Set the function pointers */ | ||||
|     impl->DetectDevices       = PIPEWIRE_DetectDevices; | ||||
|     impl->OpenDevice          = PIPEWIRE_OpenDevice; | ||||
|     impl->CloseDevice         = PIPEWIRE_CloseDevice; | ||||
|     impl->Deinitialize        = PIPEWIRE_Deinitialize; | ||||
|     impl->DetectDevices = PIPEWIRE_DetectDevices; | ||||
|     impl->OpenDevice = PIPEWIRE_OpenDevice; | ||||
|     impl->CloseDevice = PIPEWIRE_CloseDevice; | ||||
|     impl->Deinitialize = PIPEWIRE_Deinitialize; | ||||
|     impl->GetDefaultAudioInfo = PIPEWIRE_GetDefaultAudioInfo; | ||||
|  | ||||
|     impl->HasCaptureSupport         = SDL_TRUE; | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|     impl->ProvidesOwnCallbackThread = SDL_TRUE; | ||||
|     impl->SupportsNonPow2Samples    = SDL_TRUE; | ||||
|     impl->SupportsNonPow2Samples = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE; | ||||
| } | ||||
|   | ||||
| @@ -33,13 +33,13 @@ | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|     struct pw_thread_loop *loop; | ||||
|     struct pw_stream      *stream; | ||||
|     struct pw_context     *context; | ||||
|     struct SDL_DataQueue  *buffer; | ||||
|     struct pw_stream *stream; | ||||
|     struct pw_context *context; | ||||
|     struct SDL_DataQueue *buffer; | ||||
|  | ||||
|     size_t input_buffer_packet_size; | ||||
|     Sint32 stride; /* Bytes-per-frame */ | ||||
|     int    stream_init_status; | ||||
|     int stream_init_status; | ||||
| }; | ||||
|  | ||||
| #endif /* SDL_pipewire_h_ */ | ||||
|   | ||||
| @@ -33,10 +33,9 @@ | ||||
| #include <ps2_audio_driver.h> | ||||
|  | ||||
| /* The tag name used by PS2 audio */ | ||||
| #define PS2AUDIO_DRIVER_NAME    "ps2" | ||||
| #define PS2AUDIO_DRIVER_NAME "ps2" | ||||
|  | ||||
| static int | ||||
| PS2AUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int PS2AUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     int i, mixlen; | ||||
|     struct audsrv_fmt_t format; | ||||
| @@ -48,21 +47,20 @@ PS2AUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     } | ||||
|     SDL_zerop(this->hidden); | ||||
|  | ||||
|  | ||||
|     /* These are the native supported audio PS2 configs  */ | ||||
|     switch (this->spec.freq) { | ||||
|         case 11025: | ||||
|         case 12000: | ||||
|         case 22050: | ||||
|         case 24000: | ||||
|         case 32000: | ||||
|         case 44100: | ||||
|         case 48000: | ||||
|             this->spec.freq = this->spec.freq; | ||||
|             break; | ||||
|         default:  | ||||
|             this->spec.freq = 48000; | ||||
|             break; | ||||
|     case 11025: | ||||
|     case 12000: | ||||
|     case 22050: | ||||
|     case 24000: | ||||
|     case 32000: | ||||
|     case 44100: | ||||
|     case 48000: | ||||
|         this->spec.freq = this->spec.freq; | ||||
|         break; | ||||
|     default: | ||||
|         this->spec.freq = 48000; | ||||
|         break; | ||||
|     } | ||||
|  | ||||
|     this->spec.samples = 512; | ||||
| @@ -71,8 +69,8 @@ PS2AUDIO_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     SDL_CalculateAudioSpec(&this->spec); | ||||
|  | ||||
|     format.bits     = this->spec.format == AUDIO_S8 ? 8 : 16; | ||||
|     format.freq     = this->spec.freq; | ||||
|     format.bits = this->spec.format == AUDIO_S8 ? 8 : 16; | ||||
|     format.freq = this->spec.freq; | ||||
|     format.channels = this->spec.channels; | ||||
|  | ||||
|     this->hidden->channel = audsrv_set_format(&format); | ||||
| @@ -91,7 +89,7 @@ PS2AUDIO_OpenDevice(_THIS, const char *devname) | ||||
|        be a multiple of 64 bytes.  Our sample count is already a multiple of | ||||
|        64, so spec->size should be a multiple of 64 as well. */ | ||||
|     mixlen = this->spec.size * NUM_BUFFERS; | ||||
|     this->hidden->rawbuf = (Uint8 *) memalign(64, mixlen); | ||||
|     this->hidden->rawbuf = (Uint8 *)memalign(64, mixlen); | ||||
|     if (this->hidden->rawbuf == NULL) { | ||||
|         return SDL_SetError("Couldn't allocate mixing buffer"); | ||||
|     } | ||||
| @@ -154,7 +152,7 @@ static void PS2AUDIO_Deinitialize(void) | ||||
|     deinit_audio_driver(); | ||||
| } | ||||
|  | ||||
| static SDL_bool PS2AUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool PS2AUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     if (init_audio_driver() < 0) { | ||||
|         return SDL_FALSE; | ||||
| @@ -169,7 +167,7 @@ static SDL_bool PS2AUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->ThreadInit = PS2AUDIO_ThreadInit; | ||||
|     impl->Deinitialize = PS2AUDIO_Deinitialize; | ||||
|     impl->OnlyHasDefaultOutputDevice = SDL_TRUE; | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap PS2AUDIO_bootstrap = { | ||||
|   | ||||
| @@ -26,20 +26,20 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| #define NUM_BUFFERS 2 | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|    /* The hardware output channel. */ | ||||
|    int     channel; | ||||
|    /* The raw allocated mixing buffer. */ | ||||
|    Uint8   *rawbuf; | ||||
|    /* Individual mixing buffers. */ | ||||
|    Uint8   *mixbufs[NUM_BUFFERS]; | ||||
|    /* Index of the next available mixing buffer. */ | ||||
|    int     next_buffer; | ||||
|     /* The hardware output channel. */ | ||||
|     int channel; | ||||
|     /* The raw allocated mixing buffer. */ | ||||
|     Uint8 *rawbuf; | ||||
|     /* Individual mixing buffers. */ | ||||
|     Uint8 *mixbufs[NUM_BUFFERS]; | ||||
|     /* Index of the next available mixing buffer. */ | ||||
|     int next_buffer; | ||||
| }; | ||||
|  | ||||
| #endif /* SDL_ps2audio_h_ */ | ||||
|   | ||||
| @@ -39,10 +39,9 @@ | ||||
| #include <pspthreadman.h> | ||||
|  | ||||
| /* The tag name used by PSP audio */ | ||||
| #define PSPAUDIO_DRIVER_NAME    "psp" | ||||
| #define PSPAUDIO_DRIVER_NAME "psp" | ||||
|  | ||||
| static int | ||||
| PSPAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int PSPAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     int format, mixlen, i; | ||||
|  | ||||
| @@ -64,7 +63,7 @@ PSPAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|         format = PSP_AUDIO_FORMAT_MONO; | ||||
|     } else { | ||||
|         format = PSP_AUDIO_FORMAT_STEREO; | ||||
|         this->spec.channels = 2;  /* we're forcing the hardware to stereo. */ | ||||
|         this->spec.channels = 2; /* we're forcing the hardware to stereo. */ | ||||
|     } | ||||
|  | ||||
|     /*  PSP has some limitations with the Audio. It fully supports 44.1KHz (Mono & Stereo), | ||||
| @@ -89,7 +88,7 @@ PSPAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|        be a multiple of 64 bytes.  Our sample count is already a multiple of | ||||
|        64, so spec->size should be a multiple of 64 as well. */ | ||||
|     mixlen = this->spec.size * NUM_BUFFERS; | ||||
|     this->hidden->rawbuf = (Uint8 *) memalign(64, mixlen); | ||||
|     this->hidden->rawbuf = (Uint8 *)memalign(64, mixlen); | ||||
|     if (this->hidden->rawbuf == NULL) { | ||||
|         return SDL_SetError("Couldn't allocate mixing buffer"); | ||||
|     } | ||||
| @@ -158,8 +157,7 @@ static void PSPAUDIO_ThreadInit(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| PSPAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool PSPAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     /* Set the function pointers */ | ||||
|     impl->OpenDevice = PSPAUDIO_OpenDevice; | ||||
| @@ -175,7 +173,7 @@ PSPAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|     impl->OnlyHasDefaultCaptureDevice = SDL_TRUE; | ||||
|     */ | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap PSPAUDIO_bootstrap = { | ||||
|   | ||||
| @@ -25,19 +25,20 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| #define NUM_BUFFERS 2 | ||||
|  | ||||
| struct SDL_PrivateAudioData { | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|     /* The hardware output channel. */ | ||||
|     int     channel; | ||||
|     int channel; | ||||
|     /* The raw allocated mixing buffer. */ | ||||
|     Uint8   *rawbuf; | ||||
|     Uint8 *rawbuf; | ||||
|     /* Individual mixing buffers. */ | ||||
|     Uint8   *mixbufs[NUM_BUFFERS]; | ||||
|     Uint8 *mixbufs[NUM_BUFFERS]; | ||||
|     /* Index of the next available mixing buffer. */ | ||||
|     int     next_buffer; | ||||
|     int next_buffer; | ||||
| }; | ||||
|  | ||||
| #endif /* SDL_pspaudio_h_ */ | ||||
|   | ||||
| @@ -49,81 +49,79 @@ | ||||
| /* should we include monitors in the device list? Set at SDL_Init time */ | ||||
| static SDL_bool include_monitors = SDL_FALSE; | ||||
|  | ||||
|  | ||||
| #if (PA_API_VERSION < 12) | ||||
| /** 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 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; | ||||
| } | ||||
| #endif /* pulseaudio <= 0.9.10 */ | ||||
|  | ||||
|  | ||||
| static const char *(*PULSEAUDIO_pa_get_library_version) (void); | ||||
| static pa_channel_map *(*PULSEAUDIO_pa_channel_map_init_auto) ( | ||||
| static const char *(*PULSEAUDIO_pa_get_library_version)(void); | ||||
| static pa_channel_map *(*PULSEAUDIO_pa_channel_map_init_auto)( | ||||
|     pa_channel_map *, unsigned, pa_channel_map_def_t); | ||||
| static const char * (*PULSEAUDIO_pa_strerror) (int); | ||||
| static pa_mainloop * (*PULSEAUDIO_pa_mainloop_new) (void); | ||||
| static pa_mainloop_api * (*PULSEAUDIO_pa_mainloop_get_api) (pa_mainloop *); | ||||
| static int (*PULSEAUDIO_pa_mainloop_iterate) (pa_mainloop *, int, int *); | ||||
| static int (*PULSEAUDIO_pa_mainloop_run) (pa_mainloop *, int *); | ||||
| static void (*PULSEAUDIO_pa_mainloop_quit) (pa_mainloop *, int); | ||||
| static void (*PULSEAUDIO_pa_mainloop_free) (pa_mainloop *); | ||||
| static const char *(*PULSEAUDIO_pa_strerror)(int); | ||||
| static pa_mainloop *(*PULSEAUDIO_pa_mainloop_new)(void); | ||||
| static pa_mainloop_api *(*PULSEAUDIO_pa_mainloop_get_api)(pa_mainloop *); | ||||
| static int (*PULSEAUDIO_pa_mainloop_iterate)(pa_mainloop *, int, int *); | ||||
| static int (*PULSEAUDIO_pa_mainloop_run)(pa_mainloop *, int *); | ||||
| static void (*PULSEAUDIO_pa_mainloop_quit)(pa_mainloop *, int); | ||||
| static void (*PULSEAUDIO_pa_mainloop_free)(pa_mainloop *); | ||||
|  | ||||
| static pa_operation_state_t (*PULSEAUDIO_pa_operation_get_state) ( | ||||
| static pa_operation_state_t (*PULSEAUDIO_pa_operation_get_state)( | ||||
|     const pa_operation *); | ||||
| static void (*PULSEAUDIO_pa_operation_cancel) (pa_operation *); | ||||
| static void (*PULSEAUDIO_pa_operation_unref) (pa_operation *); | ||||
| static void (*PULSEAUDIO_pa_operation_cancel)(pa_operation *); | ||||
| static void (*PULSEAUDIO_pa_operation_unref)(pa_operation *); | ||||
|  | ||||
| static pa_context * (*PULSEAUDIO_pa_context_new) (pa_mainloop_api *, | ||||
|     const char *); | ||||
| static int (*PULSEAUDIO_pa_context_connect) (pa_context *, const char *, | ||||
|     pa_context_flags_t, const pa_spawn_api *); | ||||
| static pa_operation * (*PULSEAUDIO_pa_context_get_sink_info_list) (pa_context *, pa_sink_info_cb_t, void *); | ||||
| static pa_operation * (*PULSEAUDIO_pa_context_get_source_info_list) (pa_context *, pa_source_info_cb_t, void *); | ||||
| static pa_operation * (*PULSEAUDIO_pa_context_get_sink_info_by_index) (pa_context *, uint32_t, pa_sink_info_cb_t, void *); | ||||
| static pa_operation * (*PULSEAUDIO_pa_context_get_source_info_by_index) (pa_context *, uint32_t, pa_source_info_cb_t, void *); | ||||
| static pa_context_state_t (*PULSEAUDIO_pa_context_get_state) (const pa_context *); | ||||
| static pa_operation * (*PULSEAUDIO_pa_context_subscribe) (pa_context *, pa_subscription_mask_t, pa_context_success_cb_t, void *); | ||||
| static void (*PULSEAUDIO_pa_context_set_subscribe_callback) (pa_context *, pa_context_subscribe_cb_t, void *); | ||||
| static void (*PULSEAUDIO_pa_context_disconnect) (pa_context *); | ||||
| static void (*PULSEAUDIO_pa_context_unref) (pa_context *); | ||||
| static pa_context *(*PULSEAUDIO_pa_context_new)(pa_mainloop_api *, | ||||
|                                                 const char *); | ||||
| static int (*PULSEAUDIO_pa_context_connect)(pa_context *, const char *, | ||||
|                                             pa_context_flags_t, const pa_spawn_api *); | ||||
| static pa_operation *(*PULSEAUDIO_pa_context_get_sink_info_list)(pa_context *, pa_sink_info_cb_t, void *); | ||||
| static pa_operation *(*PULSEAUDIO_pa_context_get_source_info_list)(pa_context *, pa_source_info_cb_t, void *); | ||||
| static pa_operation *(*PULSEAUDIO_pa_context_get_sink_info_by_index)(pa_context *, uint32_t, pa_sink_info_cb_t, void *); | ||||
| static pa_operation *(*PULSEAUDIO_pa_context_get_source_info_by_index)(pa_context *, uint32_t, pa_source_info_cb_t, void *); | ||||
| static pa_context_state_t (*PULSEAUDIO_pa_context_get_state)(const pa_context *); | ||||
| static pa_operation *(*PULSEAUDIO_pa_context_subscribe)(pa_context *, pa_subscription_mask_t, pa_context_success_cb_t, void *); | ||||
| static void (*PULSEAUDIO_pa_context_set_subscribe_callback)(pa_context *, pa_context_subscribe_cb_t, void *); | ||||
| static void (*PULSEAUDIO_pa_context_disconnect)(pa_context *); | ||||
| static void (*PULSEAUDIO_pa_context_unref)(pa_context *); | ||||
|  | ||||
| static pa_stream * (*PULSEAUDIO_pa_stream_new) (pa_context *, const char *, | ||||
|     const pa_sample_spec *, const pa_channel_map *); | ||||
| static int (*PULSEAUDIO_pa_stream_connect_playback) (pa_stream *, const char *, | ||||
|     const pa_buffer_attr *, pa_stream_flags_t, const pa_cvolume *, pa_stream *); | ||||
| static int (*PULSEAUDIO_pa_stream_connect_record) (pa_stream *, const char *, | ||||
|     const pa_buffer_attr *, pa_stream_flags_t); | ||||
| static pa_stream_state_t (*PULSEAUDIO_pa_stream_get_state) (const pa_stream *); | ||||
| static size_t (*PULSEAUDIO_pa_stream_writable_size) (const pa_stream *); | ||||
| static size_t (*PULSEAUDIO_pa_stream_readable_size) (const pa_stream *); | ||||
| static int (*PULSEAUDIO_pa_stream_write) (pa_stream *, const void *, size_t, | ||||
|     pa_free_cb_t, int64_t, pa_seek_mode_t); | ||||
| static pa_operation * (*PULSEAUDIO_pa_stream_drain) (pa_stream *, | ||||
|     pa_stream_success_cb_t, void *); | ||||
| static int (*PULSEAUDIO_pa_stream_peek) (pa_stream *, const void **, size_t *); | ||||
| static int (*PULSEAUDIO_pa_stream_drop) (pa_stream *); | ||||
| static pa_operation * (*PULSEAUDIO_pa_stream_flush) (pa_stream *, | ||||
|     pa_stream_success_cb_t, void *); | ||||
| static int (*PULSEAUDIO_pa_stream_disconnect) (pa_stream *); | ||||
| static void (*PULSEAUDIO_pa_stream_unref) (pa_stream *); | ||||
| static pa_stream *(*PULSEAUDIO_pa_stream_new)(pa_context *, const char *, | ||||
|                                               const pa_sample_spec *, const pa_channel_map *); | ||||
| static int (*PULSEAUDIO_pa_stream_connect_playback)(pa_stream *, const char *, | ||||
|                                                     const pa_buffer_attr *, pa_stream_flags_t, const pa_cvolume *, pa_stream *); | ||||
| static int (*PULSEAUDIO_pa_stream_connect_record)(pa_stream *, const char *, | ||||
|                                                   const pa_buffer_attr *, pa_stream_flags_t); | ||||
| static pa_stream_state_t (*PULSEAUDIO_pa_stream_get_state)(const pa_stream *); | ||||
| static size_t (*PULSEAUDIO_pa_stream_writable_size)(const pa_stream *); | ||||
| static size_t (*PULSEAUDIO_pa_stream_readable_size)(const pa_stream *); | ||||
| static int (*PULSEAUDIO_pa_stream_write)(pa_stream *, const void *, size_t, | ||||
|                                          pa_free_cb_t, int64_t, pa_seek_mode_t); | ||||
| static pa_operation *(*PULSEAUDIO_pa_stream_drain)(pa_stream *, | ||||
|                                                    pa_stream_success_cb_t, void *); | ||||
| static int (*PULSEAUDIO_pa_stream_peek)(pa_stream *, const void **, size_t *); | ||||
| static int (*PULSEAUDIO_pa_stream_drop)(pa_stream *); | ||||
| static pa_operation *(*PULSEAUDIO_pa_stream_flush)(pa_stream *, | ||||
|                                                    pa_stream_success_cb_t, void *); | ||||
| static int (*PULSEAUDIO_pa_stream_disconnect)(pa_stream *); | ||||
| static void (*PULSEAUDIO_pa_stream_unref)(pa_stream *); | ||||
| static void (*PULSEAUDIO_pa_stream_set_write_callback)(pa_stream *, pa_stream_request_cb_t, void *); | ||||
| static pa_operation * (*PULSEAUDIO_pa_context_get_server_info)(pa_context *, pa_server_info_cb_t, void *); | ||||
| static pa_operation *(*PULSEAUDIO_pa_context_get_server_info)(pa_context *, pa_server_info_cb_t, void *); | ||||
|  | ||||
| static int load_pulseaudio_syms(void); | ||||
|  | ||||
|  | ||||
| #ifdef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC | ||||
|  | ||||
| static const char *pulseaudio_library = SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC; | ||||
| static void *pulseaudio_handle = NULL; | ||||
|  | ||||
| static int | ||||
| load_pulseaudio_sym(const char *fn, void **addr) | ||||
| static int load_pulseaudio_sym(const char *fn, void **addr) | ||||
| { | ||||
|     *addr = SDL_LoadFunction(pulseaudio_handle, fn); | ||||
|     if (*addr == NULL) { | ||||
| @@ -135,11 +133,11 @@ load_pulseaudio_sym(const char *fn, void **addr) | ||||
| } | ||||
|  | ||||
| /* cast funcs to char* first, to please GCC's strict aliasing rules. */ | ||||
| #define SDL_PULSEAUDIO_SYM(x) \ | ||||
|     if (!load_pulseaudio_sym(#x, (void **) (char *) &PULSEAUDIO_##x)) return -1 | ||||
| #define SDL_PULSEAUDIO_SYM(x)                                       \ | ||||
|     if (!load_pulseaudio_sym(#x, (void **)(char *)&PULSEAUDIO_##x)) \ | ||||
|     return -1 | ||||
|  | ||||
| static void | ||||
| UnloadPulseAudioLibrary(void) | ||||
| static void UnloadPulseAudioLibrary(void) | ||||
| { | ||||
|     if (pulseaudio_handle != NULL) { | ||||
|         SDL_UnloadObject(pulseaudio_handle); | ||||
| @@ -147,8 +145,7 @@ UnloadPulseAudioLibrary(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| LoadPulseAudioLibrary(void) | ||||
| static int LoadPulseAudioLibrary(void) | ||||
| { | ||||
|     int retval = 0; | ||||
|     if (pulseaudio_handle == NULL) { | ||||
| @@ -170,13 +167,11 @@ LoadPulseAudioLibrary(void) | ||||
|  | ||||
| #define SDL_PULSEAUDIO_SYM(x) PULSEAUDIO_##x = x | ||||
|  | ||||
| static void | ||||
| UnloadPulseAudioLibrary(void) | ||||
| static void UnloadPulseAudioLibrary(void) | ||||
| { | ||||
| } | ||||
|  | ||||
| static int | ||||
| LoadPulseAudioLibrary(void) | ||||
| static int LoadPulseAudioLibrary(void) | ||||
| { | ||||
|     load_pulseaudio_syms(); | ||||
|     return 0; | ||||
| @@ -184,9 +179,7 @@ LoadPulseAudioLibrary(void) | ||||
|  | ||||
| #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_mainloop_new); | ||||
| @@ -229,15 +222,13 @@ load_pulseaudio_syms(void) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static SDL_INLINE int | ||||
| squashVersion(const int major, const int minor, const int patch) | ||||
| static SDL_INLINE int squashVersion(const int major, const int minor, const int patch) | ||||
| { | ||||
|     return ((major & 0xFF) << 16) | ((minor & 0xFF) << 8) | (patch & 0xFF); | ||||
| } | ||||
|  | ||||
| /* Workaround for older pulse: pa_context_new() must have non-NULL appname */ | ||||
| static const char * | ||||
| getAppName(void) | ||||
| static const char *getAppName(void) | ||||
| { | ||||
|     const char *retval = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_APP_NAME); | ||||
|     if (retval && *retval) { | ||||
| @@ -248,12 +239,12 @@ getAppName(void) | ||||
|         return retval; | ||||
|     } else { | ||||
|         const char *verstr = PULSEAUDIO_pa_get_library_version(); | ||||
|         retval = "SDL Application";  /* the "oh well" default. */ | ||||
|         retval = "SDL Application"; /* the "oh well" default. */ | ||||
|         if (verstr != NULL) { | ||||
|             int maj, min, patch; | ||||
|             if (SDL_sscanf(verstr, "%d.%d.%d", &maj, &min, &patch) == 3) { | ||||
|                 if (squashVersion(maj, min, patch) >= squashVersion(0, 9, 15)) { | ||||
|                     retval = NULL;  /* 0.9.15+ handles NULL correctly. */ | ||||
|                     retval = NULL; /* 0.9.15+ handles NULL correctly. */ | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -261,8 +252,7 @@ getAppName(void) | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| static void | ||||
| WaitForPulseOperation(pa_mainloop *mainloop, pa_operation *o) | ||||
| static void 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. */ | ||||
|     if (mainloop && o) { | ||||
| @@ -274,8 +264,7 @@ WaitForPulseOperation(pa_mainloop *mainloop, pa_operation *o) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| DisconnectFromPulseServer(pa_mainloop *mainloop, pa_context *context) | ||||
| static void DisconnectFromPulseServer(pa_mainloop *mainloop, pa_context *context) | ||||
| { | ||||
|     if (context) { | ||||
|         PULSEAUDIO_pa_context_disconnect(context); | ||||
| @@ -286,8 +275,7 @@ DisconnectFromPulseServer(pa_mainloop *mainloop, pa_context *context) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| ConnectToPulseServer_Internal(pa_mainloop **_mainloop, pa_context **_context) | ||||
| static int ConnectToPulseServer_Internal(pa_mainloop **_mainloop, pa_context **_context) | ||||
| { | ||||
|     pa_mainloop *mainloop = NULL; | ||||
|     pa_context *context = NULL; | ||||
| @@ -303,7 +291,7 @@ ConnectToPulseServer_Internal(pa_mainloop **_mainloop, pa_context **_context) | ||||
|     } | ||||
|  | ||||
|     mainloop_api = PULSEAUDIO_pa_mainloop_get_api(mainloop); | ||||
|     SDL_assert(mainloop_api);  /* this never fails, right? */ | ||||
|     SDL_assert(mainloop_api); /* this never fails, right? */ | ||||
|  | ||||
|     context = PULSEAUDIO_pa_context_new(mainloop_api, getAppName()); | ||||
|     if (context == NULL) { | ||||
| @@ -335,11 +323,10 @@ ConnectToPulseServer_Internal(pa_mainloop **_mainloop, pa_context **_context) | ||||
|     *_context = context; | ||||
|     *_mainloop = mainloop; | ||||
|  | ||||
|     return 0;  /* connected and ready! */ | ||||
|     return 0; /* connected and ready! */ | ||||
| } | ||||
|  | ||||
| static int | ||||
| ConnectToPulseServer(pa_mainloop **_mainloop, pa_context **_context) | ||||
| static int ConnectToPulseServer(pa_mainloop **_mainloop, pa_context **_context) | ||||
| { | ||||
|     const int retval = ConnectToPulseServer_Internal(_mainloop, _context); | ||||
|     if (retval < 0) { | ||||
| @@ -348,23 +335,20 @@ ConnectToPulseServer(pa_mainloop **_mainloop, pa_context **_context) | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* This function waits until it is possible to write a full sound buffer */ | ||||
| static void | ||||
| PULSEAUDIO_WaitDevice(_THIS) | ||||
| static void PULSEAUDIO_WaitDevice(_THIS) | ||||
| { | ||||
|     /* this is a no-op; we wait in PULSEAUDIO_PlayDevice now. */ | ||||
| } | ||||
|  | ||||
| static void WriteCallback(pa_stream *p, size_t nbytes, void *userdata) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = (struct SDL_PrivateAudioData *) userdata; | ||||
|     struct SDL_PrivateAudioData *h = (struct SDL_PrivateAudioData *)userdata; | ||||
|     /*printf("PULSEAUDIO WRITE CALLBACK! nbytes=%u\n", (unsigned int) nbytes);*/ | ||||
|     h->bytes_requested += nbytes; | ||||
| } | ||||
|  | ||||
| static void | ||||
| PULSEAUDIO_PlayDevice(_THIS) | ||||
| static void PULSEAUDIO_PlayDevice(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = this->hidden; | ||||
|     int available = h->mixlen; | ||||
| @@ -399,15 +383,12 @@ PULSEAUDIO_PlayDevice(_THIS) | ||||
|     /*printf("PULSEAUDIO PLAYDEVICE END! written=%d\n", written);*/ | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| PULSEAUDIO_GetDeviceBuf(_THIS) | ||||
| static Uint8 *PULSEAUDIO_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     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; | ||||
|     const void *data = NULL; | ||||
| @@ -422,40 +403,40 @@ PULSEAUDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|             h->capturelen -= cpy; | ||||
|             if (h->capturelen == 0) { | ||||
|                 h->capturebuf = NULL; | ||||
|                 PULSEAUDIO_pa_stream_drop(h->stream);  /* done with this fragment. */ | ||||
|                 PULSEAUDIO_pa_stream_drop(h->stream); /* done with this fragment. */ | ||||
|             } | ||||
|             return cpy;  /* new data, return it. */ | ||||
|             return cpy; /* new data, return it. */ | ||||
|         } | ||||
|  | ||||
|         if (PULSEAUDIO_pa_context_get_state(h->context) != PA_CONTEXT_READY || | ||||
|             PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY || | ||||
|             PULSEAUDIO_pa_mainloop_iterate(h->mainloop, 1, NULL) < 0) { | ||||
|             SDL_OpenedAudioDeviceDisconnected(this); | ||||
|             return -1;  /* uhoh, pulse failed! */ | ||||
|             return -1; /* uhoh, pulse failed! */ | ||||
|         } | ||||
|  | ||||
|         if (PULSEAUDIO_pa_stream_readable_size(h->stream) == 0) { | ||||
|             continue;  /* no data available yet. */ | ||||
|             continue; /* no data available yet. */ | ||||
|         } | ||||
|  | ||||
|         /* a new fragment is available! */ | ||||
|         PULSEAUDIO_pa_stream_peek(h->stream, &data, &nbytes); | ||||
|         SDL_assert(nbytes > 0); | ||||
|         if (data == NULL) {  /* NULL==buffer had a hole. Ignore that. */ | ||||
|             PULSEAUDIO_pa_stream_drop(h->stream);  /* drop this fragment. */ | ||||
|         /* If data == NULL, then the buffer had a hole, ignore that */ | ||||
|         if (data == NULL) { | ||||
|             PULSEAUDIO_pa_stream_drop(h->stream); /* drop this fragment. */ | ||||
|         } else { | ||||
|             /* store this fragment's data, start feeding it to SDL. */ | ||||
|             /*printf("PULSEAUDIO: captured %d new bytes\n", (int) nbytes);*/ | ||||
|             h->capturebuf = (const Uint8 *) data; | ||||
|             h->capturebuf = (const Uint8 *)data; | ||||
|             h->capturelen = nbytes; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return -1;  /* not enabled? */ | ||||
|     return -1; /* not enabled? */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| PULSEAUDIO_FlushCapture(_THIS) | ||||
| static void PULSEAUDIO_FlushCapture(_THIS) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = this->hidden; | ||||
|     const void *data = NULL; | ||||
| @@ -472,21 +453,20 @@ PULSEAUDIO_FlushCapture(_THIS) | ||||
|             PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY || | ||||
|             PULSEAUDIO_pa_mainloop_iterate(h->mainloop, 1, NULL) < 0) { | ||||
|             SDL_OpenedAudioDeviceDisconnected(this); | ||||
|             return;  /* uhoh, pulse failed! */ | ||||
|             return; /* uhoh, pulse failed! */ | ||||
|         } | ||||
|  | ||||
|         if (PULSEAUDIO_pa_stream_readable_size(h->stream) == 0) { | ||||
|             break;  /* no data available, so we're done. */ | ||||
|             break; /* no data available, so we're done. */ | ||||
|         } | ||||
|  | ||||
|         /* a new fragment is available! Just dump it. */ | ||||
|         PULSEAUDIO_pa_stream_peek(h->stream, &data, &nbytes); | ||||
|         PULSEAUDIO_pa_stream_drop(h->stream);  /* drop this fragment. */ | ||||
|         PULSEAUDIO_pa_stream_drop(h->stream); /* drop this fragment. */ | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| PULSEAUDIO_CloseDevice(_THIS) | ||||
| static void PULSEAUDIO_CloseDevice(_THIS) | ||||
| { | ||||
|     if (this->hidden->stream) { | ||||
|         if (this->hidden->capturebuf != NULL) { | ||||
| @@ -502,48 +482,44 @@ PULSEAUDIO_CloseDevice(_THIS) | ||||
|     SDL_free(this->hidden); | ||||
| } | ||||
|  | ||||
| static void | ||||
| SinkDeviceNameCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data) | ||||
| static void SinkDeviceNameCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data) | ||||
| { | ||||
|     if (i) { | ||||
|         char **devname = (char **) data; | ||||
|         char **devname = (char **)data; | ||||
|         *devname = SDL_strdup(i->name); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| SourceDeviceNameCallback(pa_context *c, const pa_source_info *i, int is_last, void *data) | ||||
| static void SourceDeviceNameCallback(pa_context *c, const pa_source_info *i, int is_last, void *data) | ||||
| { | ||||
|     if (i) { | ||||
|         char **devname = (char **) data; | ||||
|         char **devname = (char **)data; | ||||
|         *devname = SDL_strdup(i->name); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| FindDeviceName(struct SDL_PrivateAudioData *h, const SDL_bool iscapture, void *handle) | ||||
| static SDL_bool 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; | ||||
|  | ||||
|     if (handle == NULL) {  /* NULL == default device. */ | ||||
|     if (handle == NULL) { /* NULL == default device. */ | ||||
|         return SDL_TRUE; | ||||
|     } | ||||
|  | ||||
|     if (iscapture) { | ||||
|         WaitForPulseOperation(h->mainloop, | ||||
|             PULSEAUDIO_pa_context_get_source_info_by_index(h->context, idx, | ||||
|                 SourceDeviceNameCallback, &h->device_name)); | ||||
|                               PULSEAUDIO_pa_context_get_source_info_by_index(h->context, idx, | ||||
|                                                                              SourceDeviceNameCallback, &h->device_name)); | ||||
|     } else { | ||||
|         WaitForPulseOperation(h->mainloop, | ||||
|             PULSEAUDIO_pa_context_get_sink_info_by_index(h->context, idx, | ||||
|                 SinkDeviceNameCallback, &h->device_name)); | ||||
|                               PULSEAUDIO_pa_context_get_sink_info_by_index(h->context, idx, | ||||
|                                                                            SinkDeviceNameCallback, &h->device_name)); | ||||
|     } | ||||
|  | ||||
|     return h->device_name != NULL; | ||||
| } | ||||
|  | ||||
| static int | ||||
| PULSEAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int PULSEAUDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     struct SDL_PrivateAudioData *h = NULL; | ||||
|     SDL_AudioFormat test_format; | ||||
| @@ -608,7 +584,7 @@ PULSEAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     /* Allocate mixing buffer */ | ||||
|     if (!iscapture) { | ||||
|         h->mixlen = this->spec.size; | ||||
|         h->mixbuf = (Uint8 *) SDL_malloc(h->mixlen); | ||||
|         h->mixbuf = (Uint8 *)SDL_malloc(h->mixlen); | ||||
|         if (h->mixbuf == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
| @@ -644,9 +620,9 @@ PULSEAUDIO_OpenDevice(_THIS, const char *devname) | ||||
|     h->stream = PULSEAUDIO_pa_stream_new( | ||||
|         h->context, | ||||
|         (name && *name) ? name : "Audio Stream", /* stream description */ | ||||
|         &paspec,    /* sample format spec */ | ||||
|         &pacmap     /* channel map */ | ||||
|         ); | ||||
|         &paspec,                                 /* sample format spec */ | ||||
|         &pacmap                                  /* channel map */ | ||||
|     ); | ||||
|  | ||||
|     if (h->stream == NULL) { | ||||
|         return SDL_SetError("Could not set up PulseAudio stream"); | ||||
| @@ -696,8 +672,7 @@ static char *default_source_name = NULL; | ||||
|  | ||||
| /* device handles are device index + 1, cast to void*, so we never pass a NULL. */ | ||||
|  | ||||
| static SDL_AudioFormat | ||||
| PulseFormatToSDLFormat(pa_sample_format_t format) | ||||
| static SDL_AudioFormat PulseFormatToSDLFormat(pa_sample_format_t format) | ||||
| { | ||||
|     switch (format) { | ||||
|     case PA_SAMPLE_U8: | ||||
| @@ -720,11 +695,10 @@ PulseFormatToSDLFormat(pa_sample_format_t format) | ||||
| } | ||||
|  | ||||
| /* This is called when PulseAudio adds an output ("sink") device. */ | ||||
| static void | ||||
| SinkInfoCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data) | ||||
| static void SinkInfoCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data) | ||||
| { | ||||
|     SDL_AudioSpec spec; | ||||
|     SDL_bool add = (SDL_bool) ((intptr_t) data); | ||||
|     SDL_bool add = (SDL_bool)((intptr_t)data); | ||||
|     if (i) { | ||||
|         spec.freq = i->sample_spec.rate; | ||||
|         spec.channels = i->sample_spec.channels; | ||||
| @@ -736,7 +710,7 @@ SinkInfoCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data) | ||||
|         spec.userdata = NULL; | ||||
|  | ||||
|         if (add) { | ||||
|             SDL_AddAudioDevice(SDL_FALSE, i->description, &spec, (void *) ((intptr_t) i->index+1)); | ||||
|             SDL_AddAudioDevice(SDL_FALSE, i->description, &spec, (void *)((intptr_t)i->index + 1)); | ||||
|         } | ||||
|  | ||||
|         if (default_sink_path != NULL && SDL_strcmp(i->name, default_sink_path) == 0) { | ||||
| @@ -749,11 +723,10 @@ SinkInfoCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data) | ||||
| } | ||||
|  | ||||
| /* This is called when PulseAudio adds a capture ("source") device. */ | ||||
| static void | ||||
| SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *data) | ||||
| static void SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *data) | ||||
| { | ||||
|     SDL_AudioSpec spec; | ||||
|     SDL_bool add = (SDL_bool) ((intptr_t) data); | ||||
|     SDL_bool add = (SDL_bool)((intptr_t)data); | ||||
|     if (i) { | ||||
|         /* Maybe skip "monitor" sources. These are just output from other sinks. */ | ||||
|         if (include_monitors || (i->monitor_of_sink == PA_INVALID_INDEX)) { | ||||
| @@ -767,7 +740,7 @@ SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *da | ||||
|             spec.userdata = NULL; | ||||
|  | ||||
|             if (add) { | ||||
|                 SDL_AddAudioDevice(SDL_TRUE, i->description, &spec, (void *) ((intptr_t) i->index+1)); | ||||
|                 SDL_AddAudioDevice(SDL_TRUE, i->description, &spec, (void *)((intptr_t)i->index + 1)); | ||||
|             } | ||||
|  | ||||
|             if (default_source_path != NULL && SDL_strcmp(i->name, default_source_path) == 0) { | ||||
| @@ -780,8 +753,7 @@ SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *da | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| ServerInfoCallback(pa_context *c, const pa_server_info *i, void *data) | ||||
| static void ServerInfoCallback(pa_context *c, const pa_server_info *i, void *data) | ||||
| { | ||||
|     if (default_sink_path != NULL) { | ||||
|         SDL_free(default_sink_path); | ||||
| @@ -794,14 +766,13 @@ ServerInfoCallback(pa_context *c, const pa_server_info *i, void *data) | ||||
| } | ||||
|  | ||||
| /* This is called when PulseAudio has a device connected/removed/changed. */ | ||||
| static void | ||||
| HotplugCallback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *data) | ||||
| static void HotplugCallback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *data) | ||||
| { | ||||
|     const SDL_bool added = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW); | ||||
|     const SDL_bool removed = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE); | ||||
|     const SDL_bool changed = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE); | ||||
|  | ||||
|     if (added || removed || changed) {  /* we only care about add/remove events. */ | ||||
|     if (added || removed || changed) { /* we only care about add/remove events. */ | ||||
|         const SDL_bool sink = ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK); | ||||
|         const SDL_bool source = ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE); | ||||
|  | ||||
| @@ -810,45 +781,42 @@ HotplugCallback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, voi | ||||
|             if (changed) { | ||||
|                 PULSEAUDIO_pa_context_get_server_info(hotplug_context, ServerInfoCallback, NULL); | ||||
|             } | ||||
|             PULSEAUDIO_pa_context_get_sink_info_by_index(hotplug_context, idx, SinkInfoCallback, (void*) ((intptr_t) added)); | ||||
|             PULSEAUDIO_pa_context_get_sink_info_by_index(hotplug_context, idx, SinkInfoCallback, (void *)((intptr_t)added)); | ||||
|         } else if ((added || changed) && source) { | ||||
|             if (changed) { | ||||
|                 PULSEAUDIO_pa_context_get_server_info(hotplug_context, ServerInfoCallback, NULL); | ||||
|             } | ||||
|             PULSEAUDIO_pa_context_get_source_info_by_index(hotplug_context, idx, SourceInfoCallback, (void*) ((intptr_t) added)); | ||||
|             PULSEAUDIO_pa_context_get_source_info_by_index(hotplug_context, idx, SourceInfoCallback, (void *)((intptr_t)added)); | ||||
|         } else if (removed && (sink || source)) { | ||||
|             /* removes we can handle just with the device index. */ | ||||
|             SDL_RemoveAudioDevice(source != 0, (void *) ((intptr_t) idx+1)); | ||||
|             SDL_RemoveAudioDevice(source != 0, (void *)((intptr_t)idx + 1)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* this runs as a thread while the Pulse target is initialized to catch hotplug events. */ | ||||
| static int SDLCALL | ||||
| HotplugThread(void *data) | ||||
| static int SDLCALL HotplugThread(void *data) | ||||
| { | ||||
|     pa_operation *o; | ||||
|     SDL_SetThreadPriority(SDL_THREAD_PRIORITY_LOW); | ||||
|     PULSEAUDIO_pa_context_set_subscribe_callback(hotplug_context, HotplugCallback, NULL); | ||||
|     o = PULSEAUDIO_pa_context_subscribe(hotplug_context, PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE, NULL, NULL); | ||||
|     PULSEAUDIO_pa_operation_unref(o);  /* don't wait for it, just do our thing. */ | ||||
|     PULSEAUDIO_pa_operation_unref(o); /* don't wait for it, just do our thing. */ | ||||
|     PULSEAUDIO_pa_mainloop_run(hotplug_mainloop, NULL); | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| PULSEAUDIO_DetectDevices() | ||||
| static void PULSEAUDIO_DetectDevices() | ||||
| { | ||||
|     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_source_info_list(hotplug_context, SourceInfoCallback, (void*) ((intptr_t) SDL_TRUE))); | ||||
|     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_source_info_list(hotplug_context, SourceInfoCallback, (void *)((intptr_t)SDL_TRUE))); | ||||
|  | ||||
|     /* ok, we have a sane list, let's set up hotplug notifications now... */ | ||||
|     hotplug_thread = SDL_CreateThreadInternal(HotplugThread, "PulseHotplug", 256 * 1024, NULL); | ||||
| } | ||||
|  | ||||
| static int | ||||
| PULSEAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| static int PULSEAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| { | ||||
|     int i; | ||||
|     int numdevices; | ||||
| @@ -879,8 +847,7 @@ PULSEAUDIO_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
|     return SDL_SetError("Could not find default PulseAudio device"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| PULSEAUDIO_Deinitialize(void) | ||||
| static void PULSEAUDIO_Deinitialize(void) | ||||
| { | ||||
|     if (hotplug_thread) { | ||||
|         PULSEAUDIO_pa_mainloop_quit(hotplug_mainloop, 0); | ||||
| @@ -912,8 +879,7 @@ PULSEAUDIO_Deinitialize(void) | ||||
|     UnloadPulseAudioLibrary(); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| PULSEAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool PULSEAUDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     if (LoadPulseAudioLibrary() < 0) { | ||||
|         return SDL_FALSE; | ||||
| @@ -941,7 +907,7 @@ PULSEAUDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|     impl->SupportsNonPow2Samples = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap PULSEAUDIO_bootstrap = { | ||||
|   | ||||
| @@ -43,7 +43,7 @@ struct SDL_PrivateAudioData | ||||
|     Uint8 *mixbuf; | ||||
|     int mixlen; | ||||
|  | ||||
|     int bytes_requested;  /* bytes of data the hardware wants _now_. */ | ||||
|     int bytes_requested; /* bytes of data the hardware wants _now_. */ | ||||
|  | ||||
|     const Uint8 *capturebuf; | ||||
|     int capturelen; | ||||
|   | ||||
| @@ -52,7 +52,7 @@ | ||||
| #define SIO_DEVANY "default" | ||||
| #endif | ||||
|  | ||||
| static struct sio_hdl * (*SNDIO_sio_open)(const char *, unsigned int, int); | ||||
| static struct sio_hdl *(*SNDIO_sio_open)(const char *, unsigned int, int); | ||||
| static void (*SNDIO_sio_close)(struct sio_hdl *); | ||||
| static int (*SNDIO_sio_setpar)(struct sio_hdl *, struct sio_par *); | ||||
| static int (*SNDIO_sio_getpar)(struct sio_hdl *, struct sio_par *); | ||||
| @@ -70,8 +70,7 @@ static void (*SNDIO_sio_initpar)(struct sio_par *); | ||||
| static const char *sndio_library = SDL_AUDIO_DRIVER_SNDIO_DYNAMIC; | ||||
| static void *sndio_handle = NULL; | ||||
|  | ||||
| static int | ||||
| load_sndio_sym(const char *fn, void **addr) | ||||
| static int load_sndio_sym(const char *fn, void **addr) | ||||
| { | ||||
|     *addr = SDL_LoadFunction(sndio_handle, fn); | ||||
|     if (*addr == NULL) { | ||||
| @@ -83,14 +82,14 @@ load_sndio_sym(const char *fn, void **addr) | ||||
| } | ||||
|  | ||||
| /* cast funcs to char* first, to please GCC's strict aliasing rules. */ | ||||
| #define SDL_SNDIO_SYM(x) \ | ||||
|     if (!load_sndio_sym(#x, (void **) (char *) &SNDIO_##x)) return -1 | ||||
| #define SDL_SNDIO_SYM(x)                                  \ | ||||
|     if (!load_sndio_sym(#x, (void **)(char *)&SNDIO_##x)) \ | ||||
|     return -1 | ||||
| #else | ||||
| #define SDL_SNDIO_SYM(x) SNDIO_##x = x | ||||
| #endif | ||||
|  | ||||
| static int | ||||
| load_sndio_syms(void) | ||||
| static int load_sndio_syms(void) | ||||
| { | ||||
|     SDL_SNDIO_SYM(sio_open); | ||||
|     SDL_SNDIO_SYM(sio_close); | ||||
| @@ -112,8 +111,7 @@ load_sndio_syms(void) | ||||
|  | ||||
| #ifdef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC | ||||
|  | ||||
| static void | ||||
| UnloadSNDIOLibrary(void) | ||||
| static void UnloadSNDIOLibrary(void) | ||||
| { | ||||
|     if (sndio_handle != NULL) { | ||||
|         SDL_UnloadObject(sndio_handle); | ||||
| @@ -121,8 +119,7 @@ UnloadSNDIOLibrary(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| LoadSNDIOLibrary(void) | ||||
| static int LoadSNDIOLibrary(void) | ||||
| { | ||||
|     int retval = 0; | ||||
|     if (sndio_handle == NULL) { | ||||
| @@ -142,13 +139,11 @@ LoadSNDIOLibrary(void) | ||||
|  | ||||
| #else | ||||
|  | ||||
| static void | ||||
| UnloadSNDIOLibrary(void) | ||||
| static void UnloadSNDIOLibrary(void) | ||||
| { | ||||
| } | ||||
|  | ||||
| static int | ||||
| LoadSNDIOLibrary(void) | ||||
| static int LoadSNDIOLibrary(void) | ||||
| { | ||||
|     load_sndio_syms(); | ||||
|     return 0; | ||||
| @@ -156,24 +151,19 @@ LoadSNDIOLibrary(void) | ||||
|  | ||||
| #endif /* SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */ | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| static void | ||||
| SNDIO_WaitDevice(_THIS) | ||||
| static void SNDIO_WaitDevice(_THIS) | ||||
| { | ||||
|     /* no-op; SNDIO_sio_write() blocks if necessary. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| SNDIO_PlayDevice(_THIS) | ||||
| static void SNDIO_PlayDevice(_THIS) | ||||
| { | ||||
|     const int written = SNDIO_sio_write(this->hidden->dev, | ||||
|                                         this->hidden->mixbuf, | ||||
|                                         this->hidden->mixlen); | ||||
|  | ||||
|     /* If we couldn't write, assume fatal error for now */ | ||||
|     if ( written == 0 ) { | ||||
|     if (written == 0) { | ||||
|         SDL_OpenedAudioDeviceDisconnected(this); | ||||
|     } | ||||
| #ifdef DEBUG_AUDIO | ||||
| @@ -181,8 +171,7 @@ SNDIO_PlayDevice(_THIS) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static int | ||||
| SNDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int SNDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     size_t r; | ||||
|     int revents; | ||||
| @@ -191,8 +180,7 @@ SNDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|     /* Emulate a blocking read */ | ||||
|     r = SNDIO_sio_read(this->hidden->dev, buffer, buflen); | ||||
|     while (r == 0 && !SNDIO_sio_eof(this->hidden->dev)) { | ||||
|         if ((nfds = SNDIO_sio_pollfd(this->hidden->dev, this->hidden->pfd, POLLIN)) <= 0 | ||||
|             || poll(this->hidden->pfd, nfds, INFTIM) < 0) { | ||||
|         if ((nfds = SNDIO_sio_pollfd(this->hidden->dev, this->hidden->pfd, POLLIN)) <= 0 || poll(this->hidden->pfd, nfds, INFTIM) < 0) { | ||||
|             return -1; | ||||
|         } | ||||
|         revents = SNDIO_sio_revents(this->hidden->dev, this->hidden->pfd); | ||||
| @@ -203,11 +191,10 @@ SNDIO_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|     return (int) r; | ||||
|     return (int)r; | ||||
| } | ||||
|  | ||||
| static void | ||||
| SNDIO_FlushCapture(_THIS) | ||||
| static void SNDIO_FlushCapture(_THIS) | ||||
| { | ||||
|     char buf[512]; | ||||
|  | ||||
| @@ -216,19 +203,17 @@ SNDIO_FlushCapture(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| SNDIO_GetDeviceBuf(_THIS) | ||||
| static Uint8 *SNDIO_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     return this->hidden->mixbuf; | ||||
| } | ||||
|  | ||||
| static void | ||||
| SNDIO_CloseDevice(_THIS) | ||||
| static void SNDIO_CloseDevice(_THIS) | ||||
| { | ||||
|     if ( this->hidden->pfd != NULL ) { | ||||
|     if (this->hidden->pfd != NULL) { | ||||
|         SDL_free(this->hidden->pfd); | ||||
|     } | ||||
|     if ( this->hidden->dev != NULL ) { | ||||
|     if (this->hidden->dev != NULL) { | ||||
|         SNDIO_sio_stop(this->hidden->dev); | ||||
|         SNDIO_sio_close(this->hidden->dev); | ||||
|     } | ||||
| @@ -236,8 +221,7 @@ SNDIO_CloseDevice(_THIS) | ||||
|     SDL_free(this->hidden); | ||||
| } | ||||
|  | ||||
| static int | ||||
| SNDIO_OpenDevice(_THIS, const char *devname) | ||||
| static int SNDIO_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     SDL_AudioFormat test_format; | ||||
|     struct sio_par par; | ||||
| @@ -254,14 +238,14 @@ SNDIO_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     /* Capture devices must be non-blocking for SNDIO_FlushCapture */ | ||||
|     if ((this->hidden->dev = | ||||
|         SNDIO_sio_open(devname != NULL ? devname : SIO_DEVANY, | ||||
|                        iscapture ? SIO_REC : SIO_PLAY, iscapture)) == NULL) { | ||||
|              SNDIO_sio_open(devname != NULL ? devname : SIO_DEVANY, | ||||
|                             iscapture ? SIO_REC : SIO_PLAY, iscapture)) == NULL) { | ||||
|         return SDL_SetError("sio_open() failed"); | ||||
|     } | ||||
|  | ||||
|     /* Allocate the pollfd array for capture devices */ | ||||
|     if (iscapture && (this->hidden->pfd = | ||||
|         SDL_malloc(sizeof(struct pollfd) * SNDIO_sio_nfds(this->hidden->dev))) == NULL) { | ||||
|                           SDL_malloc(sizeof(struct pollfd) * SNDIO_sio_nfds(this->hidden->dev))) == NULL) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
|  | ||||
| @@ -327,7 +311,7 @@ SNDIO_OpenDevice(_THIS, const char *devname) | ||||
|  | ||||
|     /* Allocate mixing buffer */ | ||||
|     this->hidden->mixlen = this->spec.size; | ||||
|     this->hidden->mixbuf = (Uint8 *) SDL_malloc(this->hidden->mixlen); | ||||
|     this->hidden->mixbuf = (Uint8 *)SDL_malloc(this->hidden->mixlen); | ||||
|     if (this->hidden->mixbuf == NULL) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
| @@ -341,21 +325,18 @@ SNDIO_OpenDevice(_THIS, const char *devname) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| SNDIO_Deinitialize(void) | ||||
| static void SNDIO_Deinitialize(void) | ||||
| { | ||||
|     UnloadSNDIOLibrary(); | ||||
| } | ||||
|  | ||||
| static void | ||||
| SNDIO_DetectDevices(void) | ||||
| static void SNDIO_DetectDevices(void) | ||||
| { | ||||
| 	SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *) 0x1); | ||||
| 	SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *) 0x2); | ||||
|     SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, NULL, (void *)0x1); | ||||
|     SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, NULL, (void *)0x2); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| SNDIO_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool SNDIO_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     if (LoadSNDIOLibrary() < 0) { | ||||
|         return SDL_FALSE; | ||||
| @@ -375,7 +356,7 @@ SNDIO_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->AllowsArbitraryDeviceNames = SDL_TRUE; | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap SNDIO_bootstrap = { | ||||
|   | ||||
| @@ -29,7 +29,7 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|   | ||||
| @@ -39,11 +39,10 @@ | ||||
| #include <psp2/audioout.h> | ||||
| #include <psp2/audioin.h> | ||||
|  | ||||
| #define SCE_AUDIO_SAMPLE_ALIGN(s)   (((s) + 63) & ~63) | ||||
| #define SCE_AUDIO_MAX_VOLUME    0x8000 | ||||
| #define SCE_AUDIO_SAMPLE_ALIGN(s) (((s) + 63) & ~63) | ||||
| #define SCE_AUDIO_MAX_VOLUME      0x8000 | ||||
|  | ||||
| static int | ||||
| VITAAUD_OpenCaptureDevice(_THIS) | ||||
| static int VITAAUD_OpenCaptureDevice(_THIS) | ||||
| { | ||||
|     this->spec.freq = 16000; | ||||
|     this->spec.samples = 512; | ||||
| @@ -51,7 +50,7 @@ VITAAUD_OpenCaptureDevice(_THIS) | ||||
|  | ||||
|     SDL_CalculateAudioSpec(&this->spec); | ||||
|  | ||||
|     this->hidden->port = sceAudioInOpenPort(SCE_AUDIO_IN_PORT_TYPE_VOICE , 512, 16000, SCE_AUDIO_IN_PARAM_FORMAT_S16_MONO); | ||||
|     this->hidden->port = sceAudioInOpenPort(SCE_AUDIO_IN_PORT_TYPE_VOICE, 512, 16000, SCE_AUDIO_IN_PARAM_FORMAT_S16_MONO); | ||||
|  | ||||
|     if (this->hidden->port < 0) { | ||||
|         return SDL_SetError("Couldn't open audio in port: %x", this->hidden->port); | ||||
| @@ -60,11 +59,10 @@ VITAAUD_OpenCaptureDevice(_THIS) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| VITAAUD_OpenDevice(_THIS, const char *devname) | ||||
| static int VITAAUD_OpenDevice(_THIS, const char *devname) | ||||
| { | ||||
|     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 }; | ||||
|     SDL_AudioFormat test_format; | ||||
|  | ||||
|     this->hidden = (struct SDL_PrivateAudioData *) | ||||
| @@ -99,7 +97,7 @@ VITAAUD_OpenDevice(_THIS, const char *devname) | ||||
|        be a multiple of 64 bytes.  Our sample count is already a multiple of | ||||
|        64, so spec->size should be a multiple of 64 as well. */ | ||||
|     mixlen = this->spec.size * NUM_BUFFERS; | ||||
|     this->hidden->rawbuf = (Uint8 *) memalign(64, mixlen); | ||||
|     this->hidden->rawbuf = (Uint8 *)memalign(64, mixlen); | ||||
|     if (this->hidden->rawbuf == NULL) { | ||||
|         return SDL_SetError("Couldn't allocate mixing buffer"); | ||||
|     } | ||||
| @@ -122,7 +120,7 @@ VITAAUD_OpenDevice(_THIS, const char *devname) | ||||
|         return SDL_SetError("Couldn't open audio out port: %x", this->hidden->port); | ||||
|     } | ||||
|  | ||||
|     sceAudioOutSetVolume(this->hidden->port, SCE_AUDIO_VOLUME_FLAG_L_CH|SCE_AUDIO_VOLUME_FLAG_R_CH, vols); | ||||
|     sceAudioOutSetVolume(this->hidden->port, SCE_AUDIO_VOLUME_FLAG_L_CH | SCE_AUDIO_VOLUME_FLAG_R_CH, vols); | ||||
|  | ||||
|     SDL_memset(this->hidden->rawbuf, 0, mixlen); | ||||
|     for (i = 0; i < NUM_BUFFERS; i++) { | ||||
| @@ -165,7 +163,7 @@ static void VITAAUD_CloseDevice(_THIS) | ||||
|     } | ||||
|  | ||||
|     if (!this->iscapture && this->hidden->rawbuf != NULL) { | ||||
|         free(this->hidden->rawbuf);         /* this uses memalign(), not SDL_malloc(). */ | ||||
|         free(this->hidden->rawbuf); /* this uses memalign(), not SDL_malloc(). */ | ||||
|         this->hidden->rawbuf = NULL; | ||||
|     } | ||||
| } | ||||
| @@ -194,8 +192,7 @@ static void VITAAUD_ThreadInit(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| VITAAUD_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool VITAAUD_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     /* Set the function pointers */ | ||||
|     impl->OpenDevice = VITAAUD_OpenDevice; | ||||
| @@ -212,7 +209,7 @@ VITAAUD_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->OnlyHasDefaultOutputDevice = SDL_TRUE; | ||||
|     impl->OnlyHasDefaultCaptureDevice = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap VITAAUD_bootstrap = { | ||||
|   | ||||
| @@ -25,19 +25,20 @@ | ||||
| #include "../SDL_sysaudio.h" | ||||
|  | ||||
| /* Hidden "this" pointer for the audio functions */ | ||||
| #define _THIS   SDL_AudioDevice *this | ||||
| #define _THIS SDL_AudioDevice *this | ||||
|  | ||||
| #define NUM_BUFFERS 2 | ||||
|  | ||||
| struct SDL_PrivateAudioData { | ||||
| struct SDL_PrivateAudioData | ||||
| { | ||||
|     /* The hardware input/output port. */ | ||||
|     int     port; | ||||
|     int port; | ||||
|     /* The raw allocated mixing buffer. */ | ||||
|     Uint8   *rawbuf; | ||||
|     Uint8 *rawbuf; | ||||
|     /* Individual mixing buffers. */ | ||||
|     Uint8   *mixbufs[NUM_BUFFERS]; | ||||
|     Uint8 *mixbufs[NUM_BUFFERS]; | ||||
|     /* Index of the next available mixing buffer. */ | ||||
|     int     next_buffer; | ||||
|     int next_buffer; | ||||
| }; | ||||
|  | ||||
| #endif /* _SDL_vitaaudio_h */ | ||||
|   | ||||
| @@ -36,7 +36,7 @@ | ||||
|  | ||||
| /* These constants aren't available in older SDKs */ | ||||
| #ifndef AUDCLNT_STREAMFLAGS_RATEADJUST | ||||
| #define AUDCLNT_STREAMFLAGS_RATEADJUST  0x00100000 | ||||
| #define AUDCLNT_STREAMFLAGS_RATEADJUST 0x00100000 | ||||
| #endif | ||||
| #ifndef AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY | ||||
| #define AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY 0x08000000 | ||||
| @@ -46,17 +46,15 @@ | ||||
| #endif | ||||
|  | ||||
| /* Some GUIDs we need to know without linking to libraries that aren't available before Vista. */ | ||||
| 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_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 void | ||||
| WASAPI_DetectDevices(void) | ||||
| static void WASAPI_DetectDevices(void) | ||||
| { | ||||
|     WASAPI_EnumerateEndpoints(); | ||||
| } | ||||
|  | ||||
| static SDL_INLINE SDL_bool | ||||
| WasapiFailed(_THIS, const HRESULT err) | ||||
| static SDL_INLINE SDL_bool WasapiFailed(_THIS, const HRESULT err) | ||||
| { | ||||
|     if (err == S_OK) { | ||||
|         return SDL_FALSE; | ||||
| @@ -73,39 +71,38 @@ WasapiFailed(_THIS, const HRESULT err) | ||||
|     return SDL_TRUE; | ||||
| } | ||||
|  | ||||
| static int | ||||
| UpdateAudioStream(_THIS, const SDL_AudioSpec *oldspec) | ||||
| static int UpdateAudioStream(_THIS, const SDL_AudioSpec *oldspec) | ||||
| { | ||||
|     /* Since WASAPI requires us to handle all audio conversion, and our | ||||
|        device format might have changed, we might have to add/remove/change | ||||
|        the audio stream that the higher level uses to convert data, so | ||||
|        SDL keeps firing the callback as if nothing happened here. */ | ||||
|  | ||||
|     if ( (this->callbackspec.channels == this->spec.channels) && | ||||
|          (this->callbackspec.format == this->spec.format) && | ||||
|          (this->callbackspec.freq == this->spec.freq) && | ||||
|          (this->callbackspec.samples == this->spec.samples) ) { | ||||
|     if ((this->callbackspec.channels == this->spec.channels) && | ||||
|         (this->callbackspec.format == this->spec.format) && | ||||
|         (this->callbackspec.freq == this->spec.freq) && | ||||
|         (this->callbackspec.samples == this->spec.samples)) { | ||||
|         /* no need to buffer/convert in an AudioStream! */ | ||||
|         SDL_FreeAudioStream(this->stream); | ||||
|         this->stream = NULL; | ||||
|     } else if ( (oldspec->channels == this->spec.channels) && | ||||
|          (oldspec->format == this->spec.format) && | ||||
|          (oldspec->freq == this->spec.freq) ) { | ||||
|     } else if ((oldspec->channels == this->spec.channels) && | ||||
|                (oldspec->format == this->spec.format) && | ||||
|                (oldspec->freq == this->spec.freq)) { | ||||
|         /* The existing audio stream is okay to keep using. */ | ||||
|     } else { | ||||
|         /* replace the audiostream for new format */ | ||||
|         SDL_FreeAudioStream(this->stream); | ||||
|         if (this->iscapture) { | ||||
|             this->stream = SDL_NewAudioStream(this->spec.format, | ||||
|                                 this->spec.channels, this->spec.freq, | ||||
|                                 this->callbackspec.format, | ||||
|                                 this->callbackspec.channels, | ||||
|                                 this->callbackspec.freq); | ||||
|                                               this->spec.channels, this->spec.freq, | ||||
|                                               this->callbackspec.format, | ||||
|                                               this->callbackspec.channels, | ||||
|                                               this->callbackspec.freq); | ||||
|         } else { | ||||
|             this->stream = SDL_NewAudioStream(this->callbackspec.format, | ||||
|                                 this->callbackspec.channels, | ||||
|                                 this->callbackspec.freq, this->spec.format, | ||||
|                                 this->spec.channels, this->spec.freq); | ||||
|                                               this->callbackspec.channels, | ||||
|                                               this->callbackspec.freq, this->spec.format, | ||||
|                                               this->spec.channels, this->spec.freq); | ||||
|         } | ||||
|  | ||||
|         if (!this->stream) { | ||||
| @@ -115,7 +112,7 @@ UpdateAudioStream(_THIS, const SDL_AudioSpec *oldspec) | ||||
|  | ||||
|     /* make sure our scratch buffer can cover the new device spec. */ | ||||
|     if (this->spec.size > this->work_buffer_len) { | ||||
|         Uint8 *ptr = (Uint8 *) SDL_realloc(this->work_buffer, this->spec.size); | ||||
|         Uint8 *ptr = (Uint8 *)SDL_realloc(this->work_buffer, this->spec.size); | ||||
|         if (ptr == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
| @@ -126,16 +123,14 @@ UpdateAudioStream(_THIS, const SDL_AudioSpec *oldspec) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| static void ReleaseWasapiDevice(_THIS); | ||||
|  | ||||
| static SDL_bool | ||||
| RecoverWasapiDevice(_THIS) | ||||
| static SDL_bool RecoverWasapiDevice(_THIS) | ||||
| { | ||||
|     ReleaseWasapiDevice(this);  /* dump the lost device's handles. */ | ||||
|     ReleaseWasapiDevice(this); /* dump the lost device's handles. */ | ||||
|  | ||||
|     if (this->hidden->default_device_generation) { | ||||
|         this->hidden->default_device_generation = SDL_AtomicGet(this->iscapture ?  &SDL_IMMDevice_DefaultCaptureGeneration : &SDL_IMMDevice_DefaultPlaybackGeneration); | ||||
|         this->hidden->default_device_generation = SDL_AtomicGet(this->iscapture ? &SDL_IMMDevice_DefaultCaptureGeneration : &SDL_IMMDevice_DefaultPlaybackGeneration); | ||||
|     } | ||||
|  | ||||
|     /* this can fail for lots of reasons, but the most likely is we had a | ||||
| @@ -150,26 +145,25 @@ RecoverWasapiDevice(_THIS) | ||||
|  | ||||
|     this->hidden->device_lost = SDL_FALSE; | ||||
|  | ||||
|     return SDL_TRUE;  /* okay, carry on with new device details! */ | ||||
|     return SDL_TRUE; /* okay, carry on with new device details! */ | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| RecoverWasapiIfLost(_THIS) | ||||
| static SDL_bool RecoverWasapiIfLost(_THIS) | ||||
| { | ||||
|     const int generation = this->hidden->default_device_generation; | ||||
|     SDL_bool lost = this->hidden->device_lost; | ||||
|  | ||||
|     if (!SDL_AtomicGet(&this->enabled)) { | ||||
|         return SDL_FALSE;  /* already failed. */ | ||||
|         return SDL_FALSE; /* already failed. */ | ||||
|     } | ||||
|  | ||||
|     if (!this->hidden->client) { | ||||
|         return SDL_TRUE;  /* still waiting for activation. */ | ||||
|         return SDL_TRUE; /* still waiting for activation. */ | ||||
|     } | ||||
|  | ||||
|     if (!lost && (generation > 0)) { /* is a default device? */ | ||||
|         const int newgen = SDL_AtomicGet(this->iscapture ? &SDL_IMMDevice_DefaultCaptureGeneration : &SDL_IMMDevice_DefaultPlaybackGeneration); | ||||
|         if (generation != newgen) {  /* the desired default device was changed, jump over to it. */ | ||||
|         if (generation != newgen) { /* the desired default device was changed, jump over to it. */ | ||||
|             lost = SDL_TRUE; | ||||
|         } | ||||
|     } | ||||
| @@ -177,33 +171,30 @@ RecoverWasapiIfLost(_THIS) | ||||
|     return lost ? RecoverWasapiDevice(this) : SDL_TRUE; | ||||
| } | ||||
|  | ||||
| static Uint8 * | ||||
| WASAPI_GetDeviceBuf(_THIS) | ||||
| static Uint8 *WASAPI_GetDeviceBuf(_THIS) | ||||
| { | ||||
|     /* get an endpoint buffer from WASAPI. */ | ||||
|     BYTE *buffer = NULL; | ||||
|  | ||||
|     while (RecoverWasapiIfLost(this) && this->hidden->render) { | ||||
|         if (!WasapiFailed(this, IAudioRenderClient_GetBuffer(this->hidden->render, this->spec.samples, &buffer))) { | ||||
|             return (Uint8 *) buffer; | ||||
|             return (Uint8 *)buffer; | ||||
|         } | ||||
|         SDL_assert(buffer == NULL); | ||||
|     } | ||||
|  | ||||
|     return (Uint8 *) buffer; | ||||
|     return (Uint8 *)buffer; | ||||
| } | ||||
|  | ||||
| static void | ||||
| WASAPI_PlayDevice(_THIS) | ||||
| static void 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(this, IAudioRenderClient_ReleaseBuffer(this->hidden->render, this->spec.samples, 0)); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| WASAPI_WaitDevice(_THIS) | ||||
| static void WASAPI_WaitDevice(_THIS) | ||||
| { | ||||
|     while (RecoverWasapiIfLost(this) && this->hidden->client && this->hidden->event) { | ||||
|         DWORD waitResult = WaitForSingleObjectEx(this->hidden->event, 200, FALSE); | ||||
| @@ -230,8 +221,7 @@ WASAPI_WaitDevice(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| WASAPI_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| static int WASAPI_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
| { | ||||
|     SDL_AudioStream *stream = this->hidden->capturestream; | ||||
|     const int avail = SDL_AudioStreamAvailable(stream); | ||||
| @@ -263,7 +253,7 @@ WASAPI_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|         if ((ret == AUDCLNT_S_BUFFER_EMPTY) || !frames) { | ||||
|             WASAPI_WaitDevice(this); | ||||
|         } else if (ret == S_OK) { | ||||
|             const int total = ((int) frames) * this->hidden->framesize; | ||||
|             const int total = ((int)frames) * this->hidden->framesize; | ||||
|             const int cpy = SDL_min(buflen, total); | ||||
|             const int leftover = total - cpy; | ||||
|             const SDL_bool silent = (flags & AUDCLNT_BUFFERFLAGS_SILENT) ? SDL_TRUE : SDL_FALSE; | ||||
| @@ -277,11 +267,11 @@ WASAPI_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|             if (leftover > 0) { | ||||
|                 ptr += cpy; | ||||
|                 if (silent) { | ||||
|                     SDL_memset(ptr, this->spec.silence, leftover);  /* I guess this is safe? */ | ||||
|                     SDL_memset(ptr, this->spec.silence, leftover); /* I guess this is safe? */ | ||||
|                 } | ||||
|  | ||||
|                 if (SDL_AudioStreamPut(stream, ptr, leftover) == -1) { | ||||
|                     return -1;  /* uhoh, out of memory, etc. Kill device.  :( */ | ||||
|                     return -1; /* uhoh, out of memory, etc. Kill device.  :( */ | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @@ -292,36 +282,34 @@ WASAPI_CaptureFromDevice(_THIS, void *buffer, int buflen) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return -1;  /* unrecoverable error. */ | ||||
|     return -1; /* unrecoverable error. */ | ||||
| } | ||||
|  | ||||
| static void | ||||
| WASAPI_FlushCapture(_THIS) | ||||
| static void WASAPI_FlushCapture(_THIS) | ||||
| { | ||||
|     BYTE *ptr = NULL; | ||||
|     UINT32 frames = 0; | ||||
|     DWORD flags = 0; | ||||
|  | ||||
|     if (!this->hidden->capture) { | ||||
|         return;  /* not activated yet? */ | ||||
|         return; /* not activated yet? */ | ||||
|     } | ||||
|  | ||||
|     /* just read until we stop getting packets, throwing them away. */ | ||||
|     while (SDL_TRUE) { | ||||
|         const HRESULT ret = IAudioCaptureClient_GetBuffer(this->hidden->capture, &ptr, &frames, &flags, NULL, NULL); | ||||
|         if (ret == AUDCLNT_S_BUFFER_EMPTY) { | ||||
|             break;  /* no more buffered data; we're done. */ | ||||
|             break; /* no more buffered data; we're done. */ | ||||
|         } else if (WasapiFailed(this, ret)) { | ||||
|             break;  /* failed for some other reason, abort. */ | ||||
|             break; /* failed for some other reason, abort. */ | ||||
|         } else if (WasapiFailed(this, IAudioCaptureClient_ReleaseBuffer(this->hidden->capture, frames))) { | ||||
|             break;  /* something broke. */ | ||||
|             break; /* something broke. */ | ||||
|         } | ||||
|     } | ||||
|     SDL_AudioStreamClear(this->hidden->capturestream); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ReleaseWasapiDevice(_THIS) | ||||
| static void ReleaseWasapiDevice(_THIS) | ||||
| { | ||||
|     if (this->hidden->client) { | ||||
|         IAudioClient_Stop(this->hidden->client); | ||||
| @@ -360,20 +348,17 @@ ReleaseWasapiDevice(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| WASAPI_CloseDevice(_THIS) | ||||
| static void WASAPI_CloseDevice(_THIS) | ||||
| { | ||||
|     WASAPI_UnrefDevice(this); | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_RefDevice(_THIS) | ||||
| void WASAPI_RefDevice(_THIS) | ||||
| { | ||||
|     SDL_AtomicIncRef(&this->hidden->refcount); | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_UnrefDevice(_THIS) | ||||
| void WASAPI_UnrefDevice(_THIS) | ||||
| { | ||||
|     if (!SDL_AtomicDecRef(&this->hidden->refcount)) { | ||||
|         return; | ||||
| @@ -390,8 +375,7 @@ WASAPI_UnrefDevice(_THIS) | ||||
| } | ||||
|  | ||||
| /* This is called once a device is activated, possibly asynchronously. */ | ||||
| int | ||||
| WASAPI_PrepDevice(_THIS, const SDL_bool updatestream) | ||||
| int WASAPI_PrepDevice(_THIS, const SDL_bool updatestream) | ||||
| { | ||||
|     /* !!! FIXME: we could request an exclusive mode stream, which is lower latency; | ||||
|        !!!  it will write into the kernel's audio buffer directly instead of | ||||
| @@ -406,7 +390,7 @@ WASAPI_PrepDevice(_THIS, const SDL_bool updatestream) | ||||
|        !!!  do in any case. */ | ||||
|     const SDL_AudioSpec oldspec = this->spec; | ||||
|     const AUDCLNT_SHAREMODE sharemode = AUDCLNT_SHAREMODE_SHARED; | ||||
|     UINT32 bufsize = 0;  /* this is in sample frames, not samples, not bytes. */ | ||||
|     UINT32 bufsize = 0; /* this is in sample frames, not samples, not bytes. */ | ||||
|     REFERENCE_TIME default_period = 0; | ||||
|     IAudioClient *client = this->hidden->client; | ||||
|     IAudioRenderClient *render = NULL; | ||||
| @@ -437,7 +421,7 @@ WASAPI_PrepDevice(_THIS, const SDL_bool updatestream) | ||||
|     SDL_assert(waveformat != NULL); | ||||
|     this->hidden->waveformat = waveformat; | ||||
|  | ||||
|     this->spec.channels = (Uint8) waveformat->nChannels; | ||||
|     this->spec.channels = (Uint8)waveformat->nChannels; | ||||
|  | ||||
|     /* Make sure we have a valid format that we can convert to whatever WASAPI wants. */ | ||||
|     wasapi_format = WaveFormatToSDLFormat(waveformat); | ||||
| @@ -504,10 +488,10 @@ WASAPI_PrepDevice(_THIS, const SDL_bool updatestream) | ||||
|     if (this->iscapture) { | ||||
|         this->hidden->capturestream = SDL_NewAudioStream(this->spec.format, this->spec.channels, this->spec.freq, this->spec.format, this->spec.channels, this->spec.freq); | ||||
|         if (!this->hidden->capturestream) { | ||||
|             return -1;  /* already set SDL_Error */ | ||||
|             return -1; /* already set SDL_Error */ | ||||
|         } | ||||
|  | ||||
|         ret = IAudioClient_GetService(client, &SDL_IID_IAudioCaptureClient, (void**) &capture); | ||||
|         ret = IAudioClient_GetService(client, &SDL_IID_IAudioCaptureClient, (void **)&capture); | ||||
|         if (FAILED(ret)) { | ||||
|             return WIN_SetErrorFromHRESULT("WASAPI can't get capture client service", ret); | ||||
|         } | ||||
| @@ -519,9 +503,9 @@ WASAPI_PrepDevice(_THIS, const SDL_bool updatestream) | ||||
|             return WIN_SetErrorFromHRESULT("WASAPI can't start capture", ret); | ||||
|         } | ||||
|  | ||||
|         WASAPI_FlushCapture(this);  /* MSDN says you should flush capture endpoint right after startup. */ | ||||
|         WASAPI_FlushCapture(this); /* MSDN says you should flush capture endpoint right after startup. */ | ||||
|     } else { | ||||
|         ret = IAudioClient_GetService(client, &SDL_IID_IAudioRenderClient, (void**) &render); | ||||
|         ret = IAudioClient_GetService(client, &SDL_IID_IAudioRenderClient, (void **)&render); | ||||
|         if (FAILED(ret)) { | ||||
|             return WIN_SetErrorFromHRESULT("WASAPI can't get render client service", ret); | ||||
|         } | ||||
| @@ -538,14 +522,12 @@ WASAPI_PrepDevice(_THIS, const SDL_bool updatestream) | ||||
|         return UpdateAudioStream(this, &oldspec); | ||||
|     } | ||||
|  | ||||
|     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; | ||||
|  | ||||
|     /* Initialize all variables that we clean on shutdown */ | ||||
|     this->hidden = (struct SDL_PrivateAudioData *) | ||||
| @@ -555,9 +537,9 @@ WASAPI_OpenDevice(_THIS, const char *devname) | ||||
|     } | ||||
|     SDL_zerop(this->hidden); | ||||
|  | ||||
|     WASAPI_RefDevice(this);   /* so CloseDevice() will unref to zero. */ | ||||
|     WASAPI_RefDevice(this); /* so CloseDevice() will unref to zero. */ | ||||
|  | ||||
|     if (!devid) {  /* is default device? */ | ||||
|     if (!devid) { /* is default device? */ | ||||
|         this->hidden->default_device_generation = SDL_AtomicGet(this->iscapture ? &SDL_IMMDevice_DefaultCaptureGeneration : &SDL_IMMDevice_DefaultPlaybackGeneration); | ||||
|     } else { | ||||
|         this->hidden->devid = SDL_wcsdup(devid); | ||||
| @@ -567,7 +549,7 @@ WASAPI_OpenDevice(_THIS, const char *devname) | ||||
|     } | ||||
|  | ||||
|     if (WASAPI_ActivateDevice(this, SDL_FALSE) == -1) { | ||||
|         return -1;  /* already set error. */ | ||||
|         return -1; /* already set error. */ | ||||
|     } | ||||
|  | ||||
|     /* Ready, but waiting for async device activation. | ||||
| @@ -581,26 +563,22 @@ WASAPI_OpenDevice(_THIS, const char *devname) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| WASAPI_ThreadInit(_THIS) | ||||
| static void WASAPI_ThreadInit(_THIS) | ||||
| { | ||||
|     WASAPI_PlatformThreadInit(this); | ||||
| } | ||||
|  | ||||
| static void | ||||
| WASAPI_ThreadDeinit(_THIS) | ||||
| static void WASAPI_ThreadDeinit(_THIS) | ||||
| { | ||||
|     WASAPI_PlatformThreadDeinit(this); | ||||
| } | ||||
|  | ||||
| static void | ||||
| WASAPI_Deinitialize(void) | ||||
| static void WASAPI_Deinitialize(void) | ||||
| { | ||||
|     WASAPI_PlatformDeinit(); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| WASAPI_Init(SDL_AudioDriverImpl * impl) | ||||
| static SDL_bool WASAPI_Init(SDL_AudioDriverImpl *impl) | ||||
| { | ||||
|     if (WASAPI_PlatformInit() == -1) { | ||||
|         return SDL_FALSE; | ||||
| @@ -622,13 +600,13 @@ WASAPI_Init(SDL_AudioDriverImpl * impl) | ||||
|     impl->HasCaptureSupport = SDL_TRUE; | ||||
|     impl->SupportsNonPow2Samples = SDL_TRUE; | ||||
|  | ||||
|     return SDL_TRUE;   /* this audio target is available. */ | ||||
|     return SDL_TRUE; /* this audio target is available. */ | ||||
| } | ||||
|  | ||||
| AudioBootStrap WASAPI_bootstrap = { | ||||
|     "wasapi", "WASAPI", WASAPI_Init, SDL_FALSE | ||||
| }; | ||||
|  | ||||
| #endif  /* SDL_AUDIO_DRIVER_WASAPI */ | ||||
| #endif /* SDL_AUDIO_DRIVER_WASAPI */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|   | ||||
| @@ -47,26 +47,24 @@ static pfnAvSetMmThreadCharacteristicsW pAvSetMmThreadCharacteristicsW = NULL; | ||||
| static pfnAvRevertMmThreadCharacteristics pAvRevertMmThreadCharacteristics = NULL; | ||||
|  | ||||
| /* Some GUIDs we need to know without linking to libraries that aren't available before Vista. */ | ||||
| static const IID SDL_IID_IAudioClient = { 0x1cb9ad4c, 0xdbfa, 0x4c32,{ 0xb1, 0x78, 0xc2, 0xf5, 0x68, 0xa7, 0x03, 0xb2 } }; | ||||
| static const IID SDL_IID_IAudioClient = { 0x1cb9ad4c, 0xdbfa, 0x4c32, { 0xb1, 0x78, 0xc2, 0xf5, 0x68, 0xa7, 0x03, 0xb2 } }; | ||||
|  | ||||
| int | ||||
| WASAPI_PlatformInit(void) | ||||
| int WASAPI_PlatformInit(void) | ||||
| { | ||||
|     if (SDL_IMMDevice_Init() < 0) { | ||||
|         return -1; /* This is set by SDL_IMMDevice_Init */ | ||||
|     } | ||||
|  | ||||
|     libavrt = LoadLibrary(TEXT("avrt.dll"));  /* this library is available in Vista and later. No WinXP, so have to LoadLibrary to use it for now! */ | ||||
|     libavrt = LoadLibrary(TEXT("avrt.dll")); /* this library is available in Vista and later. No WinXP, so have to LoadLibrary to use it for now! */ | ||||
|     if (libavrt) { | ||||
|         pAvSetMmThreadCharacteristicsW = (pfnAvSetMmThreadCharacteristicsW) GetProcAddress(libavrt, "AvSetMmThreadCharacteristicsW"); | ||||
|         pAvRevertMmThreadCharacteristics = (pfnAvRevertMmThreadCharacteristics) GetProcAddress(libavrt, "AvRevertMmThreadCharacteristics"); | ||||
|         pAvSetMmThreadCharacteristicsW = (pfnAvSetMmThreadCharacteristicsW)GetProcAddress(libavrt, "AvSetMmThreadCharacteristicsW"); | ||||
|         pAvRevertMmThreadCharacteristics = (pfnAvRevertMmThreadCharacteristics)GetProcAddress(libavrt, "AvRevertMmThreadCharacteristics"); | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_PlatformDeinit(void) | ||||
| void WASAPI_PlatformDeinit(void) | ||||
| { | ||||
|     if (libavrt) { | ||||
|         FreeLibrary(libavrt); | ||||
| @@ -79,11 +77,10 @@ WASAPI_PlatformDeinit(void) | ||||
|     SDL_IMMDevice_Quit(); | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_PlatformThreadInit(_THIS) | ||||
| void WASAPI_PlatformThreadInit(_THIS) | ||||
| { | ||||
|     /* 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! */ | ||||
|         this->hidden->coinitialized = SDL_TRUE; | ||||
|     } | ||||
|  | ||||
| @@ -94,8 +91,7 @@ WASAPI_PlatformThreadInit(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_PlatformThreadDeinit(_THIS) | ||||
| void WASAPI_PlatformThreadDeinit(_THIS) | ||||
| { | ||||
|     /* Set this thread back to normal priority. */ | ||||
|     if (this->hidden->task && pAvRevertMmThreadCharacteristics) { | ||||
| @@ -109,8 +105,7 @@ WASAPI_PlatformThreadDeinit(_THIS) | ||||
|     } | ||||
| } | ||||
|  | ||||
| int | ||||
| WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery) | ||||
| int WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery) | ||||
| { | ||||
|     IMMDevice *device = NULL; | ||||
|     HRESULT ret; | ||||
| @@ -121,7 +116,7 @@ WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery) | ||||
|     } | ||||
|  | ||||
|     /* this is not async in standard win32, yay! */ | ||||
|     ret = IMMDevice_Activate(device, &SDL_IID_IAudioClient, CLSCTX_ALL, NULL, (void **) &this->hidden->client); | ||||
|     ret = IMMDevice_Activate(device, &SDL_IID_IAudioClient, CLSCTX_ALL, NULL, (void **)&this->hidden->client); | ||||
|     IMMDevice_Release(device); | ||||
|  | ||||
|     if (FAILED(ret)) { | ||||
| @@ -130,33 +125,29 @@ WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery) | ||||
|     } | ||||
|  | ||||
|     SDL_assert(this->hidden->client != NULL); | ||||
|     if (WASAPI_PrepDevice(this, isrecovery) == -1) {   /* not async, fire it right away. */ | ||||
|     if (WASAPI_PrepDevice(this, isrecovery) == -1) { /* not async, fire it right away. */ | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     return 0;  /* good to go. */ | ||||
|     return 0; /* good to go. */ | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_EnumerateEndpoints(void) | ||||
| void WASAPI_EnumerateEndpoints(void) | ||||
| { | ||||
|     SDL_IMMDevice_EnumerateEndpoints(SDL_FALSE); | ||||
| } | ||||
|  | ||||
| int | ||||
| WASAPI_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| int WASAPI_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| { | ||||
|     return SDL_IMMDevice_GetDefaultAudioInfo(name, spec, iscapture); | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_PlatformDeleteActivationHandler(void *handler) | ||||
| void WASAPI_PlatformDeleteActivationHandler(void *handler) | ||||
| { | ||||
|     /* not asynchronous. */ | ||||
|     SDL_assert(!"This function should have only been called on WinRT."); | ||||
| } | ||||
|  | ||||
| #endif  /* SDL_AUDIO_DRIVER_WASAPI && !defined(__WINRT__) */ | ||||
| #endif /* SDL_AUDIO_DRIVER_WASAPI && !defined(__WINRT__) */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|  | ||||
|   | ||||
| @@ -53,13 +53,13 @@ using namespace Windows::Media::Devices; | ||||
| using namespace Windows::Foundation; | ||||
| using namespace Microsoft::WRL; | ||||
|  | ||||
| static Platform::String^ SDL_PKEY_AudioEngine_DeviceFormat = L"{f19f064d-082c-4e27-bc73-6882a1bb8e4c} 0"; | ||||
| static Platform::String ^ SDL_PKEY_AudioEngine_DeviceFormat = L"{f19f064d-082c-4e27-bc73-6882a1bb8e4c} 0"; | ||||
|  | ||||
| static void WASAPI_AddDevice(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENSIBLE *fmt, LPCWSTR devid); | ||||
| static void WASAPI_RemoveDevice(const SDL_bool iscapture, LPCWSTR devid); | ||||
| extern "C" { | ||||
|     SDL_atomic_t SDL_IMMDevice_DefaultPlaybackGeneration; | ||||
|     SDL_atomic_t SDL_IMMDevice_DefaultCaptureGeneration; | ||||
| SDL_atomic_t SDL_IMMDevice_DefaultPlaybackGeneration; | ||||
| SDL_atomic_t SDL_IMMDevice_DefaultCaptureGeneration; | ||||
| } | ||||
|  | ||||
| /* This is a list of device id strings we have inflight, so we have consistent pointers to the same device. */ | ||||
| @@ -73,20 +73,20 @@ static DevIdList *deviceid_list = NULL; | ||||
|  | ||||
| class SDL_WasapiDeviceEventHandler | ||||
| { | ||||
| public: | ||||
|   public: | ||||
|     SDL_WasapiDeviceEventHandler(const SDL_bool _iscapture); | ||||
|     ~SDL_WasapiDeviceEventHandler(); | ||||
|     void OnDeviceAdded(DeviceWatcher^ sender, DeviceInformation^ args); | ||||
|     void OnDeviceRemoved(DeviceWatcher^ sender, DeviceInformationUpdate^ args); | ||||
|     void OnDeviceUpdated(DeviceWatcher^ sender, DeviceInformationUpdate^ args); | ||||
|     void OnEnumerationCompleted(DeviceWatcher^ sender, Platform::Object^ args); | ||||
|     void OnDefaultRenderDeviceChanged(Platform::Object^ sender, DefaultAudioRenderDeviceChangedEventArgs^ args); | ||||
|     void OnDefaultCaptureDeviceChanged(Platform::Object^ sender, DefaultAudioCaptureDeviceChangedEventArgs^ args); | ||||
|     SDL_semaphore* completed; | ||||
|     void OnDeviceAdded(DeviceWatcher ^ sender, DeviceInformation ^ args); | ||||
|     void OnDeviceRemoved(DeviceWatcher ^ sender, DeviceInformationUpdate ^ args); | ||||
|     void OnDeviceUpdated(DeviceWatcher ^ sender, DeviceInformationUpdate ^ args); | ||||
|     void OnEnumerationCompleted(DeviceWatcher ^ sender, Platform::Object ^ args); | ||||
|     void OnDefaultRenderDeviceChanged(Platform::Object ^ sender, DefaultAudioRenderDeviceChangedEventArgs ^ args); | ||||
|     void OnDefaultCaptureDeviceChanged(Platform::Object ^ sender, DefaultAudioCaptureDeviceChangedEventArgs ^ args); | ||||
|     SDL_semaphore *completed; | ||||
|  | ||||
| private: | ||||
|   private: | ||||
|     const SDL_bool iscapture; | ||||
|     DeviceWatcher^ watcher; | ||||
|     DeviceWatcher ^ watcher; | ||||
|     Windows::Foundation::EventRegistrationToken added_handler; | ||||
|     Windows::Foundation::EventRegistrationToken removed_handler; | ||||
|     Windows::Foundation::EventRegistrationToken updated_handler; | ||||
| @@ -95,29 +95,27 @@ private: | ||||
| }; | ||||
|  | ||||
| SDL_WasapiDeviceEventHandler::SDL_WasapiDeviceEventHandler(const SDL_bool _iscapture) | ||||
|     : iscapture(_iscapture) | ||||
|     , completed(SDL_CreateSemaphore(0)) | ||||
|     : iscapture(_iscapture), completed(SDL_CreateSemaphore(0)) | ||||
| { | ||||
|     if (!completed) | ||||
|         return;  // uhoh. | ||||
|         return; // uhoh. | ||||
|  | ||||
|     Platform::String^ selector = _iscapture ? MediaDevice::GetAudioCaptureSelector() : | ||||
|                                               MediaDevice::GetAudioRenderSelector(); | ||||
|     Platform::Collections::Vector<Platform::String^> properties; | ||||
|     Platform::String ^ selector = _iscapture ? MediaDevice::GetAudioCaptureSelector() : MediaDevice::GetAudioRenderSelector(); | ||||
|     Platform::Collections::Vector<Platform::String ^> properties; | ||||
|     properties.Append(SDL_PKEY_AudioEngine_DeviceFormat); | ||||
|     watcher = DeviceInformation::CreateWatcher(selector, properties.GetView()); | ||||
|     if (!watcher) | ||||
|         return;  // uhoh. | ||||
|         return; // uhoh. | ||||
|  | ||||
|     // !!! FIXME: this doesn't need a lambda here, I think, if I make SDL_WasapiDeviceEventHandler a proper C++/CX class. --ryan. | ||||
|     added_handler = watcher->Added += ref new TypedEventHandler<DeviceWatcher^, DeviceInformation^>([this](DeviceWatcher^ sender, DeviceInformation^ args) { OnDeviceAdded(sender, args); } ); | ||||
|     removed_handler = watcher->Removed += ref new TypedEventHandler<DeviceWatcher^, DeviceInformationUpdate^>([this](DeviceWatcher^ sender, DeviceInformationUpdate^ args) { OnDeviceRemoved(sender, args); } ); | ||||
|     updated_handler = watcher->Updated += ref new TypedEventHandler<DeviceWatcher^, DeviceInformationUpdate^>([this](DeviceWatcher^ sender, DeviceInformationUpdate^ args) { OnDeviceUpdated(sender, args); } ); | ||||
|     completed_handler = watcher->EnumerationCompleted += ref new TypedEventHandler<DeviceWatcher^, Platform::Object^>([this](DeviceWatcher^ sender, Platform::Object^ args) { OnEnumerationCompleted(sender, args); } ); | ||||
|     added_handler = watcher->Added += ref new TypedEventHandler<DeviceWatcher ^, DeviceInformation ^>([this](DeviceWatcher ^ sender, DeviceInformation ^ args) { OnDeviceAdded(sender, args); }); | ||||
|     removed_handler = watcher->Removed += ref new TypedEventHandler<DeviceWatcher ^, DeviceInformationUpdate ^>([this](DeviceWatcher ^ sender, DeviceInformationUpdate ^ args) { OnDeviceRemoved(sender, args); }); | ||||
|     updated_handler = watcher->Updated += ref new TypedEventHandler<DeviceWatcher ^, DeviceInformationUpdate ^>([this](DeviceWatcher ^ sender, DeviceInformationUpdate ^ args) { OnDeviceUpdated(sender, args); }); | ||||
|     completed_handler = watcher->EnumerationCompleted += ref new TypedEventHandler<DeviceWatcher ^, Platform::Object ^>([this](DeviceWatcher ^ sender, Platform::Object ^ args) { OnEnumerationCompleted(sender, args); }); | ||||
|     if (iscapture) { | ||||
|         default_changed_handler = MediaDevice::DefaultAudioCaptureDeviceChanged += ref new TypedEventHandler<Platform::Object^, DefaultAudioCaptureDeviceChangedEventArgs^>([this](Platform::Object^ sender, DefaultAudioCaptureDeviceChangedEventArgs^ args) { OnDefaultCaptureDeviceChanged(sender, args); } ); | ||||
|         default_changed_handler = MediaDevice::DefaultAudioCaptureDeviceChanged += ref new TypedEventHandler<Platform::Object ^, DefaultAudioCaptureDeviceChangedEventArgs ^>([this](Platform::Object ^ sender, DefaultAudioCaptureDeviceChangedEventArgs ^ args) { OnDefaultCaptureDeviceChanged(sender, args); }); | ||||
|     } else { | ||||
|         default_changed_handler = MediaDevice::DefaultAudioRenderDeviceChanged += ref new TypedEventHandler<Platform::Object^, DefaultAudioRenderDeviceChangedEventArgs^>([this](Platform::Object^ sender, DefaultAudioRenderDeviceChangedEventArgs^ args) { OnDefaultRenderDeviceChanged(sender, args); } ); | ||||
|         default_changed_handler = MediaDevice::DefaultAudioRenderDeviceChanged += ref new TypedEventHandler<Platform::Object ^, DefaultAudioRenderDeviceChangedEventArgs ^>([this](Platform::Object ^ sender, DefaultAudioRenderDeviceChangedEventArgs ^ args) { OnDefaultRenderDeviceChanged(sender, args); }); | ||||
|     } | ||||
|     watcher->Start(); | ||||
| } | ||||
| @@ -144,17 +142,16 @@ SDL_WasapiDeviceEventHandler::~SDL_WasapiDeviceEventHandler() | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_WasapiDeviceEventHandler::OnDeviceAdded(DeviceWatcher^ sender, DeviceInformation^ info) | ||||
| void SDL_WasapiDeviceEventHandler::OnDeviceAdded(DeviceWatcher ^ sender, DeviceInformation ^ info) | ||||
| { | ||||
|     SDL_assert(sender == this->watcher); | ||||
|     char *utf8dev = WIN_StringToUTF8(info->Name->Data()); | ||||
|     if (utf8dev) { | ||||
|         WAVEFORMATEXTENSIBLE fmt; | ||||
|         Platform::Object^ obj = info->Properties->Lookup(SDL_PKEY_AudioEngine_DeviceFormat); | ||||
|         Platform::Object ^ obj = info->Properties->Lookup(SDL_PKEY_AudioEngine_DeviceFormat); | ||||
|         if (obj) { | ||||
|             IPropertyValue^ property = (IPropertyValue^) obj; | ||||
|             Platform::Array<unsigned char>^ data; | ||||
|             IPropertyValue ^ property = (IPropertyValue ^) obj; | ||||
|             Platform::Array<unsigned char> ^ data; | ||||
|             property->GetUInt8Array(&data); | ||||
|             SDL_memcpy(&fmt, data->Data, SDL_min(data->Length, sizeof(WAVEFORMATEXTENSIBLE))); | ||||
|         } else { | ||||
| @@ -166,41 +163,35 @@ SDL_WasapiDeviceEventHandler::OnDeviceAdded(DeviceWatcher^ sender, DeviceInforma | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_WasapiDeviceEventHandler::OnDeviceRemoved(DeviceWatcher^ sender, DeviceInformationUpdate^ info) | ||||
| void SDL_WasapiDeviceEventHandler::OnDeviceRemoved(DeviceWatcher ^ sender, DeviceInformationUpdate ^ info) | ||||
| { | ||||
|     SDL_assert(sender == this->watcher); | ||||
|     WASAPI_RemoveDevice(this->iscapture, info->Id->Data()); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_WasapiDeviceEventHandler::OnDeviceUpdated(DeviceWatcher^ sender, DeviceInformationUpdate^ args) | ||||
| void SDL_WasapiDeviceEventHandler::OnDeviceUpdated(DeviceWatcher ^ sender, DeviceInformationUpdate ^ args) | ||||
| { | ||||
|     SDL_assert(sender == this->watcher); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_WasapiDeviceEventHandler::OnEnumerationCompleted(DeviceWatcher^ sender, Platform::Object^ args) | ||||
| void SDL_WasapiDeviceEventHandler::OnEnumerationCompleted(DeviceWatcher ^ sender, Platform::Object ^ args) | ||||
| { | ||||
|     SDL_assert(sender == this->watcher); | ||||
|     SDL_SemPost(this->completed); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_WasapiDeviceEventHandler::OnDefaultRenderDeviceChanged(Platform::Object^ sender, DefaultAudioRenderDeviceChangedEventArgs^ args) | ||||
| void SDL_WasapiDeviceEventHandler::OnDefaultRenderDeviceChanged(Platform::Object ^ sender, DefaultAudioRenderDeviceChangedEventArgs ^ args) | ||||
| { | ||||
|     SDL_assert(this->iscapture); | ||||
|     SDL_AtomicAdd(&SDL_IMMDevice_DefaultPlaybackGeneration, 1); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_WasapiDeviceEventHandler::OnDefaultCaptureDeviceChanged(Platform::Object^ sender, DefaultAudioCaptureDeviceChangedEventArgs^ args) | ||||
| void SDL_WasapiDeviceEventHandler::OnDefaultCaptureDeviceChanged(Platform::Object ^ sender, DefaultAudioCaptureDeviceChangedEventArgs ^ args) | ||||
| { | ||||
|     SDL_assert(!this->iscapture); | ||||
|     SDL_AtomicAdd(&SDL_IMMDevice_DefaultCaptureGeneration, 1); | ||||
| } | ||||
|  | ||||
|  | ||||
| static SDL_WasapiDeviceEventHandler *playback_device_event_handler; | ||||
| static SDL_WasapiDeviceEventHandler *capture_device_event_handler; | ||||
|  | ||||
| @@ -240,10 +231,11 @@ void WASAPI_EnumerateEndpoints(void) | ||||
|     SDL_SemWait(capture_device_event_handler->completed); | ||||
| } | ||||
|  | ||||
| struct SDL_WasapiActivationHandler : public RuntimeClass< RuntimeClassFlags< ClassicCom >, FtmBase, IActivateAudioInterfaceCompletionHandler > | ||||
| struct SDL_WasapiActivationHandler : public RuntimeClass<RuntimeClassFlags<ClassicCom>, FtmBase, IActivateAudioInterfaceCompletionHandler> | ||||
| { | ||||
|     SDL_WasapiActivationHandler() : device(nullptr) {} | ||||
|     STDMETHOD(ActivateCompleted)(IActivateAudioInterfaceAsyncOperation *operation); | ||||
|     STDMETHOD(ActivateCompleted) | ||||
|     (IActivateAudioInterfaceAsyncOperation *operation); | ||||
|     SDL_AudioDevice *device; | ||||
| }; | ||||
|  | ||||
| @@ -256,23 +248,20 @@ SDL_WasapiActivationHandler::ActivateCompleted(IActivateAudioInterfaceAsyncOpera | ||||
|     return S_OK; | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_PlatformDeleteActivationHandler(void *handler) | ||||
| void WASAPI_PlatformDeleteActivationHandler(void *handler) | ||||
| { | ||||
|     ((SDL_WasapiActivationHandler *) handler)->Release(); | ||||
|     ((SDL_WasapiActivationHandler *)handler)->Release(); | ||||
| } | ||||
|  | ||||
| int | ||||
| WASAPI_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| int WASAPI_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| { | ||||
|     return SDL_Unsupported(); | ||||
| } | ||||
|  | ||||
| int | ||||
| WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery) | ||||
| int WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery) | ||||
| { | ||||
|     LPCWSTR devid = _this->hidden->devid; | ||||
|     Platform::String^ defdevid; | ||||
|     Platform::String ^ defdevid; | ||||
|  | ||||
|     if (devid == nullptr) { | ||||
|         defdevid = _this->iscapture ? MediaDevice::GetDefaultAudioCaptureId(AudioDeviceRole::Default) : MediaDevice::GetDefaultAudioRenderId(AudioDeviceRole::Default); | ||||
| @@ -288,11 +277,11 @@ WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery) | ||||
|         return SDL_SetError("Failed to allocate WASAPI activation handler"); | ||||
|     } | ||||
|  | ||||
|     handler.Get()->AddRef();  // we hold a reference after ComPtr destructs on return, causing a Release, and Release ourselves in WASAPI_PlatformDeleteActivationHandler(), etc. | ||||
|     handler.Get()->AddRef(); // we hold a reference after ComPtr destructs on return, causing a Release, and Release ourselves in WASAPI_PlatformDeleteActivationHandler(), etc. | ||||
|     handler.Get()->device = _this; | ||||
|     _this->hidden->activation_handler = handler.Get(); | ||||
|  | ||||
|     WASAPI_RefDevice(_this);  /* completion handler will unref it. */ | ||||
|     WASAPI_RefDevice(_this); /* completion handler will unref it. */ | ||||
|     IActivateAudioInterfaceAsyncOperation *async = nullptr; | ||||
|     const HRESULT ret = ActivateAudioInterfaceAsync(devid, __uuidof(IAudioClient), nullptr, handler.Get(), &async); | ||||
|  | ||||
| @@ -339,22 +328,20 @@ WASAPI_ActivateDevice(_THIS, const SDL_bool isrecovery) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_PlatformThreadInit(_THIS) | ||||
| void WASAPI_PlatformThreadInit(_THIS) | ||||
| { | ||||
|     // !!! FIXME: set this thread to "Pro Audio" priority. | ||||
| } | ||||
|  | ||||
| void | ||||
| WASAPI_PlatformThreadDeinit(_THIS) | ||||
| void WASAPI_PlatformThreadDeinit(_THIS) | ||||
| { | ||||
|     // !!! FIXME: set this thread to "Pro Audio" priority. | ||||
| } | ||||
|  | ||||
| /* Everything below was copied from SDL_wasapi.c, before it got moved to SDL_immdevice.c! */ | ||||
|  | ||||
| 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_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 } }; | ||||
|  | ||||
| extern "C" SDL_AudioFormat | ||||
| WaveFormatToSDLFormat(WAVEFORMATEX *waveformat) | ||||
| @@ -378,8 +365,7 @@ WaveFormatToSDLFormat(WAVEFORMATEX *waveformat) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| WASAPI_RemoveDevice(const SDL_bool iscapture, LPCWSTR devid) | ||||
| static void WASAPI_RemoveDevice(const SDL_bool iscapture, LPCWSTR devid) | ||||
| { | ||||
|     DevIdList *i; | ||||
|     DevIdList *next; | ||||
| @@ -401,8 +387,7 @@ WASAPI_RemoveDevice(const SDL_bool iscapture, LPCWSTR devid) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| WASAPI_AddDevice(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENSIBLE *fmt, LPCWSTR devid) | ||||
| static void WASAPI_AddDevice(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENSIBLE *fmt, LPCWSTR devid) | ||||
| { | ||||
|     DevIdList *devidlist; | ||||
|     SDL_AudioSpec spec; | ||||
| @@ -412,22 +397,22 @@ WASAPI_AddDevice(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENS | ||||
|        phones and tablets, where you might have an internal speaker and a headphone jack and expect both to be | ||||
|        available and switch automatically. (!!! FIXME...?) */ | ||||
|  | ||||
|        /* see if we already have this one. */ | ||||
|     /* see if we already have this one. */ | ||||
|     for (devidlist = deviceid_list; devidlist; devidlist = devidlist->next) { | ||||
|         if (SDL_wcscmp(devidlist->str, devid) == 0) { | ||||
|             return;  /* we already have this. */ | ||||
|             return; /* we already have this. */ | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     devidlist = (DevIdList *)SDL_malloc(sizeof(*devidlist)); | ||||
|     if (devidlist == NULL) { | ||||
|         return;  /* oh well. */ | ||||
|         return; /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     devid = SDL_wcsdup(devid); | ||||
|     if (!devid) { | ||||
|         SDL_free(devidlist); | ||||
|         return;  /* oh well. */ | ||||
|         return; /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     devidlist->str = (WCHAR *)devid; | ||||
| @@ -441,6 +426,6 @@ WASAPI_AddDevice(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENS | ||||
|     SDL_AddAudioDevice(iscapture, devname, &spec, (void *)devid); | ||||
| } | ||||
|  | ||||
| #endif  // SDL_AUDIO_DRIVER_WASAPI && defined(__WINRT__) | ||||
| #endif // SDL_AUDIO_DRIVER_WASAPI && defined(__WINRT__) | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -46,14 +46,14 @@ extern SDL_bool Android_JNI_GetAccelerometerValues(float values[3]); | ||||
| extern void Android_JNI_ShowTextInput(SDL_Rect *inputRect); | ||||
| extern void Android_JNI_HideTextInput(void); | ||||
| extern SDL_bool Android_JNI_IsScreenKeyboardShown(void); | ||||
| extern ANativeWindow* Android_JNI_GetNativeWindow(void); | ||||
| extern ANativeWindow *Android_JNI_GetNativeWindow(void); | ||||
|  | ||||
| extern SDL_DisplayOrientation Android_JNI_GetDisplayOrientation(void); | ||||
| extern int Android_JNI_GetDisplayDPI(float *ddpi, float *xdpi, float *ydpi); | ||||
|  | ||||
| /* Audio support */ | ||||
| extern int Android_JNI_OpenAudioDevice(int iscapture, SDL_AudioSpec *spec); | ||||
| extern void* Android_JNI_GetAudioBuffer(void); | ||||
| extern void *Android_JNI_GetAudioBuffer(void); | ||||
| extern void Android_JNI_WriteAudioBuffer(void); | ||||
| extern int Android_JNI_CaptureAudioBuffer(void *buffer, int buflen); | ||||
| extern void Android_JNI_FlushCapturedAudio(void); | ||||
| @@ -77,12 +77,12 @@ int Android_JNI_FileClose(SDL_RWops* ctx); | ||||
| void Android_JNI_GetManifestEnvironmentVariables(void); | ||||
|  | ||||
| /* Clipboard support */ | ||||
| int Android_JNI_SetClipboardText(const char* text); | ||||
| char* Android_JNI_GetClipboardText(void); | ||||
| int Android_JNI_SetClipboardText(const char *text); | ||||
| char *Android_JNI_GetClipboardText(void); | ||||
| SDL_bool Android_JNI_HasClipboardText(void); | ||||
|  | ||||
| /* Power support */ | ||||
| int Android_JNI_GetPowerInfo(int* plugged, int* charged, int* battery, int* seconds, int* percent); | ||||
| int Android_JNI_GetPowerInfo(int *plugged, int *charged, int *battery, int *seconds, int *percent); | ||||
|  | ||||
| /* Joystick support */ | ||||
| void Android_JNI_PollInputDevices(void); | ||||
| @@ -110,7 +110,7 @@ int Android_JNI_GetLocale(char *buf, size_t buflen); | ||||
| int Android_JNI_SendMessage(int command, int param); | ||||
|  | ||||
| /* Init */ | ||||
| JNIEXPORT void JNICALL SDL_Android_Init(JNIEnv* mEnv, jclass cls); | ||||
| JNIEXPORT void JNICALL SDL_Android_Init(JNIEnv *mEnv, jclass cls); | ||||
|  | ||||
| /* MessageBox */ | ||||
| #include "SDL_messagebox.h" | ||||
| @@ -130,7 +130,7 @@ SDL_bool Android_JNI_SetRelativeMouseEnabled(SDL_bool enabled); | ||||
| SDL_bool Android_JNI_RequestPermission(const char *permission); | ||||
|  | ||||
| /* Show toast notification */ | ||||
| int Android_JNI_ShowToast(const char* message, int duration, int gravity, int xOffset, int yOffset); | ||||
| int Android_JNI_ShowToast(const char *message, int duration, int gravity, int xOffset, int yOffset); | ||||
|  | ||||
| int Android_JNI_OpenURL(const char *url); | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| #include <sys/kbio.h> | ||||
|  | ||||
| /* *INDENT-OFF* */ /* clang-format off */ | ||||
| /* | ||||
|  * Automatically generated from /usr/share/vt/keymaps/us.acc.kbd. | ||||
|  * DO NOT EDIT! | ||||
| @@ -163,3 +164,4 @@ static accentmap_t accentmap_default_us_acc = { 11, { | ||||
|     { 0x00 },  | ||||
| } }; | ||||
|  | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|   | ||||
| @@ -39,7 +39,7 @@ | ||||
| #include "../../events/SDL_events_c.h" | ||||
| #include "SDL_evdev_kbd_default_keyaccmap.h" | ||||
|  | ||||
| typedef void (fn_handler_fn)(SDL_EVDEV_keyboard_state *kbd); | ||||
| typedef void(fn_handler_fn)(SDL_EVDEV_keyboard_state *kbd); | ||||
|  | ||||
| /* | ||||
|  * Keyboard State | ||||
| @@ -51,14 +51,14 @@ struct SDL_EVDEV_keyboard_state | ||||
|     int keyboard_fd; | ||||
|     unsigned long old_kbd_mode; | ||||
|     unsigned short **key_maps; | ||||
|     keymap_t* key_map; | ||||
|     keyboard_info_t* kbInfo; | ||||
|     unsigned char shift_down[4];        /* shift state counters.. */ | ||||
|     keymap_t *key_map; | ||||
|     keyboard_info_t *kbInfo; | ||||
|     unsigned char shift_down[4]; /* shift state counters.. */ | ||||
|     SDL_bool dead_key_next; | ||||
|     int npadch;                    /* -1 or number assembled on pad */ | ||||
|     int npadch; /* -1 or number assembled on pad */ | ||||
|     accentmap_t *accents; | ||||
|     unsigned int diacr; | ||||
|     SDL_bool rep;                    /* flag telling character repeat */ | ||||
|     SDL_bool rep; /* flag telling character repeat */ | ||||
|     unsigned char lockstate; | ||||
|     unsigned char ledflagstate; | ||||
|     char shift_state; | ||||
| @@ -71,24 +71,23 @@ static int SDL_EVDEV_kbd_load_keymaps(SDL_EVDEV_keyboard_state *kbd) | ||||
|     return ioctl(kbd->keyboard_fd, GIO_KEYMAP, kbd->key_map) >= 0; | ||||
| } | ||||
|  | ||||
| static SDL_EVDEV_keyboard_state * kbd_cleanup_state = NULL; | ||||
| static SDL_EVDEV_keyboard_state *kbd_cleanup_state = NULL; | ||||
| static int kbd_cleanup_sigactions_installed = 0; | ||||
| static int kbd_cleanup_atexit_installed = 0; | ||||
|  | ||||
| static struct sigaction old_sigaction[NSIG]; | ||||
|  | ||||
| static int fatal_signals[] = | ||||
| { | ||||
| static int fatal_signals[] = { | ||||
|     /* Handlers for SIGTERM and SIGINT are installed in SDL_QuitInit. */ | ||||
|     SIGHUP,  SIGQUIT, SIGILL,  SIGABRT, | ||||
|     SIGFPE,  SIGSEGV, SIGPIPE, SIGBUS, | ||||
|     SIGHUP, SIGQUIT, SIGILL, SIGABRT, | ||||
|     SIGFPE, SIGSEGV, SIGPIPE, SIGBUS, | ||||
|     SIGSYS | ||||
| }; | ||||
|  | ||||
| static void kbd_cleanup(void) | ||||
| { | ||||
|     struct mouse_info mData; | ||||
|     SDL_EVDEV_keyboard_state* kbd = kbd_cleanup_state; | ||||
|     SDL_EVDEV_keyboard_state *kbd = kbd_cleanup_state; | ||||
|     if (kbd == NULL) { | ||||
|         return; | ||||
|     } | ||||
| @@ -103,18 +102,17 @@ static void kbd_cleanup(void) | ||||
|     ioctl(kbd->console_fd, CONS_MOUSECTL, &mData); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_EVDEV_kbd_reraise_signal(int sig) | ||||
| void SDL_EVDEV_kbd_reraise_signal(int sig) | ||||
| { | ||||
|     raise(sig); | ||||
| } | ||||
|  | ||||
| siginfo_t* SDL_EVDEV_kdb_cleanup_siginfo = NULL; | ||||
| void*      SDL_EVDEV_kdb_cleanup_ucontext = NULL; | ||||
| siginfo_t *SDL_EVDEV_kdb_cleanup_siginfo = NULL; | ||||
| void *SDL_EVDEV_kdb_cleanup_ucontext = NULL; | ||||
|  | ||||
| static void kbd_cleanup_signal_action(int signum, siginfo_t* info, void* ucontext) | ||||
| static void kbd_cleanup_signal_action(int signum, siginfo_t *info, void *ucontext) | ||||
| { | ||||
|     struct sigaction* old_action_p = &(old_sigaction[signum]); | ||||
|     struct sigaction *old_action_p = &(old_sigaction[signum]); | ||||
|     sigset_t sigset; | ||||
|  | ||||
|     /* Restore original signal handler before going any further. */ | ||||
| @@ -148,7 +146,7 @@ static void kbd_unregister_emerg_cleanup() | ||||
|     kbd_cleanup_sigactions_installed = 0; | ||||
|  | ||||
|     for (tabidx = 0; tabidx < sizeof(fatal_signals) / sizeof(fatal_signals[0]); ++tabidx) { | ||||
|         struct sigaction* old_action_p; | ||||
|         struct sigaction *old_action_p; | ||||
|         struct sigaction cur_action; | ||||
|         signum = fatal_signals[tabidx]; | ||||
|         old_action_p = &(old_sigaction[signum]); | ||||
| @@ -177,7 +175,7 @@ static void kbd_cleanup_atexit(void) | ||||
|     kbd_unregister_emerg_cleanup(); | ||||
| } | ||||
|  | ||||
| static void kbd_register_emerg_cleanup(SDL_EVDEV_keyboard_state * kbd) | ||||
| static void kbd_register_emerg_cleanup(SDL_EVDEV_keyboard_state *kbd) | ||||
| { | ||||
|     int tabidx, signum; | ||||
|  | ||||
| @@ -201,7 +199,7 @@ static void kbd_register_emerg_cleanup(SDL_EVDEV_keyboard_state * kbd) | ||||
|     kbd_cleanup_sigactions_installed = 1; | ||||
|  | ||||
|     for (tabidx = 0; tabidx < sizeof(fatal_signals) / sizeof(fatal_signals[0]); ++tabidx) { | ||||
|         struct sigaction* old_action_p; | ||||
|         struct sigaction *old_action_p; | ||||
|         struct sigaction new_action; | ||||
|         signum = fatal_signals[tabidx]; | ||||
|         old_action_p = &(old_sigaction[signum]); | ||||
| @@ -212,7 +210,7 @@ static void kbd_register_emerg_cleanup(SDL_EVDEV_keyboard_state * kbd) | ||||
|         /* Skip SIGHUP and SIGPIPE if handler is already installed | ||||
|          * - assume the handler will do the cleanup | ||||
|          */ | ||||
|         if ((signum == SIGHUP || signum == SIGPIPE) && (old_action_p->sa_handler != SIG_DFL || (void(*)(int))old_action_p->sa_sigaction != SIG_DFL)) { | ||||
|         if ((signum == SIGHUP || signum == SIGPIPE) && (old_action_p->sa_handler != SIG_DFL || (void (*)(int))old_action_p->sa_sigaction != SIG_DFL)) { | ||||
|             continue; | ||||
|         } | ||||
|  | ||||
| @@ -229,7 +227,7 @@ SDL_EVDEV_kbd_init(void) | ||||
|     SDL_EVDEV_keyboard_state *kbd; | ||||
|     struct mouse_info mData; | ||||
|     char flag_state; | ||||
|     char* devicePath; | ||||
|     char *devicePath; | ||||
|  | ||||
|     SDL_zero(mData); | ||||
|     mData.operation = MOUSE_HIDE; | ||||
| @@ -289,14 +287,14 @@ SDL_EVDEV_kbd_init(void) | ||||
|                 kbd_register_emerg_cleanup(kbd); | ||||
|             } | ||||
|             SDL_free(devicePath); | ||||
|         } else kbd->keyboard_fd = kbd->console_fd; | ||||
|         } else | ||||
|             kbd->keyboard_fd = kbd->console_fd; | ||||
|     } | ||||
|  | ||||
|     return kbd; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd) | ||||
| void SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd) | ||||
| { | ||||
|     struct mouse_info mData; | ||||
|  | ||||
| @@ -330,7 +328,7 @@ SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd) | ||||
| static void put_queue(SDL_EVDEV_keyboard_state *kbd, uint c) | ||||
| { | ||||
|     /* c is already part of a UTF-8 sequence and safe to add as a character */ | ||||
|     if (kbd->text_len < (sizeof(kbd->text)-1)) { | ||||
|     if (kbd->text_len < (sizeof(kbd->text) - 1)) { | ||||
|         kbd->text[kbd->text_len++] = (char)c; | ||||
|     } | ||||
| } | ||||
| @@ -381,12 +379,12 @@ static unsigned int handle_diacr(SDL_EVDEV_keyboard_state *kbd, unsigned int ch) | ||||
|     for (i = 0; i < kbd->accents->n_accs; i++) { | ||||
|         if (kbd->accents->acc[i].accchar == d) { | ||||
|             for (j = 0; j < NUM_ACCENTCHARS; ++j) { | ||||
|                     if (kbd->accents->acc[i].map[j][0] == 0) { /* end of table */ | ||||
|                             break; | ||||
|                     }  | ||||
|                     if (kbd->accents->acc[i].map[j][0] == ch) { | ||||
|                             return kbd->accents->acc[i].map[j][1]; | ||||
|                     } | ||||
|                 if (kbd->accents->acc[i].map[j][0] == 0) { /* end of table */ | ||||
|                     break; | ||||
|                 } | ||||
|                 if (kbd->accents->acc[i].map[j][0] == ch) { | ||||
|                     return kbd->accents->acc[i].map[j][1]; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -471,8 +469,7 @@ static void k_shift(SDL_EVDEV_keyboard_state *kbd, unsigned char value, char up_ | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *kbd, unsigned int keycode, int down) | ||||
| void SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *kbd, unsigned int keycode, int down) | ||||
| { | ||||
|     keymap_t key_map; | ||||
|     struct keyent_t keysym; | ||||
| @@ -526,7 +523,7 @@ SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *kbd, unsigned int keycode, int d | ||||
|                 k_deadunicode(kbd, kbd->accents->acc[accent_index].accchar, !down); | ||||
|             } | ||||
|         } else { | ||||
|             switch(map_from_key_sym) { | ||||
|             switch (map_from_key_sym) { | ||||
|             case ASH: /* alt/meta shift */ | ||||
|                 k_shift(kbd, 3, down == 0); | ||||
|                 break; | ||||
|   | ||||
| @@ -39,16 +39,15 @@ PAPPSTATE_REGISTRATION hPLM = {}; | ||||
| HANDLE plmSuspendComplete = nullptr; | ||||
|  | ||||
| extern "C" DECLSPEC int | ||||
| SDL_GDKGetTaskQueue(XTaskQueueHandle * outTaskQueue) | ||||
| SDL_GDKGetTaskQueue(XTaskQueueHandle *outTaskQueue) | ||||
| { | ||||
|     /* If this is the first call, first create the global task queue. */ | ||||
|     if (!GDK_GlobalTaskQueue) { | ||||
|         HRESULT hr; | ||||
|  | ||||
|         hr = XTaskQueueCreate(XTaskQueueDispatchMode::ThreadPool, | ||||
|             XTaskQueueDispatchMode::Manual, | ||||
|             &GDK_GlobalTaskQueue | ||||
|             ); | ||||
|                               XTaskQueueDispatchMode::Manual, | ||||
|                               &GDK_GlobalTaskQueue); | ||||
|         if (FAILED(hr)) { | ||||
|             return SDL_SetError("[GDK] Could not create global task queue"); | ||||
|         } | ||||
| @@ -88,7 +87,7 @@ OutOfMemory(void) | ||||
|  | ||||
| /* Gets the arguments with GetCommandLine, converts them to argc and argv | ||||
|    and calls SDL_main */ | ||||
| extern "C"  DECLSPEC int | ||||
| extern "C" DECLSPEC int | ||||
| SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved) | ||||
| { | ||||
|     LPWSTR *argvw; | ||||
| @@ -108,7 +107,7 @@ SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved) | ||||
|      */ | ||||
|  | ||||
|     /* Parse it into argv and argc */ | ||||
|     argv = (char **) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (argc + 1) * sizeof(*argv)); | ||||
|     argv = (char **)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (argc + 1) * sizeof(*argv)); | ||||
|     if (argv == NULL) { | ||||
|         return OutOfMemory(); | ||||
|     } | ||||
| @@ -118,8 +117,8 @@ SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved) | ||||
|         if (arg == NULL) { | ||||
|             return OutOfMemory(); | ||||
|         } | ||||
|         len = (DWORD) SDL_strlen(arg); | ||||
|         argv[i] = (char *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len + 1); | ||||
|         len = (DWORD)SDL_strlen(arg); | ||||
|         argv[i] = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len + 1); | ||||
|         if (!argv[i]) { | ||||
|             return OutOfMemory(); | ||||
|         } | ||||
| @@ -154,12 +153,11 @@ SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved) | ||||
|  | ||||
|         /* Register suspend/resume handling */ | ||||
|         plmSuspendComplete = CreateEventEx(nullptr, nullptr, 0, EVENT_MODIFY_STATE | SYNCHRONIZE); | ||||
|         if (!plmSuspendComplete ) { | ||||
|         if (!plmSuspendComplete) { | ||||
|             SDL_SetError("[GDK] Unable to create plmSuspendComplete event"); | ||||
|             return -1; | ||||
|         } | ||||
|         auto rascn = [](BOOLEAN quiesced, PVOID context) | ||||
|         { | ||||
|         auto rascn = [](BOOLEAN quiesced, PVOID context) { | ||||
|             SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "[GDK] in RegisterAppStateChangeNotification handler"); | ||||
|             if (quiesced) { | ||||
|                 ResetEvent(plmSuspendComplete); | ||||
| @@ -214,7 +212,8 @@ SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved) | ||||
| } | ||||
|  | ||||
| extern "C" DECLSPEC void | ||||
| SDL_GDKSuspendComplete() { | ||||
| SDL_GDKSuspendComplete() | ||||
| { | ||||
|     if (plmSuspendComplete) { | ||||
|         SetEvent(plmSuspendComplete); | ||||
|     } | ||||
|   | ||||
| @@ -34,14 +34,14 @@ static char *inhibit_handle = NULL; | ||||
| static unsigned int screensaver_cookie = 0; | ||||
| static SDL_DBusContext dbus; | ||||
|  | ||||
| static int | ||||
| LoadDBUSSyms(void) | ||||
| static int LoadDBUSSyms(void) | ||||
| { | ||||
|     #define SDL_DBUS_SYM2(x, y) \ | ||||
|         if (!(dbus.x = SDL_LoadFunction(dbus_handle, #y))) return -1 | ||||
| #define SDL_DBUS_SYM2(x, y)                            \ | ||||
|     if (!(dbus.x = SDL_LoadFunction(dbus_handle, #y))) \ | ||||
|     return -1 | ||||
|  | ||||
|     #define SDL_DBUS_SYM(x) \ | ||||
|         SDL_DBUS_SYM2(x, dbus_##x) | ||||
| #define SDL_DBUS_SYM(x) \ | ||||
|     SDL_DBUS_SYM2(x, dbus_##x) | ||||
|  | ||||
|     SDL_DBUS_SYM(bus_get_private); | ||||
|     SDL_DBUS_SYM(bus_register); | ||||
| @@ -83,14 +83,13 @@ LoadDBUSSyms(void) | ||||
|     SDL_DBUS_SYM(free_string_array); | ||||
|     SDL_DBUS_SYM(shutdown); | ||||
|  | ||||
|     #undef SDL_DBUS_SYM | ||||
|     #undef SDL_DBUS_SYM2 | ||||
| #undef SDL_DBUS_SYM | ||||
| #undef SDL_DBUS_SYM2 | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| UnloadDBUSLibrary(void) | ||||
| static void UnloadDBUSLibrary(void) | ||||
| { | ||||
|     if (dbus_handle != NULL) { | ||||
|         SDL_UnloadObject(dbus_handle); | ||||
| @@ -98,8 +97,7 @@ UnloadDBUSLibrary(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| LoadDBUSLibrary(void) | ||||
| static int LoadDBUSLibrary(void) | ||||
| { | ||||
|     int retval = 0; | ||||
|     if (dbus_handle == NULL) { | ||||
| @@ -118,24 +116,22 @@ LoadDBUSLibrary(void) | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
|  | ||||
| static SDL_SpinLock spinlock_dbus_init = 0; | ||||
|  | ||||
| /* you must hold spinlock_dbus_init before calling this! */ | ||||
| static void | ||||
| SDL_DBus_Init_Spinlocked(void) | ||||
| static void SDL_DBus_Init_Spinlocked(void) | ||||
| { | ||||
|     static SDL_bool is_dbus_available = SDL_TRUE; | ||||
|     if (!is_dbus_available) { | ||||
|         return;  /* don't keep trying if this fails. */ | ||||
|         return; /* don't keep trying if this fails. */ | ||||
|     } | ||||
|  | ||||
|     if (!dbus.session_conn) { | ||||
|         DBusError err; | ||||
|  | ||||
|         if (LoadDBUSLibrary() == -1) { | ||||
|             is_dbus_available = SDL_FALSE;  /* can't load at all? Don't keep trying. */ | ||||
|             return;  /* oh well */ | ||||
|             is_dbus_available = SDL_FALSE; /* can't load at all? Don't keep trying. */ | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (!dbus.threads_init_default()) { | ||||
| @@ -151,7 +147,7 @@ SDL_DBus_Init_Spinlocked(void) | ||||
|             dbus.error_free(&err); | ||||
|             SDL_DBus_Quit(); | ||||
|             is_dbus_available = SDL_FALSE; | ||||
|             return;  /* oh well */ | ||||
|             return; /* oh well */ | ||||
|         } | ||||
|         dbus.connection_set_exit_on_disconnect(dbus.session_conn, 0); | ||||
|  | ||||
| @@ -165,16 +161,14 @@ SDL_DBus_Init_Spinlocked(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_DBus_Init(void) | ||||
| 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_AtomicUnlock(&spinlock_dbus_init); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_DBus_Quit(void) | ||||
| void SDL_DBus_Quit(void) | ||||
| { | ||||
|     if (dbus.system_conn) { | ||||
|         dbus.connection_close(dbus.system_conn); | ||||
| @@ -208,8 +202,7 @@ SDL_DBus_GetContext(void) | ||||
|     return (dbus_handle && dbus.session_conn) ? &dbus : NULL; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| SDL_DBus_CallMethodInternal(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, va_list ap) | ||||
| static SDL_bool 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; | ||||
|  | ||||
| @@ -218,7 +211,7 @@ SDL_DBus_CallMethodInternal(DBusConnection *conn, const char *node, const char * | ||||
|         if (msg) { | ||||
|             int firstarg; | ||||
|             va_list ap_reply; | ||||
|             va_copy(ap_reply, ap);  /* copy the arg list so we don't compete with D-Bus for it */ | ||||
|             va_copy(ap_reply, ap); /* copy the arg list so we don't compete with D-Bus for it */ | ||||
|             firstarg = va_arg(ap, int); | ||||
|             if ((firstarg == DBUS_TYPE_INVALID) || dbus.message_append_args_valist(msg, firstarg, ap)) { | ||||
|                 DBusMessage *reply = dbus.connection_send_with_reply_and_block(conn, msg, 300, NULL); | ||||
| @@ -226,9 +219,15 @@ SDL_DBus_CallMethodInternal(DBusConnection *conn, const char *node, const char * | ||||
|                     /* skip any input args, get to output args. */ | ||||
|                     while ((firstarg = va_arg(ap_reply, int)) != DBUS_TYPE_INVALID) { | ||||
|                         /* 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) { | ||||
|                             { 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); | ||||
| @@ -268,8 +267,7 @@ SDL_DBus_CallMethod(const char *node, const char *path, const char *interface, c | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| SDL_DBus_CallVoidMethodInternal(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, va_list ap) | ||||
| static SDL_bool 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; | ||||
|  | ||||
| @@ -291,8 +289,7 @@ SDL_DBus_CallVoidMethodInternal(DBusConnection *conn, const char *node, const ch | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| SDL_DBus_CallWithBasicReply(DBusConnection *conn, DBusMessage *msg, const int expectedtype, void *result) | ||||
| static SDL_bool SDL_DBus_CallWithBasicReply(DBusConnection *conn, DBusMessage *msg, const int expectedtype, void *result) | ||||
| { | ||||
|     SDL_bool retval = SDL_FALSE; | ||||
|  | ||||
| @@ -363,19 +360,16 @@ 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); | ||||
| } | ||||
|  | ||||
|  | ||||
| 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. */ | ||||
|         SDL_DBus_CallVoidMethod("org.gnome.ScreenSaver", "/org/gnome/ScreenSaver", "org.gnome.ScreenSaver", "SimulateUserActivity", DBUS_TYPE_INVALID); | ||||
|         SDL_DBus_CallVoidMethod("org.freedesktop.ScreenSaver", "/org/freedesktop/ScreenSaver", "org.freedesktop.ScreenSaver", "SimulateUserActivity", DBUS_TYPE_INVALID); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| SDL_DBus_AppendDictWithKeyValue(DBusMessageIter *iterInit, const char *key, const char *value) | ||||
| static SDL_bool SDL_DBus_AppendDictWithKeyValue(DBusMessageIter *iterInit, const char *key, const char *value) | ||||
| { | ||||
|     DBusMessageIter iterDict, iterEntry, iterValue; | ||||
|  | ||||
| @@ -399,9 +393,7 @@ SDL_DBus_AppendDictWithKeyValue(DBusMessageIter *iterInit, const char *key, cons | ||||
|         goto failed; | ||||
|     } | ||||
|  | ||||
|     if (!dbus.message_iter_close_container(&iterEntry, &iterValue) | ||||
|         || !dbus.message_iter_close_container(&iterDict, &iterEntry) | ||||
|         || !dbus.message_iter_close_container(iterInit, &iterDict)) { | ||||
|     if (!dbus.message_iter_close_container(&iterEntry, &iterValue) || !dbus.message_iter_close_container(&iterDict, &iterEntry) || !dbus.message_iter_close_container(iterInit, &iterDict)) { | ||||
|         goto failed; | ||||
|     } | ||||
|  | ||||
| @@ -419,8 +411,7 @@ SDL_DBus_ScreensaverInhibit(SDL_bool inhibit) | ||||
| { | ||||
|     const char *default_inhibit_reason = "Playing a game"; | ||||
|  | ||||
|     if ( (inhibit && (screensaver_cookie != 0 || inhibit_handle != NULL)) | ||||
|         || (!inhibit && (screensaver_cookie == 0 && inhibit_handle == NULL)) ) { | ||||
|     if ((inhibit && (screensaver_cookie != 0 || inhibit_handle != NULL)) || (!inhibit && (screensaver_cookie == 0 && inhibit_handle == NULL))) { | ||||
|         return SDL_TRUE; | ||||
|     } | ||||
|  | ||||
| @@ -434,7 +425,7 @@ SDL_DBus_ScreensaverInhibit(SDL_bool inhibit) | ||||
|         const char *bus_name = "org.freedesktop.portal.Desktop"; | ||||
|         const char *path = "/org/freedesktop/portal/desktop"; | ||||
|         const char *interface = "org.freedesktop.portal.Inhibit"; | ||||
|         const char *window = ""; /* As a future improvement we could gather the X11 XID or Wayland surface identifier */ | ||||
|         const char *window = "";                    /* As a future improvement we could gather the X11 XID or Wayland surface identifier */ | ||||
|         static const unsigned int INHIBIT_IDLE = 8; /* Taken from the portal API reference */ | ||||
|         DBusMessageIter iterInit; | ||||
|  | ||||
| @@ -487,15 +478,15 @@ SDL_DBus_ScreensaverInhibit(SDL_bool inhibit) | ||||
|             const char *app = SDL_GetHint(SDL_HINT_APP_NAME); | ||||
|             const char *reason = SDL_GetHint(SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME); | ||||
|             if (app == NULL || !app[0]) { | ||||
|                app  = "My SDL application"; | ||||
|                 app = "My SDL application"; | ||||
|             } | ||||
|             if (reason == NULL || !reason[0]) { | ||||
|                 reason = default_inhibit_reason; | ||||
|             } | ||||
|  | ||||
|             if (!SDL_DBus_CallMethod(bus_name, path, interface, "Inhibit", | ||||
|                     DBUS_TYPE_STRING, &app, DBUS_TYPE_STRING, &reason, DBUS_TYPE_INVALID, | ||||
|                     DBUS_TYPE_UINT32, &screensaver_cookie, DBUS_TYPE_INVALID)) { | ||||
|                                      DBUS_TYPE_STRING, &app, DBUS_TYPE_STRING, &reason, DBUS_TYPE_INVALID, | ||||
|                                      DBUS_TYPE_UINT32, &screensaver_cookie, DBUS_TYPE_INVALID)) { | ||||
|                 return SDL_FALSE; | ||||
|             } | ||||
|             return (screensaver_cookie != 0) ? SDL_TRUE : SDL_FALSE; | ||||
|   | ||||
| @@ -29,20 +29,20 @@ | ||||
| #include "SDL_stdinc.h" | ||||
| #include <dbus/dbus.h> | ||||
|  | ||||
|  | ||||
| typedef struct SDL_DBusContext { | ||||
| typedef struct SDL_DBusContext | ||||
| { | ||||
|     DBusConnection *session_conn; | ||||
|     DBusConnection *system_conn; | ||||
|  | ||||
|     DBusConnection *(*bus_get_private)(DBusBusType, DBusError *); | ||||
|     dbus_bool_t (*bus_register)(DBusConnection *, DBusError *); | ||||
|     void (*bus_add_match)(DBusConnection *, const char *, DBusError *); | ||||
|     DBusConnection * (*connection_open_private)(const char *, DBusError *); | ||||
|     DBusConnection *(*connection_open_private)(const char *, DBusError *); | ||||
|     void (*connection_set_exit_on_disconnect)(DBusConnection *, dbus_bool_t); | ||||
|     dbus_bool_t (*connection_get_is_connected)(DBusConnection *); | ||||
|     dbus_bool_t (*connection_add_filter)(DBusConnection *, DBusHandleMessageFunction, void *, DBusFreeFunction); | ||||
|     dbus_bool_t (*connection_try_register_object_path)(DBusConnection *, const char *, | ||||
|         const DBusObjectPathVTable *, void *, DBusError *); | ||||
|                                                        const DBusObjectPathVTable *, void *, DBusError *); | ||||
|     dbus_bool_t (*connection_send)(DBusConnection *, DBusMessage *, dbus_uint32_t *); | ||||
|     DBusMessage *(*connection_send_with_reply_and_block)(DBusConnection *, DBusMessage *, int, DBusError *); | ||||
|     void (*connection_close)(DBusConnection *); | ||||
| @@ -79,7 +79,7 @@ typedef struct SDL_DBusContext { | ||||
|  | ||||
| extern void SDL_DBus_Init(void); | ||||
| extern void SDL_DBus_Quit(void); | ||||
| extern SDL_DBusContext * SDL_DBus_GetContext(void); | ||||
| extern SDL_DBusContext *SDL_DBus_GetContext(void); | ||||
|  | ||||
| /* These use the built-in Session connection. */ | ||||
| extern SDL_bool SDL_DBus_CallMethod(const char *node, const char *path, const char *interface, const char *method, ...); | ||||
|   | ||||
| @@ -51,15 +51,15 @@ | ||||
| #define SYN_DROPPED 3 | ||||
| #endif | ||||
| #ifndef ABS_MT_SLOT | ||||
| #define ABS_MT_SLOT         0x2f | ||||
| #define ABS_MT_POSITION_X   0x35 | ||||
| #define ABS_MT_POSITION_Y   0x36 | ||||
| #define ABS_MT_TRACKING_ID  0x39 | ||||
| #define ABS_MT_PRESSURE     0x3a | ||||
| #define ABS_MT_SLOT        0x2f | ||||
| #define ABS_MT_POSITION_X  0x35 | ||||
| #define ABS_MT_POSITION_Y  0x36 | ||||
| #define ABS_MT_TRACKING_ID 0x39 | ||||
| #define ABS_MT_PRESSURE    0x3a | ||||
| #endif | ||||
| #ifndef REL_WHEEL_HI_RES | ||||
| #define REL_WHEEL_HI_RES    0x0b | ||||
| #define REL_HWHEEL_HI_RES   0x0c | ||||
| #define REL_WHEEL_HI_RES  0x0b | ||||
| #define REL_HWHEEL_HI_RES 0x0c | ||||
| #endif | ||||
|  | ||||
| typedef struct SDL_evdevlist_item | ||||
| @@ -74,8 +74,9 @@ typedef struct SDL_evdevlist_item | ||||
|        keyboard, touchpad, etc.). Also there's probably some things in here we | ||||
|        can pull out to the SDL_evdevlist_item i.e. name */ | ||||
|     SDL_bool is_touchscreen; | ||||
|     struct { | ||||
|         char* name; | ||||
|     struct | ||||
|     { | ||||
|         char *name; | ||||
|  | ||||
|         int min_x, max_x, range_x; | ||||
|         int min_y, max_y, range_y; | ||||
| @@ -83,8 +84,10 @@ typedef struct SDL_evdevlist_item | ||||
|  | ||||
|         int max_slots; | ||||
|         int current_slot; | ||||
|         struct { | ||||
|             enum { | ||||
|         struct | ||||
|         { | ||||
|             enum | ||||
|             { | ||||
|                 EVDEV_TOUCH_SLOTDELTA_NONE = 0, | ||||
|                 EVDEV_TOUCH_SLOTDELTA_DOWN, | ||||
|                 EVDEV_TOUCH_SLOTDELTA_UP, | ||||
| @@ -126,33 +129,30 @@ static int SDL_EVDEV_device_removed(const char *dev_path); | ||||
| static int SDL_EVDEV_device_added(const char *dev_path, int udev_class); | ||||
| #if SDL_USE_LIBUDEV | ||||
| static void SDL_EVDEV_udev_callback(SDL_UDEV_deviceevent udev_type, int udev_class, | ||||
|     const char *dev_path); | ||||
|                                     const char *dev_path); | ||||
| #endif /* SDL_USE_LIBUDEV */ | ||||
|  | ||||
| static Uint8 EVDEV_MouseButtons[] = { | ||||
|     SDL_BUTTON_LEFT,            /*  BTN_LEFT        0x110 */ | ||||
|     SDL_BUTTON_RIGHT,           /*  BTN_RIGHT       0x111 */ | ||||
|     SDL_BUTTON_MIDDLE,          /*  BTN_MIDDLE      0x112 */ | ||||
|     SDL_BUTTON_X1,              /*  BTN_SIDE        0x113 */ | ||||
|     SDL_BUTTON_X2,              /*  BTN_EXTRA       0x114 */ | ||||
|     SDL_BUTTON_X2 + 1,          /*  BTN_FORWARD     0x115 */ | ||||
|     SDL_BUTTON_X2 + 2,          /*  BTN_BACK        0x116 */ | ||||
|     SDL_BUTTON_X2 + 3           /*  BTN_TASK        0x117 */ | ||||
|     SDL_BUTTON_LEFT,   /*  BTN_LEFT        0x110 */ | ||||
|     SDL_BUTTON_RIGHT,  /*  BTN_RIGHT       0x111 */ | ||||
|     SDL_BUTTON_MIDDLE, /*  BTN_MIDDLE      0x112 */ | ||||
|     SDL_BUTTON_X1,     /*  BTN_SIDE        0x113 */ | ||||
|     SDL_BUTTON_X2,     /*  BTN_EXTRA       0x114 */ | ||||
|     SDL_BUTTON_X2 + 1, /*  BTN_FORWARD     0x115 */ | ||||
|     SDL_BUTTON_X2 + 2, /*  BTN_BACK        0x116 */ | ||||
|     SDL_BUTTON_X2 + 3  /*  BTN_TASK        0x117 */ | ||||
| }; | ||||
|  | ||||
| static int | ||||
| SDL_EVDEV_SetRelativeMouseMode(SDL_bool enabled) | ||||
| static int SDL_EVDEV_SetRelativeMouseMode(SDL_bool enabled) | ||||
| { | ||||
|     /* Mice already send relative events through this interface */ | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| int | ||||
| SDL_EVDEV_Init(void) | ||||
| int SDL_EVDEV_Init(void) | ||||
| { | ||||
|     if (_this == NULL) { | ||||
|         _this = (SDL_EVDEV_PrivateData*)SDL_calloc(1, sizeof(*_this)); | ||||
|         _this = (SDL_EVDEV_PrivateData *)SDL_calloc(1, sizeof(*_this)); | ||||
|         if (_this == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
| @@ -182,14 +182,14 @@ SDL_EVDEV_Init(void) | ||||
|                where device class is an integer representing the | ||||
|                SDL_UDEV_deviceclass and path is the full path to | ||||
|                the event device. */ | ||||
|             const char* devices = SDL_getenv("SDL_EVDEV_DEVICES"); | ||||
|             const char *devices = SDL_getenv("SDL_EVDEV_DEVICES"); | ||||
|             if (devices) { | ||||
|                 /* Assume this is the old use of the env var and it is not in | ||||
|                    ROM. */ | ||||
|                 char* rest = (char*) devices; | ||||
|                 char* spec; | ||||
|                 char *rest = (char *)devices; | ||||
|                 char *spec; | ||||
|                 while ((spec = SDL_strtokr(rest, ",", &rest))) { | ||||
|                     char* endofcls = 0; | ||||
|                     char *endofcls = 0; | ||||
|                     long cls = SDL_strtol(spec, &endofcls, 0); | ||||
|                     if (endofcls) { | ||||
|                         SDL_EVDEV_device_added(endofcls + 1, cls); | ||||
| @@ -211,8 +211,7 @@ SDL_EVDEV_Init(void) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_EVDEV_Quit(void) | ||||
| void SDL_EVDEV_Quit(void) | ||||
| { | ||||
|     if (_this == NULL) { | ||||
|         return; | ||||
| @@ -244,13 +243,13 @@ SDL_EVDEV_Quit(void) | ||||
|  | ||||
| #if SDL_USE_LIBUDEV | ||||
| static void SDL_EVDEV_udev_callback(SDL_UDEV_deviceevent udev_event, int udev_class, | ||||
|     const char* dev_path) | ||||
|                                     const char *dev_path) | ||||
| { | ||||
|     if (dev_path == NULL) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     switch(udev_event) { | ||||
|     switch (udev_event) { | ||||
|     case SDL_UDEV_DEVICEADDED: | ||||
|         if (!(udev_class & (SDL_UDEV_DEVICE_MOUSE | SDL_UDEV_DEVICE_KEYBOARD | SDL_UDEV_DEVICE_TOUCHSCREEN | SDL_UDEV_DEVICE_TOUCHPAD))) { | ||||
|             return; | ||||
| @@ -271,8 +270,7 @@ static void SDL_EVDEV_udev_callback(SDL_UDEV_deviceevent udev_event, int udev_cl | ||||
| } | ||||
| #endif /* SDL_USE_LIBUDEV */ | ||||
|  | ||||
| void  | ||||
| SDL_EVDEV_Poll(void) | ||||
| void SDL_EVDEV_Poll(void) | ||||
| { | ||||
|     struct input_event events[32]; | ||||
|     int i, j, len; | ||||
| @@ -341,7 +339,7 @@ SDL_EVDEV_Poll(void) | ||||
|                     SDL_EVDEV_kbd_keycode(_this->kbd, events[i].code, events[i].value); | ||||
|                     break; | ||||
|                 case EV_ABS: | ||||
|                     switch(events[i].code) { | ||||
|                     switch (events[i].code) { | ||||
|                     case ABS_MT_SLOT: | ||||
|                         if (!item->is_touchscreen) { /* FIXME: temp hack */ | ||||
|                             break; | ||||
| @@ -413,7 +411,7 @@ SDL_EVDEV_Poll(void) | ||||
|                     } | ||||
|                     break; | ||||
|                 case EV_REL: | ||||
|                     switch(events[i].code) { | ||||
|                     switch (events[i].code) { | ||||
|                     case REL_X: | ||||
|                         if (item->relative_mouse) { | ||||
|                             item->mouse_x += events[i].value; | ||||
| @@ -468,13 +466,13 @@ SDL_EVDEV_Poll(void) | ||||
|  | ||||
|                         for (j = 0; j < item->touchscreen_data->max_slots; j++) { | ||||
|                             norm_x = (float)(item->touchscreen_data->slots[j].x - item->touchscreen_data->min_x) / | ||||
|                                 (float)item->touchscreen_data->range_x; | ||||
|                                      (float)item->touchscreen_data->range_x; | ||||
|                             norm_y = (float)(item->touchscreen_data->slots[j].y - item->touchscreen_data->min_y) / | ||||
|                                 (float)item->touchscreen_data->range_y; | ||||
|                                      (float)item->touchscreen_data->range_y; | ||||
|  | ||||
|                             if (item->touchscreen_data->range_pressure > 0) { | ||||
|                                 norm_pressure = (float)(item->touchscreen_data->slots[j].pressure - item->touchscreen_data->min_pressure) / | ||||
|                                     (float)item->touchscreen_data->range_pressure; | ||||
|                                                 (float)item->touchscreen_data->range_pressure; | ||||
|                             } else { | ||||
|                                 /* This touchscreen does not support pressure */ | ||||
|                                 norm_pressure = 1.0f; | ||||
| @@ -483,7 +481,7 @@ SDL_EVDEV_Poll(void) | ||||
|                             /* FIXME: the touch's window shouldn't be null, but | ||||
|                              * the coordinate space of touch positions needs to | ||||
|                              * be window-relative in that case. */ | ||||
|                             switch(item->touchscreen_data->slots[j].delta) { | ||||
|                             switch (item->touchscreen_data->slots[j].delta) { | ||||
|                             case EVDEV_TOUCH_SLOTDELTA_DOWN: | ||||
|                                 SDL_SendTouch(item->fd, item->touchscreen_data->slots[j].tracking_id, NULL, SDL_TRUE, norm_x, norm_y, norm_pressure); | ||||
|                                 item->touchscreen_data->slots[j].delta = EVDEV_TOUCH_SLOTDELTA_NONE; | ||||
| @@ -522,8 +520,7 @@ SDL_EVDEV_Poll(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static SDL_Scancode | ||||
| SDL_EVDEV_translate_keycode(int keycode) | ||||
| static SDL_Scancode SDL_EVDEV_translate_keycode(int keycode) | ||||
| { | ||||
|     SDL_Scancode scancode = SDL_GetScancodeFromTable(SDL_SCANCODE_TABLE_LINUX, keycode); | ||||
|  | ||||
| @@ -535,8 +532,9 @@ SDL_EVDEV_translate_keycode(int keycode) | ||||
|            SDL_Log message about an unknown key. */ | ||||
|         if (keycode != BTN_TOUCH) { | ||||
|             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 " | ||||
|                 "<https://discourse.libsdl.org/> EVDEV KeyCode %d", keycode); | ||||
|                     "get this fixed, please report this to the SDL forums/mailing list " | ||||
|                     "<https://discourse.libsdl.org/> EVDEV KeyCode %d", | ||||
|                     keycode); | ||||
|         } | ||||
|     } | ||||
| #endif /* DEBUG_SCANCODES */ | ||||
| @@ -544,8 +542,7 @@ SDL_EVDEV_translate_keycode(int keycode) | ||||
|     return scancode; | ||||
| } | ||||
|  | ||||
| static int | ||||
| SDL_EVDEV_init_touchscreen(SDL_evdevlist_item* item, int udev_class) | ||||
| static int SDL_EVDEV_init_touchscreen(SDL_evdevlist_item *item, int udev_class) | ||||
| { | ||||
|     int ret, i; | ||||
|     unsigned long xreq, yreq; | ||||
| @@ -634,8 +631,8 @@ SDL_EVDEV_init_touchscreen(SDL_evdevlist_item* item, int udev_class) | ||||
|     } | ||||
|  | ||||
|     ret = SDL_AddTouch(item->fd, /* I guess our fd is unique enough */ | ||||
|         (udev_class & SDL_UDEV_DEVICE_TOUCHPAD) ? SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE : SDL_TOUCH_DEVICE_DIRECT, | ||||
|         item->touchscreen_data->name); | ||||
|                        (udev_class & SDL_UDEV_DEVICE_TOUCHPAD) ? SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE : SDL_TOUCH_DEVICE_DIRECT, | ||||
|                        item->touchscreen_data->name); | ||||
|     if (ret < 0) { | ||||
|         SDL_free(item->touchscreen_data->slots); | ||||
|         SDL_free(item->touchscreen_data->name); | ||||
| @@ -646,8 +643,8 @@ SDL_EVDEV_init_touchscreen(SDL_evdevlist_item* item, int udev_class) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_EVDEV_destroy_touchscreen(SDL_evdevlist_item* item) { | ||||
| static void SDL_EVDEV_destroy_touchscreen(SDL_evdevlist_item *item) | ||||
| { | ||||
|     if (!item->is_touchscreen) { | ||||
|         return; | ||||
|     } | ||||
| @@ -658,8 +655,7 @@ SDL_EVDEV_destroy_touchscreen(SDL_evdevlist_item* item) { | ||||
|     SDL_free(item->touchscreen_data); | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_EVDEV_sync_device(SDL_evdevlist_item *item)  | ||||
| static void SDL_EVDEV_sync_device(SDL_evdevlist_item *item) | ||||
| { | ||||
| #ifdef EVIOCGMTSLOTS | ||||
|     int i, ret; | ||||
| @@ -672,8 +668,8 @@ SDL_EVDEV_sync_device(SDL_evdevlist_item *item) | ||||
|      * | ||||
|      * this is the structure we're trying to emulate | ||||
|      */ | ||||
|     Uint32* mt_req_code; | ||||
|     Sint32* mt_req_values; | ||||
|     Uint32 *mt_req_code; | ||||
|     Sint32 *mt_req_values; | ||||
|     size_t mt_req_size; | ||||
|  | ||||
|     /* TODO: sync devices other than touchscreen */ | ||||
| @@ -682,14 +678,14 @@ SDL_EVDEV_sync_device(SDL_evdevlist_item *item) | ||||
|     } | ||||
|  | ||||
|     mt_req_size = sizeof(*mt_req_code) + | ||||
|         sizeof(*mt_req_values) * item->touchscreen_data->max_slots; | ||||
|                   sizeof(*mt_req_values) * item->touchscreen_data->max_slots; | ||||
|  | ||||
|     mt_req_code = SDL_calloc(1, mt_req_size); | ||||
|     if (mt_req_code == NULL) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     mt_req_values = (Sint32*)mt_req_code + 1; | ||||
|     mt_req_values = (Sint32 *)mt_req_code + 1; | ||||
|  | ||||
|     *mt_req_code = ABS_MT_TRACKING_ID; | ||||
|     ret = ioctl(item->fd, EVIOCGMTSLOTS(mt_req_size), mt_req_code); | ||||
| @@ -712,7 +708,7 @@ SDL_EVDEV_sync_device(SDL_evdevlist_item *item) | ||||
|             item->touchscreen_data->slots[i].tracking_id = mt_req_values[i]; | ||||
|             item->touchscreen_data->slots[i].delta = EVDEV_TOUCH_SLOTDELTA_DOWN; | ||||
|         } else if (item->touchscreen_data->slots[i].tracking_id >= 0 && | ||||
|             mt_req_values[i] < 0) { | ||||
|                    mt_req_values[i] < 0) { | ||||
|             item->touchscreen_data->slots[i].tracking_id = -1; | ||||
|             item->touchscreen_data->slots[i].delta = EVDEV_TOUCH_SLOTDELTA_UP; | ||||
|         } | ||||
| @@ -784,8 +780,7 @@ SDL_EVDEV_sync_device(SDL_evdevlist_item *item) | ||||
| #endif /* EVIOCGMTSLOTS */ | ||||
| } | ||||
|  | ||||
| static int | ||||
| SDL_EVDEV_device_added(const char *dev_path, int udev_class) | ||||
| static int SDL_EVDEV_device_added(const char *dev_path, int udev_class) | ||||
| { | ||||
|     int ret; | ||||
|     SDL_evdevlist_item *item; | ||||
| @@ -794,11 +789,11 @@ SDL_EVDEV_device_added(const char *dev_path, int udev_class) | ||||
|     /* Check to make sure it's not already in list. */ | ||||
|     for (item = _this->first; item != NULL; item = item->next) { | ||||
|         if (SDL_strcmp(dev_path, item->path) == 0) { | ||||
|             return -1;  /* already have this one */ | ||||
|             return -1; /* already have this one */ | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     item = (SDL_evdevlist_item *) SDL_calloc(1, sizeof (SDL_evdevlist_item)); | ||||
|     item = (SDL_evdevlist_item *)SDL_calloc(1, sizeof(SDL_evdevlist_item)); | ||||
|     if (item == NULL) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
| @@ -846,8 +841,7 @@ SDL_EVDEV_device_added(const char *dev_path, int udev_class) | ||||
|     return _this->num_devices++; | ||||
| } | ||||
|  | ||||
| static int | ||||
| SDL_EVDEV_device_removed(const char *dev_path) | ||||
| static int SDL_EVDEV_device_removed(const char *dev_path) | ||||
| { | ||||
|     SDL_evdevlist_item *item; | ||||
|     SDL_evdevlist_item *prev = NULL; | ||||
| @@ -879,7 +873,6 @@ SDL_EVDEV_device_removed(const char *dev_path) | ||||
|     return -1; | ||||
| } | ||||
|  | ||||
|  | ||||
| #endif /* SDL_INPUT_LINUXEV */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|   | ||||
| @@ -23,7 +23,6 @@ | ||||
|  | ||||
| #include "SDL_evdev_capabilities.h" | ||||
|  | ||||
|  | ||||
| #if HAVE_LINUX_INPUT_H | ||||
|  | ||||
| /* missing defines in older Linux kernel headers */ | ||||
| @@ -31,10 +30,10 @@ | ||||
| #define BTN_TRIGGER_HAPPY 0x2c0 | ||||
| #endif | ||||
| #ifndef BTN_DPAD_UP | ||||
| #define BTN_DPAD_UP       0x220 | ||||
| #define BTN_DPAD_UP 0x220 | ||||
| #endif | ||||
| #ifndef KEY_ALS_TOGGLE | ||||
| #define KEY_ALS_TOGGLE    0x230 | ||||
| #define KEY_ALS_TOGGLE 0x230 | ||||
| #endif | ||||
|  | ||||
| extern int | ||||
| @@ -43,7 +42,8 @@ SDL_EVDEV_GuessDeviceClass(unsigned long bitmask_ev[NBITS(EV_MAX)], | ||||
|                            unsigned long bitmask_key[NBITS(KEY_MAX)], | ||||
|                            unsigned long bitmask_rel[NBITS(REL_MAX)]) | ||||
| { | ||||
|     struct range { | ||||
|     struct range | ||||
|     { | ||||
|         unsigned start; | ||||
|         unsigned end; | ||||
|     }; | ||||
| @@ -114,7 +114,7 @@ SDL_EVDEV_GuessDeviceClass(unsigned long bitmask_ev[NBITS(EV_MAX)], | ||||
|         unsigned i; | ||||
|         unsigned long found = 0; | ||||
|  | ||||
|         for (i = 0; i < BTN_MISC/BITS_PER_LONG; ++i) { | ||||
|         for (i = 0; i < BTN_MISC / BITS_PER_LONG; ++i) { | ||||
|             found |= bitmask_key[i]; | ||||
|         } | ||||
|         /* If there are no keys in the lower block, check the higher blocks */ | ||||
|   | ||||
| @@ -31,21 +31,21 @@ | ||||
| /* A device can be any combination of these classes */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_UDEV_DEVICE_UNKNOWN     = 0x0000, | ||||
|     SDL_UDEV_DEVICE_MOUSE       = 0x0001, | ||||
|     SDL_UDEV_DEVICE_KEYBOARD    = 0x0002, | ||||
|     SDL_UDEV_DEVICE_JOYSTICK    = 0x0004, | ||||
|     SDL_UDEV_DEVICE_SOUND       = 0x0008, | ||||
|     SDL_UDEV_DEVICE_UNKNOWN = 0x0000, | ||||
|     SDL_UDEV_DEVICE_MOUSE = 0x0001, | ||||
|     SDL_UDEV_DEVICE_KEYBOARD = 0x0002, | ||||
|     SDL_UDEV_DEVICE_JOYSTICK = 0x0004, | ||||
|     SDL_UDEV_DEVICE_SOUND = 0x0008, | ||||
|     SDL_UDEV_DEVICE_TOUCHSCREEN = 0x0010, | ||||
|     SDL_UDEV_DEVICE_ACCELEROMETER = 0x0020, | ||||
|     SDL_UDEV_DEVICE_TOUCHPAD    = 0x0040 | ||||
|     SDL_UDEV_DEVICE_TOUCHPAD = 0x0040 | ||||
| } SDL_UDEV_deviceclass; | ||||
|  | ||||
| #define BITS_PER_LONG           (sizeof(unsigned long) * 8) | ||||
| #define NBITS(x)                ((((x)-1)/BITS_PER_LONG)+1) | ||||
| #define EVDEV_OFF(x)            ((x)%BITS_PER_LONG) | ||||
| #define EVDEV_LONG(x)           ((x)/BITS_PER_LONG) | ||||
| #define test_bit(bit, array)    ((array[EVDEV_LONG(bit)] >> EVDEV_OFF(bit)) & 1) | ||||
| #define BITS_PER_LONG        (sizeof(unsigned long) * 8) | ||||
| #define NBITS(x)             ((((x)-1) / BITS_PER_LONG) + 1) | ||||
| #define EVDEV_OFF(x)         ((x) % BITS_PER_LONG) | ||||
| #define EVDEV_LONG(x)        ((x) / BITS_PER_LONG) | ||||
| #define test_bit(bit, array) ((array[EVDEV_LONG(bit)] >> EVDEV_OFF(bit)) & 1) | ||||
|  | ||||
| extern int SDL_EVDEV_GuessDeviceClass(unsigned long bitmask_ev[NBITS(EV_MAX)], | ||||
|                                       unsigned long bitmask_abs[NBITS(ABS_MAX)], | ||||
|   | ||||
| @@ -53,33 +53,31 @@ | ||||
|  * Handler Tables. | ||||
|  */ | ||||
|  | ||||
| #define K_HANDLERS\ | ||||
|     k_self,     k_fn,       k_spec,       k_pad,\ | ||||
|     k_dead,     k_cons,     k_cur,        k_shift,\ | ||||
|     k_meta,     k_ascii,    k_lock,       k_lowercase,\ | ||||
|     k_slock,    k_dead2,    k_brl,        k_ignore | ||||
| #define K_HANDLERS                            \ | ||||
|     k_self, k_fn, k_spec, k_pad,              \ | ||||
|         k_dead, k_cons, k_cur, k_shift,       \ | ||||
|         k_meta, k_ascii, k_lock, k_lowercase, \ | ||||
|         k_slock, k_dead2, k_brl, k_ignore | ||||
|  | ||||
| typedef void (k_handler_fn)(SDL_EVDEV_keyboard_state *kbd, unsigned char value, char up_flag); | ||||
| typedef void(k_handler_fn)(SDL_EVDEV_keyboard_state *kbd, unsigned char value, char up_flag); | ||||
| static k_handler_fn K_HANDLERS; | ||||
| static k_handler_fn *k_handler[16] = { K_HANDLERS }; | ||||
|  | ||||
| typedef void (fn_handler_fn)(SDL_EVDEV_keyboard_state *kbd); | ||||
| typedef void(fn_handler_fn)(SDL_EVDEV_keyboard_state *kbd); | ||||
| static void fn_enter(SDL_EVDEV_keyboard_state *kbd); | ||||
| static void fn_caps_toggle(SDL_EVDEV_keyboard_state *kbd); | ||||
| static void fn_caps_on(SDL_EVDEV_keyboard_state *kbd); | ||||
| static void fn_num(SDL_EVDEV_keyboard_state *kbd); | ||||
| static void fn_compose(SDL_EVDEV_keyboard_state *kbd); | ||||
|  | ||||
| static fn_handler_fn *fn_handler[] = | ||||
| { | ||||
|     NULL,       fn_enter,   NULL,       NULL, | ||||
|     NULL,       NULL,       NULL,       fn_caps_toggle, | ||||
|     fn_num,     NULL,       NULL,       NULL, | ||||
|     NULL,       fn_caps_on, fn_compose, NULL, | ||||
|     NULL,       NULL,       NULL,       fn_num | ||||
| static fn_handler_fn *fn_handler[] = { | ||||
|     NULL, fn_enter, NULL, NULL, | ||||
|     NULL, NULL, NULL, fn_caps_toggle, | ||||
|     fn_num, NULL, NULL, NULL, | ||||
|     NULL, fn_caps_on, fn_compose, NULL, | ||||
|     NULL, NULL, NULL, fn_num | ||||
| }; | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Keyboard State | ||||
|  */ | ||||
| @@ -89,12 +87,12 @@ struct SDL_EVDEV_keyboard_state | ||||
|     int console_fd; | ||||
|     int old_kbd_mode; | ||||
|     unsigned short **key_maps; | ||||
|     unsigned char shift_down[NR_SHIFT];        /* shift state counters.. */ | ||||
|     unsigned char shift_down[NR_SHIFT]; /* shift state counters.. */ | ||||
|     SDL_bool dead_key_next; | ||||
|     int npadch;                    /* -1 or number assembled on pad */ | ||||
|     int npadch; /* -1 or number assembled on pad */ | ||||
|     struct kbdiacrs *accents; | ||||
|     unsigned int diacr; | ||||
|     SDL_bool rep;                    /* flag telling character repeat */ | ||||
|     SDL_bool rep; /* flag telling character repeat */ | ||||
|     unsigned char lockstate; | ||||
|     unsigned char slockstate; | ||||
|     unsigned char ledflagstate; | ||||
| @@ -114,7 +112,7 @@ static void SDL_EVDEV_dump_accents(SDL_EVDEV_keyboard_state *kbd) | ||||
|     for (i = 0; i < kbd->accents->kb_cnt; ++i) { | ||||
|         struct kbdiacr *diacr = &kbd->accents->kbdiacr[i]; | ||||
|         printf("        { 0x%.2x, 0x%.2x, 0x%.2x },\n", | ||||
|             diacr->diacr, diacr->base, diacr->result); | ||||
|                diacr->diacr, diacr->base, diacr->result); | ||||
|     } | ||||
|     while (i < 256) { | ||||
|         printf("        { 0x00, 0x00, 0x00 },\n"); | ||||
| @@ -134,7 +132,7 @@ static void SDL_EVDEV_dump_keymap(SDL_EVDEV_keyboard_state *kbd) | ||||
|         if (kbd->key_maps[i]) { | ||||
|             printf("static unsigned short default_key_map_%d[NR_KEYS] = {", i); | ||||
|             for (j = 0; j < NR_KEYS; ++j) { | ||||
|                 if ((j%8) == 0) { | ||||
|                 if ((j % 8) == 0) { | ||||
|                     printf("\n    "); | ||||
|                 } | ||||
|                 printf("0x%.4x, ", kbd->key_maps[i][j]); | ||||
| @@ -194,23 +192,22 @@ static int SDL_EVDEV_kbd_load_keymaps(SDL_EVDEV_keyboard_state *kbd) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static SDL_EVDEV_keyboard_state * kbd_cleanup_state = NULL; | ||||
| static SDL_EVDEV_keyboard_state *kbd_cleanup_state = NULL; | ||||
| static int kbd_cleanup_sigactions_installed = 0; | ||||
| static int kbd_cleanup_atexit_installed = 0; | ||||
|  | ||||
| static struct sigaction old_sigaction[NSIG]; | ||||
|  | ||||
| static int fatal_signals[] = | ||||
| { | ||||
| static int fatal_signals[] = { | ||||
|     /* Handlers for SIGTERM and SIGINT are installed in SDL_QuitInit. */ | ||||
|     SIGHUP,  SIGQUIT, SIGILL,  SIGABRT, | ||||
|     SIGFPE,  SIGSEGV, SIGPIPE, SIGBUS, | ||||
|     SIGHUP, SIGQUIT, SIGILL, SIGABRT, | ||||
|     SIGFPE, SIGSEGV, SIGPIPE, SIGBUS, | ||||
|     SIGSYS | ||||
| }; | ||||
|  | ||||
| static void kbd_cleanup(void) | ||||
| { | ||||
|     SDL_EVDEV_keyboard_state* kbd = kbd_cleanup_state; | ||||
|     SDL_EVDEV_keyboard_state *kbd = kbd_cleanup_state; | ||||
|     if (kbd == NULL) { | ||||
|         return; | ||||
|     } | ||||
| @@ -219,18 +216,17 @@ static void kbd_cleanup(void) | ||||
|     ioctl(kbd->console_fd, KDSKBMODE, kbd->old_kbd_mode); | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_EVDEV_kbd_reraise_signal(int sig) | ||||
| static void SDL_EVDEV_kbd_reraise_signal(int sig) | ||||
| { | ||||
|     raise(sig); | ||||
| } | ||||
|  | ||||
| siginfo_t* SDL_EVDEV_kdb_cleanup_siginfo = NULL; | ||||
| void*      SDL_EVDEV_kdb_cleanup_ucontext = NULL; | ||||
| siginfo_t *SDL_EVDEV_kdb_cleanup_siginfo = NULL; | ||||
| void *SDL_EVDEV_kdb_cleanup_ucontext = NULL; | ||||
|  | ||||
| static void kbd_cleanup_signal_action(int signum, siginfo_t* info, void* ucontext) | ||||
| static void kbd_cleanup_signal_action(int signum, siginfo_t *info, void *ucontext) | ||||
| { | ||||
|     struct sigaction* old_action_p = &(old_sigaction[signum]); | ||||
|     struct sigaction *old_action_p = &(old_sigaction[signum]); | ||||
|     sigset_t sigset; | ||||
|  | ||||
|     /* Restore original signal handler before going any further. */ | ||||
| @@ -264,7 +260,7 @@ static void kbd_unregister_emerg_cleanup() | ||||
|     kbd_cleanup_sigactions_installed = 0; | ||||
|  | ||||
|     for (tabidx = 0; tabidx < sizeof(fatal_signals) / sizeof(fatal_signals[0]); ++tabidx) { | ||||
|         struct sigaction* old_action_p; | ||||
|         struct sigaction *old_action_p; | ||||
|         struct sigaction cur_action; | ||||
|         signum = fatal_signals[tabidx]; | ||||
|         old_action_p = &(old_sigaction[signum]); | ||||
| @@ -293,7 +289,7 @@ static void kbd_cleanup_atexit(void) | ||||
|     kbd_unregister_emerg_cleanup(); | ||||
| } | ||||
|  | ||||
| static void kbd_register_emerg_cleanup(SDL_EVDEV_keyboard_state * kbd) | ||||
| static void kbd_register_emerg_cleanup(SDL_EVDEV_keyboard_state *kbd) | ||||
| { | ||||
|     int tabidx, signum; | ||||
|  | ||||
| @@ -317,7 +313,7 @@ static void kbd_register_emerg_cleanup(SDL_EVDEV_keyboard_state * kbd) | ||||
|     kbd_cleanup_sigactions_installed = 1; | ||||
|  | ||||
|     for (tabidx = 0; tabidx < sizeof(fatal_signals) / sizeof(fatal_signals[0]); ++tabidx) { | ||||
|         struct sigaction* old_action_p; | ||||
|         struct sigaction *old_action_p; | ||||
|         struct sigaction new_action; | ||||
|         signum = fatal_signals[tabidx]; | ||||
|         old_action_p = &(old_sigaction[signum]); | ||||
| @@ -328,7 +324,7 @@ static void kbd_register_emerg_cleanup(SDL_EVDEV_keyboard_state * kbd) | ||||
|         /* Skip SIGHUP and SIGPIPE if handler is already installed | ||||
|          * - assume the handler will do the cleanup | ||||
|          */ | ||||
|         if ((signum == SIGHUP || signum == SIGPIPE) && (old_action_p->sa_handler != SIG_DFL || (void(*)(int))old_action_p->sa_sigaction != SIG_DFL)) { | ||||
|         if ((signum == SIGHUP || signum == SIGPIPE) && (old_action_p->sa_handler != SIG_DFL || (void (*)(int))old_action_p->sa_sigaction != SIG_DFL)) { | ||||
|             continue; | ||||
|         } | ||||
|  | ||||
| @@ -345,7 +341,7 @@ SDL_EVDEV_kbd_init(void) | ||||
|     SDL_EVDEV_keyboard_state *kbd; | ||||
|     int i; | ||||
|     char flag_state; | ||||
|     char shift_state[ sizeof (long) ] = {TIOCL_GETSHIFTSTATE, 0}; | ||||
|     char shift_state[sizeof(long)] = { TIOCL_GETSHIFTSTATE, 0 }; | ||||
|  | ||||
|     kbd = (SDL_EVDEV_keyboard_state *)SDL_calloc(1, sizeof(*kbd)); | ||||
|     if (kbd == NULL) { | ||||
| @@ -411,8 +407,7 @@ SDL_EVDEV_kbd_init(void) | ||||
|     return kbd; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd) | ||||
| void SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd) | ||||
| { | ||||
|     if (kbd == NULL) { | ||||
|         return; | ||||
| @@ -447,7 +442,7 @@ SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd) | ||||
| static void put_queue(SDL_EVDEV_keyboard_state *kbd, uint c) | ||||
| { | ||||
|     /* c is already part of a UTF-8 sequence and safe to add as a character */ | ||||
|     if (kbd->text_len < (sizeof(kbd->text)-1)) { | ||||
|     if (kbd->text_len < (sizeof(kbd->text) - 1)) { | ||||
|         kbd->text[kbd->text_len++] = (char)c; | ||||
|     } | ||||
| } | ||||
| @@ -639,7 +634,7 @@ static void k_deadunicode(SDL_EVDEV_keyboard_state *kbd, unsigned int value, cha | ||||
|  | ||||
| static void k_dead(SDL_EVDEV_keyboard_state *kbd, unsigned char value, char up_flag) | ||||
| { | ||||
|     const unsigned char ret_diacr[NR_DEAD] = {'`', '\'', '^', '~', '"', ',' }; | ||||
|     const unsigned char ret_diacr[NR_DEAD] = { '`', '\'', '^', '~', '"', ',' }; | ||||
|  | ||||
|     k_deadunicode(kbd, ret_diacr[value], up_flag); | ||||
| } | ||||
| @@ -666,7 +661,7 @@ static void k_pad(SDL_EVDEV_keyboard_state *kbd, unsigned char value, char up_fl | ||||
|     static const char pad_chars[] = "0123456789+-*/\015,.?()#"; | ||||
|  | ||||
|     if (up_flag) | ||||
|         return;        /* no action, if this is a key release */ | ||||
|         return; /* no action, if this is a key release */ | ||||
|  | ||||
|     if (!vc_kbd_led(kbd, K_NUMLOCK)) { | ||||
|         /* unprintable action */ | ||||
| @@ -768,8 +763,7 @@ static void k_brl(SDL_EVDEV_keyboard_state *kbd, unsigned char value, char up_fl | ||||
| { | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *kbd, unsigned int keycode, int down) | ||||
| void SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *kbd, unsigned int keycode, int down) | ||||
| { | ||||
|     unsigned char shift_final; | ||||
|     unsigned char type; | ||||
| @@ -841,13 +835,11 @@ SDL_EVDEV_kbd_init(void) | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *state, unsigned int keycode, int down) | ||||
| void SDL_EVDEV_kbd_keycode(SDL_EVDEV_keyboard_state *state, unsigned int keycode, int down) | ||||
| { | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *state) | ||||
| void SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *state) | ||||
| { | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -19,6 +19,8 @@ | ||||
|   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] = { | ||||
|     0xf200, 0xf01b, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036,  | ||||
|     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 */ | ||||
|  | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
| static unsigned short *default_key_maps[MAX_NR_KEYMAPS] = { | ||||
|     default_key_map_0, | ||||
|     default_key_map_1, | ||||
| @@ -4504,7 +4508,7 @@ static unsigned short *default_key_maps[MAX_NR_KEYMAPS] = { | ||||
|     default_key_map_125, | ||||
|     default_key_map_126, | ||||
|     default_key_map_127, | ||||
| #else /* !INCLUDE_EXTENDED_KEYMAP */ | ||||
| #else  /* !INCLUDE_EXTENDED_KEYMAP */ | ||||
|     NULL, | ||||
|     NULL, | ||||
|     NULL, | ||||
|   | ||||
| @@ -55,8 +55,7 @@ typedef struct _FcitxClient | ||||
|  | ||||
| static FcitxClient fcitx_client; | ||||
|  | ||||
| static char* | ||||
| GetAppName() | ||||
| static char *GetAppName() | ||||
| { | ||||
| #if defined(__LINUX__) || defined(__FREEBSD__) | ||||
|     char *spot; | ||||
| @@ -86,10 +85,10 @@ GetAppName() | ||||
|  | ||||
| static size_t | ||||
| Fcitx_GetPreeditString(SDL_DBusContext *dbus, | ||||
|         DBusMessage *msg, | ||||
|         char **ret, | ||||
|         Sint32 *start_pos, | ||||
|         Sint32 *end_pos) | ||||
|                        DBusMessage *msg, | ||||
|                        char **ret, | ||||
|                        Sint32 *start_pos, | ||||
|                        Sint32 *end_pos) | ||||
| { | ||||
|     char *text = NULL, *subtext; | ||||
|     size_t text_bytes = 0; | ||||
| @@ -141,7 +140,7 @@ Fcitx_GetPreeditString(SDL_DBusContext *dbus, | ||||
|         } | ||||
|  | ||||
|         if (text) { | ||||
|             char* pivot = text; | ||||
|             char *pivot = text; | ||||
|             /* Second pass: join all the sub string */ | ||||
|             dbus->message_iter_recurse(&iter, &array); | ||||
|             while (dbus->message_iter_get_arg_type(&array) == DBUS_TYPE_STRUCT) { | ||||
| @@ -167,8 +166,7 @@ Fcitx_GetPreeditString(SDL_DBusContext *dbus, | ||||
|     return text_bytes; | ||||
| } | ||||
|  | ||||
| static Sint32 | ||||
| Fcitx_GetPreeditCursorByte(SDL_DBusContext *dbus, DBusMessage *msg) | ||||
| static Sint32 Fcitx_GetPreeditCursorByte(SDL_DBusContext *dbus, DBusMessage *msg) | ||||
| { | ||||
|     Sint32 byte = -1; | ||||
|     DBusMessageIter iter; | ||||
| @@ -186,8 +184,7 @@ Fcitx_GetPreeditCursorByte(SDL_DBusContext *dbus, DBusMessage *msg) | ||||
|     return byte; | ||||
| } | ||||
|  | ||||
| static DBusHandlerResult | ||||
| DBus_MessageFilter(DBusConnection *conn, DBusMessage *msg, void *data) | ||||
| static DBusHandlerResult DBus_MessageFilter(DBusConnection *conn, DBusMessage *msg, void *data) | ||||
| { | ||||
|     SDL_DBusContext *dbus = (SDL_DBusContext *)data; | ||||
|  | ||||
| @@ -203,7 +200,7 @@ DBus_MessageFilter(DBusConnection *conn, DBusMessage *msg, void *data) | ||||
|             size_t text_bytes = SDL_strlen(text), i = 0; | ||||
|  | ||||
|             while (i < text_bytes) { | ||||
|                 size_t sz = SDL_utf8strlcpy(buf, text+i, sizeof(buf)); | ||||
|                 size_t sz = SDL_utf8strlcpy(buf, text + i, sizeof(buf)); | ||||
|                 SDL_SendKeyboardText(buf); | ||||
|  | ||||
|                 i += sz; | ||||
| @@ -250,8 +247,7 @@ DBus_MessageFilter(DBusConnection *conn, DBusMessage *msg, void *data) | ||||
|     return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; | ||||
| } | ||||
|  | ||||
| static void | ||||
| FcitxClientICCallMethod(FcitxClient *client, const char *method) | ||||
| static void FcitxClientICCallMethod(FcitxClient *client, const char *method) | ||||
| { | ||||
|     if (!client->ic_path) { | ||||
|         return; | ||||
| @@ -259,11 +255,10 @@ FcitxClientICCallMethod(FcitxClient *client, const char *method) | ||||
|     SDL_DBus_CallVoidMethod(FCITX_DBUS_SERVICE, client->ic_path, FCITX_IC_DBUS_INTERFACE, method, DBUS_TYPE_INVALID); | ||||
| } | ||||
|  | ||||
| static void SDLCALL | ||||
| Fcitx_SetCapabilities(void *data, | ||||
|         const char *name, | ||||
|         const char *old_val, | ||||
|         const char *internal_editing) | ||||
| static void SDLCALL Fcitx_SetCapabilities(void *data, | ||||
|                                           const char *name, | ||||
|                                           const char *old_val, | ||||
|                                           const char *internal_editing) | ||||
| { | ||||
|     FcitxClient *client = (FcitxClient *)data; | ||||
|     Uint64 caps = 0; | ||||
| @@ -279,8 +274,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); | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| FcitxCreateInputContext(SDL_DBusContext* dbus, const char *appname, char **ic_path) { | ||||
| static SDL_bool FcitxCreateInputContext(SDL_DBusContext *dbus, const char *appname, char **ic_path) | ||||
| { | ||||
|     const char *program = "program"; | ||||
|     SDL_bool retval = SDL_FALSE; | ||||
|     if (dbus->session_conn) { | ||||
| @@ -308,8 +303,7 @@ FcitxCreateInputContext(SDL_DBusContext* dbus, const char *appname, char **ic_pa | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| FcitxClientCreateIC(FcitxClient *client) | ||||
| static SDL_bool FcitxClientCreateIC(FcitxClient *client) | ||||
| { | ||||
|     char *appname = GetAppName(); | ||||
|     char *ic_path = NULL; | ||||
| @@ -317,7 +311,7 @@ FcitxClientCreateIC(FcitxClient *client) | ||||
|  | ||||
|     /* SDL_DBus_CallMethod cannot handle a(ss) type, call dbus function directly */ | ||||
|     if (!FcitxCreateInputContext(dbus, appname, &ic_path)) { | ||||
|         ic_path = NULL;  /* just in case. */ | ||||
|         ic_path = NULL; /* just in case. */ | ||||
|     } | ||||
|  | ||||
|     SDL_free(appname); | ||||
| @@ -327,11 +321,11 @@ FcitxClientCreateIC(FcitxClient *client) | ||||
|         client->ic_path = SDL_strdup(ic_path); | ||||
|  | ||||
|         dbus->bus_add_match(dbus->session_conn, | ||||
|                 "type='signal', interface='org.fcitx.Fcitx.InputContext1'", | ||||
|                 NULL); | ||||
|                             "type='signal', interface='org.fcitx.Fcitx.InputContext1'", | ||||
|                             NULL); | ||||
|         dbus->connection_add_filter(dbus->session_conn, | ||||
|                 &DBus_MessageFilter, dbus, | ||||
|                 NULL); | ||||
|                                     &DBus_MessageFilter, dbus, | ||||
|                                     NULL); | ||||
|         dbus->connection_flush(dbus->session_conn); | ||||
|  | ||||
|         SDL_AddHintCallback(SDL_HINT_IME_INTERNAL_EDITING, Fcitx_SetCapabilities, client); | ||||
| @@ -341,8 +335,7 @@ FcitxClientCreateIC(FcitxClient *client) | ||||
|     return SDL_FALSE; | ||||
| } | ||||
|  | ||||
| static Uint32 | ||||
| Fcitx_ModState(void) | ||||
| static Uint32 Fcitx_ModState(void) | ||||
| { | ||||
|     Uint32 fcitx_mods = 0; | ||||
|     SDL_Keymod sdl_mods = SDL_GetModState(); | ||||
| @@ -388,8 +381,7 @@ SDL_Fcitx_Init() | ||||
|     return FcitxClientCreateIC(&fcitx_client); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_Fcitx_Quit() | ||||
| void SDL_Fcitx_Quit() | ||||
| { | ||||
|     FcitxClientICCallMethod(&fcitx_client, "DestroyIC"); | ||||
|     if (fcitx_client.ic_path) { | ||||
| @@ -398,8 +390,7 @@ SDL_Fcitx_Quit() | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_Fcitx_SetFocus(SDL_bool focused) | ||||
| void SDL_Fcitx_SetFocus(SDL_bool focused) | ||||
| { | ||||
|     if (focused) { | ||||
|         FcitxClientICCallMethod(&fcitx_client, "FocusIn"); | ||||
| @@ -408,8 +399,7 @@ SDL_Fcitx_SetFocus(SDL_bool focused) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_Fcitx_Reset(void) | ||||
| void SDL_Fcitx_Reset(void) | ||||
| { | ||||
|     FcitxClientICCallMethod(&fcitx_client, "Reset"); | ||||
|     FcitxClientICCallMethod(&fcitx_client, "CloseIC"); | ||||
| @@ -428,8 +418,8 @@ SDL_Fcitx_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state) | ||||
|     } | ||||
|  | ||||
|     if (SDL_DBus_CallMethod(FCITX_DBUS_SERVICE, fcitx_client.ic_path, FCITX_IC_DBUS_INTERFACE, "ProcessKeyEvent", | ||||
|             DBUS_TYPE_UINT32, &keysym, DBUS_TYPE_UINT32, &keycode, DBUS_TYPE_UINT32, &mod_state, DBUS_TYPE_BOOLEAN, &is_release, DBUS_TYPE_UINT32, &event_time, DBUS_TYPE_INVALID, | ||||
|             DBUS_TYPE_BOOLEAN, &handled, DBUS_TYPE_INVALID)) { | ||||
|                             DBUS_TYPE_UINT32, &keysym, DBUS_TYPE_UINT32, &keycode, DBUS_TYPE_UINT32, &mod_state, DBUS_TYPE_BOOLEAN, &is_release, DBUS_TYPE_UINT32, &event_time, DBUS_TYPE_INVALID, | ||||
|                             DBUS_TYPE_BOOLEAN, &handled, DBUS_TYPE_INVALID)) { | ||||
|         if (handled) { | ||||
|             SDL_Fcitx_UpdateTextRect(NULL); | ||||
|             return SDL_TRUE; | ||||
| @@ -439,8 +429,7 @@ SDL_Fcitx_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state) | ||||
|     return SDL_FALSE; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_Fcitx_UpdateTextRect(const SDL_Rect *rect) | ||||
| void SDL_Fcitx_UpdateTextRect(const SDL_Rect *rect) | ||||
| { | ||||
|     SDL_Window *focused_win = NULL; | ||||
|     SDL_SysWMinfo info; | ||||
| @@ -453,7 +442,7 @@ SDL_Fcitx_UpdateTextRect(const SDL_Rect *rect) | ||||
|  | ||||
|     focused_win = SDL_GetKeyboardFocus(); | ||||
|     if (focused_win == NULL) { | ||||
|         return ; | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     SDL_VERSION(&info.version); | ||||
| @@ -487,11 +476,10 @@ SDL_Fcitx_UpdateTextRect(const SDL_Rect *rect) | ||||
|     y += cursor->y; | ||||
|  | ||||
|     SDL_DBus_CallVoidMethod(FCITX_DBUS_SERVICE, fcitx_client.ic_path, FCITX_IC_DBUS_INTERFACE, "SetCursorRect", | ||||
|         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 | ||||
| SDL_Fcitx_PumpEvents(void) | ||||
| void SDL_Fcitx_PumpEvents(void) | ||||
| { | ||||
|     SDL_DBusContext *dbus = fcitx_client.dbus; | ||||
|     DBusConnection *conn = dbus->session_conn; | ||||
|   | ||||
| @@ -37,14 +37,14 @@ | ||||
| #include <unistd.h> | ||||
| #include <fcntl.h> | ||||
|  | ||||
| static const char IBUS_PATH[]            = "/org/freedesktop/IBus"; | ||||
| static const char IBUS_PATH[] = "/org/freedesktop/IBus"; | ||||
|  | ||||
| static const char IBUS_SERVICE[]         = "org.freedesktop.IBus"; | ||||
| static const char IBUS_INTERFACE[]       = "org.freedesktop.IBus"; | ||||
| static const char IBUS_SERVICE[] = "org.freedesktop.IBus"; | ||||
| static const char IBUS_INTERFACE[] = "org.freedesktop.IBus"; | ||||
| static const char IBUS_INPUT_INTERFACE[] = "org.freedesktop.IBus.InputContext"; | ||||
|  | ||||
| static const char IBUS_PORTAL_SERVICE[]         = "org.freedesktop.portal.IBus"; | ||||
| static const char IBUS_PORTAL_INTERFACE[]       = "org.freedesktop.IBus.Portal"; | ||||
| static const char IBUS_PORTAL_SERVICE[] = "org.freedesktop.portal.IBus"; | ||||
| static const char IBUS_PORTAL_INTERFACE[] = "org.freedesktop.IBus.Portal"; | ||||
| static const char IBUS_PORTAL_INPUT_INTERFACE[] = "org.freedesktop.IBus.InputContext"; | ||||
|  | ||||
| static const char *ibus_service = NULL; | ||||
| @@ -57,9 +57,7 @@ static SDL_bool ibus_is_portal_interface = SDL_FALSE; | ||||
| static char *ibus_addr_file = NULL; | ||||
| static int inotify_fd = -1, inotify_wd = -1; | ||||
|  | ||||
|  | ||||
| static Uint32 | ||||
| IBus_ModState(void) | ||||
| static Uint32 IBus_ModState(void) | ||||
| { | ||||
|     Uint32 ibus_mods = 0; | ||||
|     SDL_Keymod sdl_mods = SDL_GetModState(); | ||||
| @@ -93,9 +91,8 @@ IBus_ModState(void) | ||||
|     return ibus_mods; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| IBus_EnterVariant(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus, | ||||
|                   DBusMessageIter *inside, const char * struct_id, size_t id_size) | ||||
| static SDL_bool IBus_EnterVariant(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus, | ||||
|                                   DBusMessageIter *inside, const char *struct_id, size_t id_size) | ||||
| { | ||||
|     DBusMessageIter sub; | ||||
|     if (dbus->message_iter_get_arg_type(iter) != DBUS_TYPE_VARIANT) { | ||||
| @@ -121,9 +118,8 @@ IBus_EnterVariant(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext * | ||||
|     return SDL_TRUE; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| IBus_GetDecorationPosition(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus, | ||||
|                            Uint32 *start_pos, Uint32 *end_pos) | ||||
| static SDL_bool IBus_GetDecorationPosition(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus, | ||||
|                                            Uint32 *start_pos, Uint32 *end_pos) | ||||
| { | ||||
|     DBusMessageIter sub1, sub2, array; | ||||
|  | ||||
| @@ -186,8 +182,7 @@ IBus_GetDecorationPosition(DBusConnection *conn, DBusMessageIter *iter, SDL_DBus | ||||
|     return SDL_FALSE; | ||||
| } | ||||
|  | ||||
| static const char * | ||||
| IBus_GetVariantText(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus) | ||||
| static const char *IBus_GetVariantText(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus) | ||||
| { | ||||
|     /* The text we need is nested weirdly, use dbus-monitor to see the structure better */ | ||||
|     const char *text = NULL; | ||||
| @@ -208,9 +203,8 @@ IBus_GetVariantText(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext | ||||
|     return text; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| IBus_GetVariantCursorPos(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus, | ||||
|                          Uint32 *pos) | ||||
| static SDL_bool IBus_GetVariantCursorPos(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus, | ||||
|                                          Uint32 *pos) | ||||
| { | ||||
|     dbus->message_iter_next(iter); | ||||
|  | ||||
| @@ -223,8 +217,7 @@ IBus_GetVariantCursorPos(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusCo | ||||
|     return SDL_TRUE; | ||||
| } | ||||
|  | ||||
| static DBusHandlerResult | ||||
| IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data) | ||||
| static DBusHandlerResult IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data) | ||||
| { | ||||
|     SDL_DBusContext *dbus = (SDL_DBusContext *)user_data; | ||||
|  | ||||
| @@ -240,7 +233,7 @@ IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data) | ||||
|             size_t text_bytes = SDL_strlen(text), i = 0; | ||||
|  | ||||
|             while (i < text_bytes) { | ||||
|                 size_t sz = SDL_utf8strlcpy(buf, text+i, sizeof(buf)); | ||||
|                 size_t sz = SDL_utf8strlcpy(buf, text + i, sizeof(buf)); | ||||
|                 SDL_SendKeyboardText(buf); | ||||
|  | ||||
|                 i += sz; | ||||
| @@ -283,7 +276,7 @@ IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data) | ||||
|                 size_t cursor = 0; | ||||
|  | ||||
|                 do { | ||||
|                     const size_t sz = SDL_utf8strlcpy(buf, text+i, sizeof(buf)); | ||||
|                     const size_t sz = SDL_utf8strlcpy(buf, text + i, sizeof(buf)); | ||||
|                     const size_t chars = SDL_utf8strlen(buf); | ||||
|  | ||||
|                     SDL_SendEditingText(buf, cursor, chars); | ||||
| @@ -306,8 +299,7 @@ IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data) | ||||
|     return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; | ||||
| } | ||||
|  | ||||
| static char * | ||||
| IBus_ReadAddressFromFile(const char *file_path) | ||||
| static char *IBus_ReadAddressFromFile(const char *file_path) | ||||
| { | ||||
|     char addr_buf[1024]; | ||||
|     SDL_bool success = SDL_FALSE; | ||||
| @@ -319,7 +311,7 @@ IBus_ReadAddressFromFile(const char *file_path) | ||||
|     } | ||||
|  | ||||
|     while (fgets(addr_buf, sizeof(addr_buf), addr_file)) { | ||||
|         if (SDL_strncmp(addr_buf, "IBUS_ADDRESS=", sizeof("IBUS_ADDRESS=")-1) == 0) { | ||||
|         if (SDL_strncmp(addr_buf, "IBUS_ADDRESS=", sizeof("IBUS_ADDRESS=") - 1) == 0) { | ||||
|             size_t sz = SDL_strlen(addr_buf); | ||||
|             if (addr_buf[sz - 1] == '\n') { | ||||
|                 addr_buf[sz - 1] = 0; | ||||
| @@ -341,8 +333,7 @@ IBus_ReadAddressFromFile(const char *file_path) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static char * | ||||
| IBus_GetDBusAddressFilename(void) | ||||
| static char *IBus_GetDBusAddressFilename(void) | ||||
| { | ||||
|     SDL_DBusContext *dbus; | ||||
|     const char *disp_env; | ||||
| @@ -381,7 +372,7 @@ IBus_GetDBusAddressFilename(void) | ||||
|     } | ||||
|  | ||||
|     host = display; | ||||
|     disp_num   = SDL_strrchr(display, ':'); | ||||
|     disp_num = SDL_strrchr(display, ':'); | ||||
|     screen_num = SDL_strrchr(display, '.'); | ||||
|  | ||||
|     if (disp_num == NULL) { | ||||
| @@ -423,7 +414,7 @@ IBus_GetDBusAddressFilename(void) | ||||
|  | ||||
|     SDL_memset(file_path, 0, sizeof(file_path)); | ||||
|     SDL_snprintf(file_path, sizeof(file_path), "%s/ibus/bus/%s-%s-%s", | ||||
|                                                config_dir, key, host, disp_num); | ||||
|                  config_dir, key, host, disp_num); | ||||
|     dbus->free(key); | ||||
|     SDL_free(display); | ||||
|  | ||||
| @@ -432,9 +423,8 @@ IBus_GetDBusAddressFilename(void) | ||||
|  | ||||
| static SDL_bool IBus_CheckConnection(SDL_DBusContext *dbus); | ||||
|  | ||||
| static void SDLCALL | ||||
| IBus_SetCapabilities(void *data, const char *name, const char *old_val, | ||||
|                                                    const char *internal_editing) | ||||
| static void SDLCALL IBus_SetCapabilities(void *data, const char *name, const char *old_val, | ||||
|                                          const char *internal_editing) | ||||
| { | ||||
|     SDL_DBusContext *dbus = SDL_DBus_GetContext(); | ||||
|  | ||||
| @@ -445,13 +435,11 @@ IBus_SetCapabilities(void *data, const char *name, const char *old_val, | ||||
|         } | ||||
|  | ||||
|         SDL_DBus_CallVoidMethodOnConnection(ibus_conn, ibus_service, input_ctx_path, ibus_input_interface, "SetCapabilities", | ||||
|                                 DBUS_TYPE_UINT32, &caps, DBUS_TYPE_INVALID); | ||||
|                                             DBUS_TYPE_UINT32, &caps, DBUS_TYPE_INVALID); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| 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 = "SDL2_Application"; | ||||
|     const char *path = NULL; | ||||
| @@ -481,7 +469,7 @@ IBus_SetupConnection(SDL_DBusContext *dbus, const char* addr) | ||||
|         ibus_conn = dbus->connection_open_private(addr, NULL); | ||||
|  | ||||
|         if (ibus_conn == NULL) { | ||||
|             return SDL_FALSE;  /* oh well. */ | ||||
|             return SDL_FALSE; /* oh well. */ | ||||
|         } | ||||
|  | ||||
|         dbus->connection_flush(ibus_conn); | ||||
| @@ -500,7 +488,7 @@ IBus_SetupConnection(SDL_DBusContext *dbus, const char* addr) | ||||
|  | ||||
|     if (result) { | ||||
|         char matchstr[128]; | ||||
|         SDL_snprintf(matchstr, sizeof (matchstr), "type='signal',interface='%s'", ibus_input_interface); | ||||
|         SDL_snprintf(matchstr, sizeof(matchstr), "type='signal',interface='%s'", ibus_input_interface); | ||||
|         SDL_free(input_ctx_path); | ||||
|         input_ctx_path = SDL_strdup(path); | ||||
|         SDL_AddHintCallback(SDL_HINT_IME_INTERNAL_EDITING, IBus_SetCapabilities, NULL); | ||||
| @@ -515,8 +503,7 @@ IBus_SetupConnection(SDL_DBusContext *dbus, const char* addr) | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| IBus_CheckConnection(SDL_DBusContext *dbus) | ||||
| static SDL_bool IBus_CheckConnection(SDL_DBusContext *dbus) | ||||
| { | ||||
|     if (dbus == NULL) { | ||||
|         return SDL_FALSE; | ||||
| @@ -535,7 +522,7 @@ IBus_CheckConnection(SDL_DBusContext *dbus) | ||||
|             SDL_bool file_updated = SDL_FALSE; | ||||
|  | ||||
|             for (p = buf; p < buf + readsize; /**/) { | ||||
|                 struct inotify_event *event = (struct inotify_event*) p; | ||||
|                 struct inotify_event *event = (struct inotify_event *)p; | ||||
|                 if (event->len > 0) { | ||||
|                     char *addr_file_no_path = SDL_strrchr(ibus_addr_file, '/'); | ||||
|                     if (addr_file_no_path == NULL) { | ||||
| @@ -621,8 +608,7 @@ SDL_IBus_Init(void) | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IBus_Quit(void) | ||||
| void SDL_IBus_Quit(void) | ||||
| { | ||||
|     SDL_DBusContext *dbus; | ||||
|  | ||||
| @@ -662,8 +648,7 @@ SDL_IBus_Quit(void) | ||||
|     SDL_memset(&ibus_cursor_rect, 0, sizeof(ibus_cursor_rect)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| IBus_SimpleMessage(const char *method) | ||||
| static void IBus_SimpleMessage(const char *method) | ||||
| { | ||||
|     SDL_DBusContext *dbus = SDL_DBus_GetContext(); | ||||
|  | ||||
| @@ -672,15 +657,13 @@ IBus_SimpleMessage(const char *method) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IBus_SetFocus(SDL_bool focused) | ||||
| void SDL_IBus_SetFocus(SDL_bool focused) | ||||
| { | ||||
|     const char *method = focused ? "FocusIn" : "FocusOut"; | ||||
|     IBus_SimpleMessage(method); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IBus_Reset(void) | ||||
| void SDL_IBus_Reset(void) | ||||
| { | ||||
|     IBus_SimpleMessage("Reset"); | ||||
| } | ||||
| @@ -691,7 +674,6 @@ SDL_IBus_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state) | ||||
|     Uint32 result = 0; | ||||
|     SDL_DBusContext *dbus = SDL_DBus_GetContext(); | ||||
|  | ||||
|  | ||||
|     if (IBus_CheckConnection(dbus)) { | ||||
|         Uint32 mods = IBus_ModState(); | ||||
|         Uint32 ibus_keycode = keycode - 8; | ||||
| @@ -699,8 +681,8 @@ SDL_IBus_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state) | ||||
|             mods |= (1 << 30); // IBUS_RELEASE_MASK | ||||
|         } | ||||
|         if (!SDL_DBus_CallMethodOnConnection(ibus_conn, ibus_service, input_ctx_path, ibus_input_interface, "ProcessKeyEvent", | ||||
|                 DBUS_TYPE_UINT32, &keysym, DBUS_TYPE_UINT32, &ibus_keycode, DBUS_TYPE_UINT32, &mods, DBUS_TYPE_INVALID, | ||||
|                 DBUS_TYPE_BOOLEAN, &result, DBUS_TYPE_INVALID)) { | ||||
|                                              DBUS_TYPE_UINT32, &keysym, DBUS_TYPE_UINT32, &ibus_keycode, DBUS_TYPE_UINT32, &mods, DBUS_TYPE_INVALID, | ||||
|                                              DBUS_TYPE_BOOLEAN, &result, DBUS_TYPE_INVALID)) { | ||||
|             result = 0; | ||||
|         } | ||||
|     } | ||||
| @@ -710,8 +692,7 @@ SDL_IBus_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state) | ||||
|     return result ? SDL_TRUE : SDL_FALSE; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IBus_UpdateTextRect(const SDL_Rect *rect) | ||||
| void SDL_IBus_UpdateTextRect(const SDL_Rect *rect) | ||||
| { | ||||
|     SDL_Window *focused_win; | ||||
|     SDL_SysWMinfo info; | ||||
| @@ -754,12 +735,11 @@ SDL_IBus_UpdateTextRect(const SDL_Rect *rect) | ||||
|  | ||||
|     if (IBus_CheckConnection(dbus)) { | ||||
|         SDL_DBus_CallVoidMethodOnConnection(ibus_conn, ibus_service, input_ctx_path, ibus_input_interface, "SetCursorLocation", | ||||
|                 DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y, DBUS_TYPE_INT32, &ibus_cursor_rect.w, DBUS_TYPE_INT32, &ibus_cursor_rect.h, DBUS_TYPE_INVALID); | ||||
|                                             DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y, DBUS_TYPE_INT32, &ibus_cursor_rect.w, DBUS_TYPE_INT32, &ibus_cursor_rect.h, DBUS_TYPE_INVALID); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IBus_PumpEvents(void) | ||||
| void SDL_IBus_PumpEvents(void) | ||||
| { | ||||
|     SDL_DBusContext *dbus = SDL_DBus_GetContext(); | ||||
|  | ||||
|   | ||||
| @@ -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_PumpEvents SDL_IME_PumpEvents_Real = NULL; | ||||
|  | ||||
| static void | ||||
| InitIME() | ||||
| static void InitIME() | ||||
| { | ||||
|     static SDL_bool inited = SDL_FALSE; | ||||
| #ifdef HAVE_FCITX | ||||
| @@ -107,24 +106,21 @@ SDL_IME_Init(void) | ||||
|     return SDL_FALSE; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IME_Quit(void) | ||||
| void SDL_IME_Quit(void) | ||||
| { | ||||
|     if (SDL_IME_Quit_Real) { | ||||
|         SDL_IME_Quit_Real(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IME_SetFocus(SDL_bool focused) | ||||
| void SDL_IME_SetFocus(SDL_bool focused) | ||||
| { | ||||
|     if (SDL_IME_SetFocus_Real) { | ||||
|         SDL_IME_SetFocus_Real(focused); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IME_Reset(void) | ||||
| void SDL_IME_Reset(void) | ||||
| { | ||||
|     if (SDL_IME_Reset_Real) { | ||||
|         SDL_IME_Reset_Real(); | ||||
| @@ -141,16 +137,14 @@ SDL_IME_ProcessKeyEvent(Uint32 keysym, Uint32 keycode, Uint8 state) | ||||
|     return SDL_FALSE; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IME_UpdateTextRect(const SDL_Rect *rect) | ||||
| void SDL_IME_UpdateTextRect(const SDL_Rect *rect) | ||||
| { | ||||
|     if (SDL_IME_UpdateTextRect_Real) { | ||||
|         SDL_IME_UpdateTextRect_Real(rect); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IME_PumpEvents() | ||||
| void SDL_IME_PumpEvents() | ||||
| { | ||||
|     if (SDL_IME_PumpEvents_Real) { | ||||
|         SDL_IME_PumpEvents_Real(); | ||||
|   | ||||
| @@ -33,9 +33,7 @@ SDL_Sandbox SDL_DetectSandbox(void) | ||||
|  | ||||
|     /* For Snap, we check multiple variables because they might be set for | ||||
|      * unrelated reasons. This is the same thing WebKitGTK does. */ | ||||
|     if (SDL_getenv("SNAP") != NULL | ||||
|         && SDL_getenv("SNAP_NAME") != NULL | ||||
|         && SDL_getenv("SNAP_REVISION") != NULL) { | ||||
|     if (SDL_getenv("SNAP") != NULL && SDL_getenv("SNAP_NAME") != NULL && SDL_getenv("SNAP_REVISION") != NULL) { | ||||
|         return SDL_SANDBOX_SNAP; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -48,16 +48,16 @@ | ||||
| #include <sched.h> | ||||
|  | ||||
| /* d-bus queries to org.freedesktop.RealtimeKit1. */ | ||||
| #define RTKIT_DBUS_NODE "org.freedesktop.RealtimeKit1" | ||||
| #define RTKIT_DBUS_PATH "/org/freedesktop/RealtimeKit1" | ||||
| #define RTKIT_DBUS_NODE      "org.freedesktop.RealtimeKit1" | ||||
| #define RTKIT_DBUS_PATH      "/org/freedesktop/RealtimeKit1" | ||||
| #define RTKIT_DBUS_INTERFACE "org.freedesktop.RealtimeKit1" | ||||
|  | ||||
| /* d-bus queries to the XDG portal interface to RealtimeKit1 */ | ||||
| #define XDG_PORTAL_DBUS_NODE "org.freedesktop.portal.Desktop" | ||||
| #define XDG_PORTAL_DBUS_PATH "/org/freedesktop/portal/desktop" | ||||
| #define XDG_PORTAL_DBUS_NODE      "org.freedesktop.portal.Desktop" | ||||
| #define XDG_PORTAL_DBUS_PATH      "/org/freedesktop/portal/desktop" | ||||
| #define XDG_PORTAL_DBUS_INTERFACE "org.freedesktop.portal.Realtime" | ||||
|  | ||||
| static SDL_bool    rtkit_use_session_conn; | ||||
| static SDL_bool rtkit_use_session_conn; | ||||
| static const char *rtkit_dbus_node; | ||||
| static const char *rtkit_dbus_path; | ||||
| static const char *rtkit_dbus_interface; | ||||
| @@ -72,16 +72,14 @@ static Sint64 rtkit_max_rttime_usec = 200000; | ||||
|  *  - The desktop portal exists and supports the realtime interface. | ||||
|  *  - The realtime interface is new enough to have the required bug fixes applied. | ||||
|  */ | ||||
| static SDL_bool | ||||
| realtime_portal_supported(DBusConnection *conn) | ||||
| static SDL_bool realtime_portal_supported(DBusConnection *conn) | ||||
| { | ||||
|     Sint64 res; | ||||
|     return SDL_DBus_QueryPropertyOnConnection(conn, XDG_PORTAL_DBUS_NODE, XDG_PORTAL_DBUS_PATH, XDG_PORTAL_DBUS_INTERFACE, | ||||
|                                               "RTTimeUSecMax", DBUS_TYPE_INT64, &res); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_rtkit_interface() | ||||
| static void set_rtkit_interface() | ||||
| { | ||||
|     SDL_DBusContext *dbus = SDL_DBus_GetContext(); | ||||
|  | ||||
| @@ -99,8 +97,7 @@ set_rtkit_interface() | ||||
|     } | ||||
| } | ||||
|  | ||||
| static DBusConnection* | ||||
| get_rtkit_dbus_connection() | ||||
| static DBusConnection *get_rtkit_dbus_connection() | ||||
| { | ||||
|     SDL_DBusContext *dbus = SDL_DBus_GetContext(); | ||||
|  | ||||
| @@ -111,8 +108,7 @@ get_rtkit_dbus_connection() | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| static void | ||||
| rtkit_initialize() | ||||
| static void rtkit_initialize() | ||||
| { | ||||
|     DBusConnection *dbus_conn; | ||||
|  | ||||
| @@ -138,8 +134,7 @@ rtkit_initialize() | ||||
|     } | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| rtkit_initialize_realtime_thread() | ||||
| static SDL_bool rtkit_initialize_realtime_thread() | ||||
| { | ||||
|     // Following is an excerpt from rtkit README that outlines the requirements | ||||
|     // a thread must meet before making rtkit requests: | ||||
| @@ -164,7 +159,7 @@ rtkit_initialize_realtime_thread() | ||||
|     int err; | ||||
|     struct rlimit rlimit; | ||||
|     int nLimit = RLIMIT_RTTIME; | ||||
|     pid_t nPid = 0; //self | ||||
|     pid_t nPid = 0; // self | ||||
|     int nSchedPolicy = sched_getscheduler(nPid) | SCHED_RESET_ON_FORK; | ||||
|     struct sched_param schedParam; | ||||
|  | ||||
| @@ -198,8 +193,7 @@ rtkit_initialize_realtime_thread() | ||||
|     return SDL_TRUE; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| rtkit_setpriority_nice(pid_t thread, int nice_level) | ||||
| static SDL_bool rtkit_setpriority_nice(pid_t thread, int nice_level) | ||||
| { | ||||
|     DBusConnection *dbus_conn; | ||||
|     Uint64 pid = (Uint64)getpid(); | ||||
| @@ -222,8 +216,7 @@ rtkit_setpriority_nice(pid_t thread, int nice_level) | ||||
|     return SDL_TRUE; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| rtkit_setpriority_realtime(pid_t thread, int rt_priority) | ||||
| static SDL_bool rtkit_setpriority_realtime(pid_t thread, int rt_priority) | ||||
| { | ||||
|     DBusConnection *dbus_conn; | ||||
|     Uint64 pid = (Uint64)getpid(); | ||||
| @@ -261,8 +254,7 @@ rtkit_setpriority_realtime(pid_t thread, int rt_priority) | ||||
| #endif /* threads */ | ||||
|  | ||||
| /* this is a public symbol, so it has to exist even if threads are disabled. */ | ||||
| int | ||||
| SDL_LinuxSetThreadPriority(Sint64 threadID, int priority) | ||||
| int SDL_LinuxSetThreadPriority(Sint64 threadID, int priority) | ||||
| { | ||||
| #if SDL_THREADS_DISABLED | ||||
|     return SDL_Unsupported(); | ||||
| @@ -294,8 +286,7 @@ SDL_LinuxSetThreadPriority(Sint64 threadID, int priority) | ||||
| } | ||||
|  | ||||
| /* this is a public symbol, so it has to exist even if threads are disabled. */ | ||||
| int | ||||
| SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy) | ||||
| int SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy) | ||||
| { | ||||
| #if SDL_THREADS_DISABLED | ||||
|     return SDL_Unsupported(); | ||||
| @@ -356,6 +347,6 @@ SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedP | ||||
| #endif | ||||
| } | ||||
|  | ||||
| #endif  /* __LINUX__ */ | ||||
| #endif /* __LINUX__ */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
|   | ||||
| @@ -49,8 +49,7 @@ static int SDL_UDEV_load_syms(void); | ||||
| static SDL_bool SDL_UDEV_hotplug_update_available(void); | ||||
| static void device_event(SDL_UDEV_deviceevent type, struct udev_device *dev); | ||||
|  | ||||
| static SDL_bool | ||||
| SDL_UDEV_load_sym(const char *fn, void **addr) | ||||
| static SDL_bool SDL_UDEV_load_sym(const char *fn, void **addr) | ||||
| { | ||||
|     *addr = SDL_LoadFunction(_this->udev_handle, fn); | ||||
|     if (*addr == NULL) { | ||||
| @@ -61,12 +60,12 @@ SDL_UDEV_load_sym(const char *fn, void **addr) | ||||
|     return SDL_TRUE; | ||||
| } | ||||
|  | ||||
| static int | ||||
| SDL_UDEV_load_syms(void) | ||||
| static int SDL_UDEV_load_syms(void) | ||||
| { | ||||
|     /* cast funcs to char* first, to please GCC's strict aliasing rules. */ | ||||
|     #define SDL_UDEV_SYM(x) \ | ||||
|         if (!SDL_UDEV_load_sym(#x, (void **) (char *) & _this->syms.x)) return -1 | ||||
| /* cast funcs to char* first, to please GCC's strict aliasing rules. */ | ||||
| #define SDL_UDEV_SYM(x)                                          \ | ||||
|     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_devnode); | ||||
| @@ -94,13 +93,12 @@ SDL_UDEV_load_syms(void) | ||||
|     SDL_UDEV_SYM(udev_unref); | ||||
|     SDL_UDEV_SYM(udev_device_new_from_devnum); | ||||
|     SDL_UDEV_SYM(udev_device_get_devnum); | ||||
|     #undef SDL_UDEV_SYM | ||||
| #undef SDL_UDEV_SYM | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| SDL_UDEV_hotplug_update_available(void) | ||||
| static SDL_bool SDL_UDEV_hotplug_update_available(void) | ||||
| { | ||||
|     if (_this->udev_mon != NULL) { | ||||
|         const int fd = _this->syms.udev_monitor_get_fd(_this->udev_mon); | ||||
| @@ -111,14 +109,12 @@ SDL_UDEV_hotplug_update_available(void) | ||||
|     return SDL_FALSE; | ||||
| } | ||||
|  | ||||
|  | ||||
| int | ||||
| SDL_UDEV_Init(void) | ||||
| int SDL_UDEV_Init(void) | ||||
| { | ||||
|     int retval = 0; | ||||
|  | ||||
|     if (_this == NULL) { | ||||
|         _this = (SDL_UDEV_PrivateData *) SDL_calloc(1, sizeof(*_this)); | ||||
|         _this = (SDL_UDEV_PrivateData *)SDL_calloc(1, sizeof(*_this)); | ||||
|         if (_this == NULL) { | ||||
|             return SDL_OutOfMemory(); | ||||
|         } | ||||
| @@ -151,7 +147,6 @@ SDL_UDEV_Init(void) | ||||
|  | ||||
|         /* Do an initial scan of existing devices */ | ||||
|         SDL_UDEV_Scan(); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     _this->ref_count += 1; | ||||
| @@ -159,8 +154,7 @@ SDL_UDEV_Init(void) | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_UDEV_Quit(void) | ||||
| void SDL_UDEV_Quit(void) | ||||
| { | ||||
|     SDL_UDEV_CallbackList *item; | ||||
|  | ||||
| @@ -194,8 +188,7 @@ SDL_UDEV_Quit(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_UDEV_Scan(void) | ||||
| void SDL_UDEV_Scan(void) | ||||
| { | ||||
|     struct udev_enumerate *enumerate = NULL; | ||||
|     struct udev_list_entry *devs = NULL; | ||||
| @@ -283,11 +276,7 @@ SDL_UDEV_GetProductInfo(const char *device_path, Uint16 *vendor, Uint16 *product | ||||
|     return found; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| void | ||||
| SDL_UDEV_UnloadLibrary(void) | ||||
| void SDL_UDEV_UnloadLibrary(void) | ||||
| { | ||||
|     if (_this == NULL) { | ||||
|         return; | ||||
| @@ -299,8 +288,7 @@ SDL_UDEV_UnloadLibrary(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_UDEV_LoadLibrary(void) | ||||
| int SDL_UDEV_LoadLibrary(void) | ||||
| { | ||||
|     int retval = 0, i; | ||||
|  | ||||
| @@ -327,7 +315,7 @@ SDL_UDEV_LoadLibrary(void) | ||||
| #endif | ||||
|  | ||||
|     if (_this->udev_handle == NULL) { | ||||
|         for ( i = 0 ; i < SDL_arraysize(SDL_UDEV_LIBS); i++) { | ||||
|         for (i = 0; i < SDL_arraysize(SDL_UDEV_LIBS); i++) { | ||||
|             _this->udev_handle = SDL_LoadObject(SDL_UDEV_LIBS[i]); | ||||
|             if (_this->udev_handle != NULL) { | ||||
|                 retval = SDL_UDEV_load_syms(); | ||||
| @@ -356,7 +344,7 @@ static void get_caps(struct udev_device *dev, struct udev_device *pdev, const ch | ||||
|     int i; | ||||
|     unsigned long v; | ||||
|  | ||||
|     SDL_memset(bitmask, 0, bitmask_len*sizeof(*bitmask)); | ||||
|     SDL_memset(bitmask, 0, bitmask_len * sizeof(*bitmask)); | ||||
|     value = _this->syms.udev_device_get_sysattr_value(pdev, attr); | ||||
|     if (value == NULL) { | ||||
|         return; | ||||
| @@ -365,7 +353,7 @@ static void get_caps(struct udev_device *dev, struct udev_device *pdev, const ch | ||||
|     SDL_strlcpy(text, value, sizeof(text)); | ||||
|     i = 0; | ||||
|     while ((word = SDL_strrchr(text, ' ')) != NULL) { | ||||
|         v = SDL_strtoul(word+1, NULL, 16); | ||||
|         v = SDL_strtoul(word + 1, NULL, 16); | ||||
|         if (i < bitmask_len) { | ||||
|             bitmask[i] = v; | ||||
|         } | ||||
| @@ -378,8 +366,7 @@ static void get_caps(struct udev_device *dev, struct udev_device *pdev, const ch | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| guess_device_class(struct udev_device *dev) | ||||
| static int guess_device_class(struct udev_device *dev) | ||||
| { | ||||
|     struct udev_device *pdev; | ||||
|     unsigned long bitmask_ev[NBITS(EV_MAX)]; | ||||
| @@ -408,8 +395,7 @@ guess_device_class(struct udev_device *dev) | ||||
|                                       &bitmask_rel[0]); | ||||
| } | ||||
|  | ||||
| static void | ||||
| device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) | ||||
| static void device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) | ||||
| { | ||||
|     const char *subsystem; | ||||
|     const char *val = NULL; | ||||
| @@ -429,23 +415,23 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) | ||||
|         /* udev rules reference: http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-input_id.c */ | ||||
|  | ||||
|         val = _this->syms.udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK"); | ||||
|         if (val != NULL && SDL_strcmp(val, "1") == 0 ) { | ||||
|         if (val != NULL && SDL_strcmp(val, "1") == 0) { | ||||
|             devclass |= SDL_UDEV_DEVICE_JOYSTICK; | ||||
|         } | ||||
|  | ||||
|         val = _this->syms.udev_device_get_property_value(dev, "ID_INPUT_ACCELEROMETER"); | ||||
|         if (SDL_GetHintBoolean(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_TRUE) && | ||||
|             val != NULL && SDL_strcmp(val, "1") == 0 ) { | ||||
|             val != NULL && SDL_strcmp(val, "1") == 0) { | ||||
|             devclass |= SDL_UDEV_DEVICE_JOYSTICK; | ||||
|         } | ||||
|  | ||||
|         val = _this->syms.udev_device_get_property_value(dev, "ID_INPUT_MOUSE"); | ||||
|         if (val != NULL && SDL_strcmp(val, "1") == 0 ) { | ||||
|         if (val != NULL && SDL_strcmp(val, "1") == 0) { | ||||
|             devclass |= SDL_UDEV_DEVICE_MOUSE; | ||||
|         } | ||||
|  | ||||
|         val = _this->syms.udev_device_get_property_value(dev, "ID_INPUT_TOUCHSCREEN"); | ||||
|         if (val != NULL && SDL_strcmp(val, "1") == 0 ) { | ||||
|         if (val != NULL && SDL_strcmp(val, "1") == 0) { | ||||
|             devclass |= SDL_UDEV_DEVICE_TOUCHSCREEN; | ||||
|         } | ||||
|  | ||||
| @@ -456,7 +442,7 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) | ||||
|            Ref: http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-input_id.c#n183 | ||||
|         */ | ||||
|         val = _this->syms.udev_device_get_property_value(dev, "ID_INPUT_KEY"); | ||||
|         if (val != NULL && SDL_strcmp(val, "1") == 0 ) { | ||||
|         if (val != NULL && SDL_strcmp(val, "1") == 0) { | ||||
|             devclass |= SDL_UDEV_DEVICE_KEYBOARD; | ||||
|         } | ||||
|  | ||||
| @@ -488,8 +474,7 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_UDEV_Poll(void) | ||||
| void SDL_UDEV_Poll(void) | ||||
| { | ||||
|     struct udev_device *dev = NULL; | ||||
|     const char *action = NULL; | ||||
| @@ -517,11 +502,10 @@ SDL_UDEV_Poll(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_UDEV_AddCallback(SDL_UDEV_Callback cb) | ||||
| int SDL_UDEV_AddCallback(SDL_UDEV_Callback cb) | ||||
| { | ||||
|     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)); | ||||
|     if (item == NULL) { | ||||
|         return SDL_OutOfMemory(); | ||||
|     } | ||||
| @@ -538,8 +522,7 @@ SDL_UDEV_AddCallback(SDL_UDEV_Callback cb) | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_UDEV_DelCallback(SDL_UDEV_Callback cb) | ||||
| void SDL_UDEV_DelCallback(SDL_UDEV_Callback cb) | ||||
| { | ||||
|     SDL_UDEV_CallbackList *item; | ||||
|     SDL_UDEV_CallbackList *prev = NULL; | ||||
| @@ -578,8 +561,7 @@ SDL_UDEV_GetUdevSyms(void) | ||||
|     return &_this->syms; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_UDEV_ReleaseUdevSyms(void) | ||||
| void SDL_UDEV_ReleaseUdevSyms(void) | ||||
| { | ||||
|     SDL_UDEV_Quit(); | ||||
| } | ||||
|   | ||||
| @@ -48,12 +48,14 @@ typedef enum | ||||
|  | ||||
| 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; | ||||
|     struct SDL_UDEV_CallbackList *next; | ||||
| } 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_devnode)(struct udev_device *); | ||||
|     const char *(*udev_device_get_subsystem)(struct udev_device *); | ||||
| @@ -78,8 +80,8 @@ typedef struct SDL_UDEV_Symbols { | ||||
|     void (*udev_monitor_unref)(struct udev_monitor *); | ||||
|     struct udev *(*udev_new)(void); | ||||
|     void (*udev_unref)(struct udev *); | ||||
|     struct udev_device * (*udev_device_new_from_devnum)(struct udev *udev, char type, dev_t devnum); | ||||
|     dev_t (*udev_device_get_devnum) (struct udev_device *udev_device); | ||||
|     struct udev_device *(*udev_device_new_from_devnum)(struct udev *udev, char type, dev_t devnum); | ||||
|     dev_t (*udev_device_get_devnum)(struct udev_device *udev_device); | ||||
| } SDL_UDEV_Symbols; | ||||
|  | ||||
| typedef struct SDL_UDEV_PrivateData | ||||
| @@ -107,7 +109,6 @@ extern void SDL_UDEV_DelCallback(SDL_UDEV_Callback cb); | ||||
| extern const SDL_UDEV_Symbols *SDL_UDEV_GetUdevSyms(void); | ||||
| extern void SDL_UDEV_ReleaseUdevSyms(void); | ||||
|  | ||||
|  | ||||
| #endif /* HAVE_LIBUDEV_H && HAVE_LINUX_INPUT_H */ | ||||
|  | ||||
| #endif /* SDL_udev_h_ */ | ||||
|   | ||||
| @@ -19,9 +19,7 @@ | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
|  | ||||
| void SDL_WSCONS_Init(); | ||||
| void SDL_WSCONS_Quit(); | ||||
|  | ||||
| void SDL_WSCONS_PumpEvents(); | ||||
|  | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -35,18 +35,21 @@ typedef struct SDL_WSCONS_mouse_input_data | ||||
|     int fd; | ||||
| } SDL_WSCONS_mouse_input_data; | ||||
|  | ||||
| SDL_WSCONS_mouse_input_data* SDL_WSCONS_Init_Mouse() | ||||
| SDL_WSCONS_mouse_input_data *SDL_WSCONS_Init_Mouse() | ||||
| { | ||||
| #ifdef WSMOUSEIO_SETVERSION | ||||
|     int version = WSMOUSE_EVENT_VERSION; | ||||
| #endif | ||||
|     SDL_WSCONS_mouse_input_data* mouseInputData = SDL_calloc(1, sizeof(SDL_WSCONS_mouse_input_data)); | ||||
|     SDL_WSCONS_mouse_input_data *mouseInputData = SDL_calloc(1, sizeof(SDL_WSCONS_mouse_input_data)); | ||||
|  | ||||
|     if (mouseInputData == NULL) { | ||||
|         return NULL; | ||||
|     } | ||||
|     mouseInputData->fd = open("/dev/wsmouse",O_RDWR | O_NONBLOCK | O_CLOEXEC); | ||||
|     if (mouseInputData->fd == -1) {free(mouseInputData); return NULL; } | ||||
|     mouseInputData->fd = open("/dev/wsmouse", O_RDWR | O_NONBLOCK | O_CLOEXEC); | ||||
|     if (mouseInputData->fd == -1) { | ||||
|         free(mouseInputData); | ||||
|         return NULL; | ||||
|     } | ||||
| #ifdef WSMOUSEIO_SETMODE | ||||
|     ioctl(mouseInputData->fd, WSMOUSEIO_SETMODE, WSMOUSE_COMPAT); | ||||
| #endif | ||||
| @@ -56,77 +59,72 @@ SDL_WSCONS_mouse_input_data* SDL_WSCONS_Init_Mouse() | ||||
|     return mouseInputData; | ||||
| } | ||||
|  | ||||
| void updateMouse(SDL_WSCONS_mouse_input_data* inputData) | ||||
| void updateMouse(SDL_WSCONS_mouse_input_data *inputData) | ||||
| { | ||||
|     struct wscons_event events[64]; | ||||
|     int type; | ||||
|     int n,i; | ||||
|     SDL_Mouse* mouse = SDL_GetMouse(); | ||||
|     int n, i; | ||||
|     SDL_Mouse *mouse = SDL_GetMouse(); | ||||
|  | ||||
|     if ((n = read(inputData->fd, events, sizeof(events))) > 0) { | ||||
|         n /= sizeof(struct wscons_event); | ||||
|         for (i = 0; i < n; i++) { | ||||
|             type = events[i].type; | ||||
|             switch(type) | ||||
|             { | ||||
|             switch (type) { | ||||
|             case WSCONS_EVENT_MOUSE_DOWN: | ||||
|                 { | ||||
|                     switch (events[i].value) | ||||
|                     { | ||||
|                     case 0: /* Left Mouse Button. */ | ||||
|                         SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_LEFT); | ||||
|                         break; | ||||
|                     case 1: /* Middle Mouse Button. */ | ||||
|                         SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_MIDDLE); | ||||
|                         break; | ||||
|                     case 2: /* Right Mouse Button. */ | ||||
|                         SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_RIGHT); | ||||
|                         break; | ||||
|                     } | ||||
|             { | ||||
|                 switch (events[i].value) { | ||||
|                 case 0: /* Left Mouse Button. */ | ||||
|                     SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_LEFT); | ||||
|                     break; | ||||
|                 case 1: /* Middle Mouse Button. */ | ||||
|                     SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_MIDDLE); | ||||
|                     break; | ||||
|                 case 2: /* Right Mouse Button. */ | ||||
|                     SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_BUTTON_RIGHT); | ||||
|                     break; | ||||
|                 } | ||||
|                 break; | ||||
|             } break; | ||||
|             case WSCONS_EVENT_MOUSE_UP: | ||||
|                 { | ||||
|                     switch (events[i].value) | ||||
|                     { | ||||
|                     case 0: /* Left Mouse Button. */ | ||||
|                         SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_LEFT); | ||||
|                         break; | ||||
|                     case 1: /* Middle Mouse Button. */ | ||||
|                         SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_MIDDLE); | ||||
|                         break; | ||||
|                     case 2: /* Right Mouse Button. */ | ||||
|                         SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_RIGHT); | ||||
|                         break; | ||||
|                     } | ||||
|             { | ||||
|                 switch (events[i].value) { | ||||
|                 case 0: /* Left Mouse Button. */ | ||||
|                     SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_LEFT); | ||||
|                     break; | ||||
|                 case 1: /* Middle Mouse Button. */ | ||||
|                     SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_MIDDLE); | ||||
|                     break; | ||||
|                 case 2: /* Right Mouse Button. */ | ||||
|                     SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_BUTTON_RIGHT); | ||||
|                     break; | ||||
|                 } | ||||
|                 break; | ||||
|             } break; | ||||
|             case WSCONS_EVENT_MOUSE_DELTA_X: | ||||
|                 { | ||||
|                     SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 1, events[i].value, 0); | ||||
|                     break; | ||||
|                 } | ||||
|             { | ||||
|                 SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 1, events[i].value, 0); | ||||
|                 break; | ||||
|             } | ||||
|             case WSCONS_EVENT_MOUSE_DELTA_Y: | ||||
|                 { | ||||
|                     SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 1, 0, -events[i].value); | ||||
|                     break; | ||||
|                 } | ||||
|             { | ||||
|                 SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 1, 0, -events[i].value); | ||||
|                 break; | ||||
|             } | ||||
|             case WSCONS_EVENT_MOUSE_DELTA_W: | ||||
|                 { | ||||
|                     SDL_SendMouseWheel(mouse->focus, mouse->mouseID, events[i].value, 0, SDL_MOUSEWHEEL_NORMAL); | ||||
|                     break; | ||||
|                 } | ||||
|             { | ||||
|                 SDL_SendMouseWheel(mouse->focus, mouse->mouseID, events[i].value, 0, SDL_MOUSEWHEEL_NORMAL); | ||||
|                 break; | ||||
|             } | ||||
|             case WSCONS_EVENT_MOUSE_DELTA_Z: | ||||
|                 { | ||||
|                     SDL_SendMouseWheel(mouse->focus, mouse->mouseID, 0, -events[i].value, SDL_MOUSEWHEEL_NORMAL); | ||||
|                     break; | ||||
|                 } | ||||
|             { | ||||
|                 SDL_SendMouseWheel(mouse->focus, mouse->mouseID, 0, -events[i].value, SDL_MOUSEWHEEL_NORMAL); | ||||
|                 break; | ||||
|             } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| void SDL_WSCONS_Quit_Mouse(SDL_WSCONS_mouse_input_data* inputData) | ||||
| void SDL_WSCONS_Quit_Mouse(SDL_WSCONS_mouse_input_data *inputData) | ||||
| { | ||||
|     if (inputData == NULL) { | ||||
|         return; | ||||
|   | ||||
| @@ -32,17 +32,14 @@ | ||||
| #endif | ||||
| #include <errno.h> | ||||
|  | ||||
|  | ||||
| int | ||||
| SDL_IOReady(int fd, int flags, int timeoutMS) | ||||
| int SDL_IOReady(int fd, int flags, int timeoutMS) | ||||
| { | ||||
|     int result; | ||||
|  | ||||
|     SDL_assert(flags & (SDL_IOR_READ | SDL_IOR_WRITE)); | ||||
|  | ||||
|     /* Note: We don't bother to account for elapsed time if we get EINTR */ | ||||
|     do | ||||
|     { | ||||
|     do { | ||||
| #ifdef HAVE_POLL | ||||
|         struct pollfd info; | ||||
|  | ||||
| @@ -83,7 +80,7 @@ SDL_IOReady(int fd, int flags, int timeoutMS) | ||||
|         result = select(fd + 1, rfdp, wfdp, NULL, tvp); | ||||
| #endif /* HAVE_POLL */ | ||||
|  | ||||
|     } while ( result < 0 && errno == EINTR && !(flags & SDL_IOR_NO_RETRY)); | ||||
|     } while (result < 0 && errno == EINTR && !(flags & SDL_IOR_NO_RETRY)); | ||||
|  | ||||
|     return result; | ||||
| } | ||||
|   | ||||
| @@ -30,7 +30,7 @@ | ||||
| #ifndef WIN32 | ||||
| #define WIN32 | ||||
| #endif | ||||
| #undef  WINNT | ||||
| #undef WINNT | ||||
|  | ||||
| /* Far pointers don't exist in 32-bit code */ | ||||
| #ifndef FAR | ||||
| @@ -39,35 +39,35 @@ | ||||
|  | ||||
| /* Error codes not yet included in Win32 API header files */ | ||||
| #ifndef MAKE_HRESULT | ||||
| #define MAKE_HRESULT(sev,fac,code) \ | ||||
|     ((HRESULT)(((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code)))) | ||||
| #define MAKE_HRESULT(sev, fac, code) \ | ||||
|     ((HRESULT)(((unsigned long)(sev) << 31) | ((unsigned long)(fac) << 16) | ((unsigned long)(code)))) | ||||
| #endif | ||||
|  | ||||
| #ifndef S_OK | ||||
| #define S_OK        (HRESULT)0x00000000L | ||||
| #define S_OK (HRESULT)0x00000000L | ||||
| #endif | ||||
|  | ||||
| #ifndef SUCCEEDED | ||||
| #define SUCCEEDED(x)    ((HRESULT)(x) >= 0) | ||||
| #define SUCCEEDED(x) ((HRESULT)(x) >= 0) | ||||
| #endif | ||||
| #ifndef FAILED | ||||
| #define FAILED(x)   ((HRESULT)(x)<0) | ||||
| #define FAILED(x) ((HRESULT)(x) < 0) | ||||
| #endif | ||||
|  | ||||
| #ifndef E_FAIL | ||||
| #define E_FAIL      (HRESULT)0x80000008L | ||||
| #define E_FAIL (HRESULT)0x80000008L | ||||
| #endif | ||||
| #ifndef E_NOINTERFACE | ||||
| #define E_NOINTERFACE   (HRESULT)0x80004002L | ||||
| #define E_NOINTERFACE (HRESULT)0x80004002L | ||||
| #endif | ||||
| #ifndef E_OUTOFMEMORY | ||||
| #define E_OUTOFMEMORY   (HRESULT)0x8007000EL | ||||
| #define E_OUTOFMEMORY (HRESULT)0x8007000EL | ||||
| #endif | ||||
| #ifndef E_INVALIDARG | ||||
| #define E_INVALIDARG    (HRESULT)0x80070057L | ||||
| #define E_INVALIDARG (HRESULT)0x80070057L | ||||
| #endif | ||||
| #ifndef E_NOTIMPL | ||||
| #define E_NOTIMPL   (HRESULT)0x80004001L | ||||
| #define E_NOTIMPL (HRESULT)0x80004001L | ||||
| #endif | ||||
| #ifndef REGDB_E_CLASSNOTREG | ||||
| #define REGDB_E_CLASSNOTREG (HRESULT)0x80040154L | ||||
| @@ -75,16 +75,16 @@ | ||||
|  | ||||
| /* Severity codes */ | ||||
| #ifndef SEVERITY_ERROR | ||||
| #define SEVERITY_ERROR  1 | ||||
| #define SEVERITY_ERROR 1 | ||||
| #endif | ||||
|  | ||||
| /* Error facility codes */ | ||||
| #ifndef FACILITY_WIN32 | ||||
| #define FACILITY_WIN32  7 | ||||
| #define FACILITY_WIN32 7 | ||||
| #endif | ||||
|  | ||||
| #ifndef FIELD_OFFSET | ||||
| #define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field)) | ||||
| #define FIELD_OFFSET(type, field) ((LONG) & (((type *)0)->field)) | ||||
| #endif | ||||
|  | ||||
| /* DirectX headers (if it isn't included, I haven't tested it yet) | ||||
| @@ -103,7 +103,10 @@ | ||||
| #ifdef HAVE_DINPUT_H | ||||
| #include <dinput.h> | ||||
| #else | ||||
| typedef struct { int unused; } DIDEVICEINSTANCE; | ||||
| typedef struct | ||||
| { | ||||
|     int unused; | ||||
| } DIDEVICEINSTANCE; | ||||
| #endif | ||||
|  | ||||
| #endif /* SDL_directx_h_ */ | ||||
|   | ||||
| @@ -24,7 +24,6 @@ | ||||
|  | ||||
| #include "SDL_hid.h" | ||||
|  | ||||
|  | ||||
| HidD_GetString_t SDL_HidD_GetManufacturerString; | ||||
| HidD_GetString_t SDL_HidD_GetProductString; | ||||
| HidP_GetCaps_t SDL_HidP_GetCaps; | ||||
| @@ -36,14 +35,12 @@ HidP_GetData_t SDL_HidP_GetData; | ||||
| static HMODULE s_pHIDDLL = 0; | ||||
| static int s_HIDDLLRefCount = 0; | ||||
|  | ||||
|  | ||||
| int | ||||
| WIN_LoadHIDDLL(void) | ||||
| int WIN_LoadHIDDLL(void) | ||||
| { | ||||
|     if (s_pHIDDLL) { | ||||
|         SDL_assert(s_HIDDLLRefCount > 0); | ||||
|         s_HIDDLLRefCount++; | ||||
|         return 0;  /* already loaded */ | ||||
|         return 0; /* already loaded */ | ||||
|     } | ||||
|  | ||||
|     s_pHIDDLL = LoadLibrary(TEXT("hid.dll")); | ||||
| @@ -71,8 +68,7 @@ WIN_LoadHIDDLL(void) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| WIN_UnloadHIDDLL(void) | ||||
| void WIN_UnloadHIDDLL(void) | ||||
| { | ||||
|     if (s_pHIDDLL) { | ||||
|         SDL_assert(s_HIDDLLRefCount > 0); | ||||
|   | ||||
| @@ -39,155 +39,166 @@ typedef struct _HIDD_ATTRIBUTES | ||||
|     USHORT VersionNumber; | ||||
| } HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES; | ||||
|  | ||||
| typedef enum { | ||||
| typedef enum | ||||
| { | ||||
|     HidP_Input = 0, | ||||
|     HidP_Output = 1, | ||||
|     HidP_Feature = 2 | ||||
| } HIDP_REPORT_TYPE; | ||||
|  | ||||
| typedef struct { | ||||
|     USAGE   UsagePage; | ||||
|     UCHAR   ReportID; | ||||
| typedef struct | ||||
| { | ||||
|     USAGE UsagePage; | ||||
|     UCHAR ReportID; | ||||
|     BOOLEAN IsAlias; | ||||
|     USHORT  BitField; | ||||
|     USHORT  LinkCollection; | ||||
|     USAGE   LinkUsage; | ||||
|     USAGE   LinkUsagePage; | ||||
|     USHORT BitField; | ||||
|     USHORT LinkCollection; | ||||
|     USAGE LinkUsage; | ||||
|     USAGE LinkUsagePage; | ||||
|     BOOLEAN IsRange; | ||||
|     BOOLEAN IsStringRange; | ||||
|     BOOLEAN IsDesignatorRange; | ||||
|     BOOLEAN IsAbsolute; | ||||
|     ULONG   Reserved[ 10 ]; | ||||
|     union { | ||||
|         struct { | ||||
|             USAGE   UsageMin; | ||||
|             USAGE   UsageMax; | ||||
|             USHORT  StringMin; | ||||
|             USHORT  StringMax; | ||||
|             USHORT  DesignatorMin; | ||||
|             USHORT  DesignatorMax; | ||||
|             USHORT  DataIndexMin; | ||||
|             USHORT  DataIndexMax; | ||||
|     ULONG Reserved[10]; | ||||
|     union | ||||
|     { | ||||
|         struct | ||||
|         { | ||||
|             USAGE UsageMin; | ||||
|             USAGE UsageMax; | ||||
|             USHORT StringMin; | ||||
|             USHORT StringMax; | ||||
|             USHORT DesignatorMin; | ||||
|             USHORT DesignatorMax; | ||||
|             USHORT DataIndexMin; | ||||
|             USHORT DataIndexMax; | ||||
|         } Range; | ||||
|         struct { | ||||
|             USAGE   Usage; | ||||
|             USAGE   Reserved1; | ||||
|             USHORT  StringIndex; | ||||
|             USHORT  Reserved2; | ||||
|             USHORT  DesignatorIndex; | ||||
|             USHORT  Reserved3; | ||||
|             USHORT  DataIndex; | ||||
|             USHORT  Reserved4; | ||||
|         struct | ||||
|         { | ||||
|             USAGE Usage; | ||||
|             USAGE Reserved1; | ||||
|             USHORT StringIndex; | ||||
|             USHORT Reserved2; | ||||
|             USHORT DesignatorIndex; | ||||
|             USHORT Reserved3; | ||||
|             USHORT DataIndex; | ||||
|             USHORT Reserved4; | ||||
|         } NotRange; | ||||
|     }; | ||||
| } HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS; | ||||
|  | ||||
| typedef struct { | ||||
|     USAGE   UsagePage; | ||||
|     UCHAR   ReportID; | ||||
| typedef struct | ||||
| { | ||||
|     USAGE UsagePage; | ||||
|     UCHAR ReportID; | ||||
|     BOOLEAN IsAlias; | ||||
|     USHORT  BitField; | ||||
|     USHORT  LinkCollection; | ||||
|     USAGE   LinkUsage; | ||||
|     USAGE   LinkUsagePage; | ||||
|     USHORT BitField; | ||||
|     USHORT LinkCollection; | ||||
|     USAGE LinkUsage; | ||||
|     USAGE LinkUsagePage; | ||||
|     BOOLEAN IsRange; | ||||
|     BOOLEAN IsStringRange; | ||||
|     BOOLEAN IsDesignatorRange; | ||||
|     BOOLEAN IsAbsolute; | ||||
|     BOOLEAN HasNull; | ||||
|     UCHAR   Reserved; | ||||
|     USHORT  BitSize; | ||||
|     USHORT  ReportCount; | ||||
|     USHORT  Reserved2[ 5 ]; | ||||
|     ULONG   UnitsExp; | ||||
|     ULONG   Units; | ||||
|     LONG    LogicalMin; | ||||
|     LONG    LogicalMax; | ||||
|     LONG    PhysicalMin; | ||||
|     LONG    PhysicalMax; | ||||
|     union { | ||||
|         struct { | ||||
|             USAGE   UsageMin; | ||||
|             USAGE   UsageMax; | ||||
|             USHORT  StringMin; | ||||
|             USHORT  StringMax; | ||||
|             USHORT  DesignatorMin; | ||||
|             USHORT  DesignatorMax; | ||||
|             USHORT  DataIndexMin; | ||||
|             USHORT  DataIndexMax; | ||||
|     UCHAR Reserved; | ||||
|     USHORT BitSize; | ||||
|     USHORT ReportCount; | ||||
|     USHORT Reserved2[5]; | ||||
|     ULONG UnitsExp; | ||||
|     ULONG Units; | ||||
|     LONG LogicalMin; | ||||
|     LONG LogicalMax; | ||||
|     LONG PhysicalMin; | ||||
|     LONG PhysicalMax; | ||||
|     union | ||||
|     { | ||||
|         struct | ||||
|         { | ||||
|             USAGE UsageMin; | ||||
|             USAGE UsageMax; | ||||
|             USHORT StringMin; | ||||
|             USHORT StringMax; | ||||
|             USHORT DesignatorMin; | ||||
|             USHORT DesignatorMax; | ||||
|             USHORT DataIndexMin; | ||||
|             USHORT DataIndexMax; | ||||
|         } Range; | ||||
|         struct { | ||||
|             USAGE   Usage; | ||||
|             USAGE   Reserved1; | ||||
|             USHORT  StringIndex; | ||||
|             USHORT  Reserved2; | ||||
|             USHORT  DesignatorIndex; | ||||
|             USHORT  Reserved3; | ||||
|             USHORT  DataIndex; | ||||
|             USHORT  Reserved4; | ||||
|         struct | ||||
|         { | ||||
|             USAGE Usage; | ||||
|             USAGE Reserved1; | ||||
|             USHORT StringIndex; | ||||
|             USHORT Reserved2; | ||||
|             USHORT DesignatorIndex; | ||||
|             USHORT Reserved3; | ||||
|             USHORT DataIndex; | ||||
|             USHORT Reserved4; | ||||
|         } NotRange; | ||||
|     }; | ||||
| } HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS; | ||||
|  | ||||
| typedef struct { | ||||
|     USAGE   Usage; | ||||
|     USAGE   UsagePage; | ||||
|     USHORT  InputReportByteLength; | ||||
|     USHORT  OutputReportByteLength; | ||||
|     USHORT  FeatureReportByteLength; | ||||
|     USHORT  Reserved[ 17 ]; | ||||
|     USHORT  NumberLinkCollectionNodes; | ||||
|     USHORT  NumberInputButtonCaps; | ||||
|     USHORT  NumberInputValueCaps; | ||||
|     USHORT  NumberInputDataIndices; | ||||
|     USHORT  NumberOutputButtonCaps; | ||||
|     USHORT  NumberOutputValueCaps; | ||||
|     USHORT  NumberOutputDataIndices; | ||||
|     USHORT  NumberFeatureButtonCaps; | ||||
|     USHORT  NumberFeatureValueCaps; | ||||
|     USHORT  NumberFeatureDataIndices; | ||||
| typedef struct | ||||
| { | ||||
|     USAGE Usage; | ||||
|     USAGE UsagePage; | ||||
|     USHORT InputReportByteLength; | ||||
|     USHORT OutputReportByteLength; | ||||
|     USHORT FeatureReportByteLength; | ||||
|     USHORT Reserved[17]; | ||||
|     USHORT NumberLinkCollectionNodes; | ||||
|     USHORT NumberInputButtonCaps; | ||||
|     USHORT NumberInputValueCaps; | ||||
|     USHORT NumberInputDataIndices; | ||||
|     USHORT NumberOutputButtonCaps; | ||||
|     USHORT NumberOutputValueCaps; | ||||
|     USHORT NumberOutputDataIndices; | ||||
|     USHORT NumberFeatureButtonCaps; | ||||
|     USHORT NumberFeatureValueCaps; | ||||
|     USHORT NumberFeatureDataIndices; | ||||
| } HIDP_CAPS, *PHIDP_CAPS; | ||||
|  | ||||
| typedef struct { | ||||
|     USHORT  DataIndex; | ||||
|     USHORT  Reserved; | ||||
|     union { | ||||
|         ULONG   RawValue; | ||||
| typedef struct | ||||
| { | ||||
|     USHORT DataIndex; | ||||
|     USHORT Reserved; | ||||
|     union | ||||
|     { | ||||
|         ULONG RawValue; | ||||
|         BOOLEAN On; | ||||
|     }; | ||||
| } HIDP_DATA, *PHIDP_DATA; | ||||
|  | ||||
| #define HIDP_ERROR_CODES( p1, p2 ) ((NTSTATUS)(((p1) << 28) | (0x11 << 16) | (p2))) | ||||
| #define HIDP_STATUS_SUCCESS                 HIDP_ERROR_CODES( 0x0, 0x0000 ) | ||||
| #define HIDP_STATUS_NULL                    HIDP_ERROR_CODES( 0x8, 0x0001 ) | ||||
| #define HIDP_STATUS_INVALID_PREPARSED_DATA  HIDP_ERROR_CODES( 0xC, 0x0001 ) | ||||
| #define HIDP_STATUS_INVALID_REPORT_TYPE     HIDP_ERROR_CODES( 0xC, 0x0002 ) | ||||
| #define HIDP_STATUS_INVALID_REPORT_LENGTH   HIDP_ERROR_CODES( 0xC, 0x0003 ) | ||||
| #define HIDP_STATUS_USAGE_NOT_FOUND         HIDP_ERROR_CODES( 0xC, 0x0004 ) | ||||
| #define HIDP_STATUS_VALUE_OUT_OF_RANGE      HIDP_ERROR_CODES( 0xC, 0x0005 ) | ||||
| #define HIDP_STATUS_BAD_LOG_PHY_VALUES      HIDP_ERROR_CODES( 0xC, 0x0006 ) | ||||
| #define HIDP_STATUS_BUFFER_TOO_SMALL        HIDP_ERROR_CODES( 0xC, 0x0007 ) | ||||
| #define HIDP_STATUS_INTERNAL_ERROR          HIDP_ERROR_CODES( 0xC, 0x0008 ) | ||||
| #define HIDP_STATUS_I8042_TRANS_UNKNOWN     HIDP_ERROR_CODES( 0xC, 0x0009 ) | ||||
| #define HIDP_STATUS_INCOMPATIBLE_REPORT_ID  HIDP_ERROR_CODES( 0xC, 0x000A ) | ||||
| #define HIDP_STATUS_NOT_VALUE_ARRAY         HIDP_ERROR_CODES( 0xC, 0x000B ) | ||||
| #define HIDP_STATUS_IS_VALUE_ARRAY          HIDP_ERROR_CODES( 0xC, 0x000C ) | ||||
| #define HIDP_STATUS_DATA_INDEX_NOT_FOUND    HIDP_ERROR_CODES( 0xC, 0x000D ) | ||||
| #define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE HIDP_ERROR_CODES( 0xC, 0x000E ) | ||||
| #define HIDP_STATUS_BUTTON_NOT_PRESSED      HIDP_ERROR_CODES( 0xC, 0x000F ) | ||||
| #define HIDP_STATUS_REPORT_DOES_NOT_EXIST   HIDP_ERROR_CODES( 0xC, 0x0010 ) | ||||
| #define HIDP_STATUS_NOT_IMPLEMENTED         HIDP_ERROR_CODES( 0xC, 0x0020 ) | ||||
|  | ||||
| #define HIDP_ERROR_CODES(p1, p2)            ((NTSTATUS)(((p1) << 28) | (0x11 << 16) | (p2))) | ||||
| #define HIDP_STATUS_SUCCESS                 HIDP_ERROR_CODES(0x0, 0x0000) | ||||
| #define HIDP_STATUS_NULL                    HIDP_ERROR_CODES(0x8, 0x0001) | ||||
| #define HIDP_STATUS_INVALID_PREPARSED_DATA  HIDP_ERROR_CODES(0xC, 0x0001) | ||||
| #define HIDP_STATUS_INVALID_REPORT_TYPE     HIDP_ERROR_CODES(0xC, 0x0002) | ||||
| #define HIDP_STATUS_INVALID_REPORT_LENGTH   HIDP_ERROR_CODES(0xC, 0x0003) | ||||
| #define HIDP_STATUS_USAGE_NOT_FOUND         HIDP_ERROR_CODES(0xC, 0x0004) | ||||
| #define HIDP_STATUS_VALUE_OUT_OF_RANGE      HIDP_ERROR_CODES(0xC, 0x0005) | ||||
| #define HIDP_STATUS_BAD_LOG_PHY_VALUES      HIDP_ERROR_CODES(0xC, 0x0006) | ||||
| #define HIDP_STATUS_BUFFER_TOO_SMALL        HIDP_ERROR_CODES(0xC, 0x0007) | ||||
| #define HIDP_STATUS_INTERNAL_ERROR          HIDP_ERROR_CODES(0xC, 0x0008) | ||||
| #define HIDP_STATUS_I8042_TRANS_UNKNOWN     HIDP_ERROR_CODES(0xC, 0x0009) | ||||
| #define HIDP_STATUS_INCOMPATIBLE_REPORT_ID  HIDP_ERROR_CODES(0xC, 0x000A) | ||||
| #define HIDP_STATUS_NOT_VALUE_ARRAY         HIDP_ERROR_CODES(0xC, 0x000B) | ||||
| #define HIDP_STATUS_IS_VALUE_ARRAY          HIDP_ERROR_CODES(0xC, 0x000C) | ||||
| #define HIDP_STATUS_DATA_INDEX_NOT_FOUND    HIDP_ERROR_CODES(0xC, 0x000D) | ||||
| #define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE HIDP_ERROR_CODES(0xC, 0x000E) | ||||
| #define HIDP_STATUS_BUTTON_NOT_PRESSED      HIDP_ERROR_CODES(0xC, 0x000F) | ||||
| #define HIDP_STATUS_REPORT_DOES_NOT_EXIST   HIDP_ERROR_CODES(0xC, 0x0010) | ||||
| #define HIDP_STATUS_NOT_IMPLEMENTED         HIDP_ERROR_CODES(0xC, 0x0020) | ||||
|  | ||||
| extern int WIN_LoadHIDDLL(void); | ||||
| extern void WIN_UnloadHIDDLL(void); | ||||
|  | ||||
| typedef BOOLEAN (WINAPI *HidD_GetString_t)(HANDLE HidDeviceObject, PVOID Buffer, ULONG BufferLength); | ||||
| typedef NTSTATUS (WINAPI *HidP_GetCaps_t)(PHIDP_PREPARSED_DATA PreparsedData, PHIDP_CAPS Capabilities); | ||||
| typedef NTSTATUS (WINAPI *HidP_GetButtonCaps_t)(HIDP_REPORT_TYPE ReportType, PHIDP_BUTTON_CAPS ButtonCaps, PUSHORT ButtonCapsLength, PHIDP_PREPARSED_DATA PreparsedData); | ||||
| typedef NTSTATUS (WINAPI *HidP_GetValueCaps_t)(HIDP_REPORT_TYPE ReportType, PHIDP_VALUE_CAPS ValueCaps, PUSHORT ValueCapsLength, PHIDP_PREPARSED_DATA PreparsedData); | ||||
| typedef ULONG (WINAPI *HidP_MaxDataListLength_t)(HIDP_REPORT_TYPE ReportType, PHIDP_PREPARSED_DATA PreparsedData); | ||||
| typedef NTSTATUS (WINAPI *HidP_GetData_t)(HIDP_REPORT_TYPE ReportType, PHIDP_DATA DataList, PULONG DataLength, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); | ||||
| typedef BOOLEAN(WINAPI *HidD_GetString_t)(HANDLE HidDeviceObject, PVOID Buffer, ULONG BufferLength); | ||||
| typedef NTSTATUS(WINAPI *HidP_GetCaps_t)(PHIDP_PREPARSED_DATA PreparsedData, PHIDP_CAPS Capabilities); | ||||
| typedef NTSTATUS(WINAPI *HidP_GetButtonCaps_t)(HIDP_REPORT_TYPE ReportType, PHIDP_BUTTON_CAPS ButtonCaps, PUSHORT ButtonCapsLength, PHIDP_PREPARSED_DATA PreparsedData); | ||||
| typedef NTSTATUS(WINAPI *HidP_GetValueCaps_t)(HIDP_REPORT_TYPE ReportType, PHIDP_VALUE_CAPS ValueCaps, PUSHORT ValueCapsLength, PHIDP_PREPARSED_DATA PreparsedData); | ||||
| typedef ULONG(WINAPI *HidP_MaxDataListLength_t)(HIDP_REPORT_TYPE ReportType, PHIDP_PREPARSED_DATA PreparsedData); | ||||
| typedef NTSTATUS(WINAPI *HidP_GetData_t)(HIDP_REPORT_TYPE ReportType, PHIDP_DATA DataList, PULONG DataLength, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); | ||||
|  | ||||
| extern HidD_GetString_t SDL_HidD_GetManufacturerString; | ||||
| extern HidD_GetString_t SDL_HidD_GetProductString; | ||||
|   | ||||
| @@ -27,7 +27,7 @@ | ||||
| #include "../../audio/SDL_sysaudio.h" | ||||
| #include <objbase.h> /* For CLSIDFromString */ | ||||
|  | ||||
| static const ERole SDL_IMMDevice_role = eConsole;  /* !!! FIXME: should this be eMultimedia? Should be a hint? */ | ||||
| static const ERole SDL_IMMDevice_role = eConsole; /* !!! FIXME: should this be eMultimedia? Should be a hint? */ | ||||
|  | ||||
| /* This is global to the WASAPI target, to handle hotplug and default device lookup. */ | ||||
| static IMMDeviceEnumerator *enumerator = NULL; | ||||
| @@ -39,6 +39,7 @@ static IMMDeviceEnumerator *enumerator = NULL; | ||||
| #define PropVariantInit(p) SDL_zerop(p) | ||||
|  | ||||
| /* 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 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 } }; | ||||
| @@ -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 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 } }; | ||||
| /* *INDENT-ON* */ /* clang-format on */ | ||||
|  | ||||
| /* 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_DefaultCaptureGeneration; | ||||
|  | ||||
| static void | ||||
| GetMMDeviceInfo(IMMDevice *device, char **utf8dev, WAVEFORMATEXTENSIBLE *fmt, GUID *guid) | ||||
| static void 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 | ||||
|        "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 void | ||||
| SDL_IMMDevice_Remove(const SDL_bool iscapture, LPCWSTR devid, SDL_bool useguid) | ||||
| static void SDL_IMMDevice_Remove(const SDL_bool iscapture, LPCWSTR devid, SDL_bool useguid) | ||||
| { | ||||
|     DevIdList *i; | ||||
|     DevIdList *next; | ||||
| @@ -105,7 +105,7 @@ SDL_IMMDevice_Remove(const SDL_bool iscapture, LPCWSTR devid, SDL_bool useguid) | ||||
|             } else { | ||||
|                 deviceid_list = next; | ||||
|             } | ||||
|             SDL_RemoveAudioDevice(iscapture, useguid ? ((void *) i->guid) : ((void *) i->str)); | ||||
|             SDL_RemoveAudioDevice(iscapture, useguid ? ((void *)i->guid) : ((void *)i->str)); | ||||
|             SDL_free(i->str); | ||||
|             SDL_free(i); | ||||
|         } else { | ||||
| @@ -114,8 +114,7 @@ SDL_IMMDevice_Remove(const SDL_bool iscapture, LPCWSTR devid, SDL_bool useguid) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| SDL_IMMDevice_Add(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENSIBLE *fmt, LPCWSTR devid, GUID *dsoundguid, SDL_bool useguid) | ||||
| static void SDL_IMMDevice_Add(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTENSIBLE *fmt, LPCWSTR devid, GUID *dsoundguid, SDL_bool useguid) | ||||
| { | ||||
|     DevIdList *devidlist; | ||||
|     SDL_AudioSpec spec; | ||||
| @@ -128,22 +127,22 @@ SDL_IMMDevice_Add(const SDL_bool iscapture, const char *devname, WAVEFORMATEXTEN | ||||
|        phones and tablets, where you might have an internal speaker and a headphone jack and expect both to be | ||||
|        available and switch automatically. (!!! FIXME...?) */ | ||||
|  | ||||
|        /* see if we already have this one. */ | ||||
|     /* see if we already have this one. */ | ||||
|     for (devidlist = deviceid_list; devidlist; devidlist = devidlist->next) { | ||||
|         if (SDL_wcscmp(devidlist->str, devid) == 0) { | ||||
|             return;  /* we already have this. */ | ||||
|             return; /* we already have this. */ | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     devidlist = (DevIdList *)SDL_malloc(sizeof(*devidlist)); | ||||
|     if (devidlist == NULL) { | ||||
|         return;  /* oh well. */ | ||||
|         return; /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     devidcopy = SDL_wcsdup(devid); | ||||
|     if (!devidcopy) { | ||||
|         SDL_free(devidlist); | ||||
|         return;  /* oh well. */ | ||||
|         return; /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     if (useguid) { | ||||
| @@ -185,8 +184,7 @@ typedef struct SDLMMNotificationClient | ||||
|     SDL_bool useguid; | ||||
| } SDLMMNotificationClient; | ||||
|  | ||||
| static HRESULT STDMETHODCALLTYPE | ||||
| SDLMMNotificationClient_QueryInterface(IMMNotificationClient *this, REFIID iid, void **ppv) | ||||
| static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_QueryInterface(IMMNotificationClient *this, REFIID iid, void **ppv) | ||||
| { | ||||
|     if ((WIN_IsEqualIID(iid, &IID_IUnknown)) || (WIN_IsEqualIID(iid, &SDL_IID_IMMNotificationClient))) { | ||||
|         *ppv = this; | ||||
| @@ -198,32 +196,29 @@ SDLMMNotificationClient_QueryInterface(IMMNotificationClient *this, REFIID iid, | ||||
|     return E_NOINTERFACE; | ||||
| } | ||||
|  | ||||
| static ULONG STDMETHODCALLTYPE | ||||
| SDLMMNotificationClient_AddRef(IMMNotificationClient *ithis) | ||||
| static ULONG STDMETHODCALLTYPE SDLMMNotificationClient_AddRef(IMMNotificationClient *ithis) | ||||
| { | ||||
|     SDLMMNotificationClient *this = (SDLMMNotificationClient *)ithis; | ||||
|     return (ULONG)(SDL_AtomicIncRef(&this->refcount) + 1); | ||||
| } | ||||
|  | ||||
| static ULONG STDMETHODCALLTYPE | ||||
| SDLMMNotificationClient_Release(IMMNotificationClient *ithis) | ||||
| static ULONG STDMETHODCALLTYPE SDLMMNotificationClient_Release(IMMNotificationClient *ithis) | ||||
| { | ||||
|     /* this is a static object; we don't ever free it. */ | ||||
|     SDLMMNotificationClient *this = (SDLMMNotificationClient *)ithis; | ||||
|     const ULONG retval = SDL_AtomicDecRef(&this->refcount); | ||||
|     if (retval == 0) { | ||||
|         SDL_AtomicSet(&this->refcount, 0);  /* uhh... */ | ||||
|         SDL_AtomicSet(&this->refcount, 0); /* uhh... */ | ||||
|         return 0; | ||||
|     } | ||||
|     return retval - 1; | ||||
| } | ||||
|  | ||||
| /* These are the entry points called when WASAPI device endpoints change. */ | ||||
| static HRESULT STDMETHODCALLTYPE | ||||
| SDLMMNotificationClient_OnDefaultDeviceChanged(IMMNotificationClient *ithis, EDataFlow flow, ERole role, LPCWSTR pwstrDeviceId) | ||||
| static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_OnDefaultDeviceChanged(IMMNotificationClient *ithis, EDataFlow flow, ERole role, LPCWSTR pwstrDeviceId) | ||||
| { | ||||
|     if (role != SDL_IMMDevice_role) { | ||||
|         return S_OK;  /* ignore it. */ | ||||
|         return S_OK; /* ignore it. */ | ||||
|     } | ||||
|  | ||||
|     /* Increment the "generation," so opened devices will pick this up in their threads. */ | ||||
| @@ -249,8 +244,7 @@ SDLMMNotificationClient_OnDefaultDeviceChanged(IMMNotificationClient *ithis, EDa | ||||
|     return S_OK; | ||||
| } | ||||
|  | ||||
| static HRESULT STDMETHODCALLTYPE | ||||
| SDLMMNotificationClient_OnDeviceAdded(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId) | ||||
| static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_OnDeviceAdded(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId) | ||||
| { | ||||
|     /* 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 | ||||
| @@ -260,15 +254,13 @@ SDLMMNotificationClient_OnDeviceAdded(IMMNotificationClient *ithis, LPCWSTR pwst | ||||
|     return S_OK; | ||||
| } | ||||
|  | ||||
| static HRESULT STDMETHODCALLTYPE | ||||
| SDLMMNotificationClient_OnDeviceRemoved(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId) | ||||
| static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_OnDeviceRemoved(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId) | ||||
| { | ||||
|     /* See notes in OnDeviceAdded handler about why we ignore this. */ | ||||
|     return S_OK; | ||||
| } | ||||
|  | ||||
| static HRESULT STDMETHODCALLTYPE | ||||
| SDLMMNotificationClient_OnDeviceStateChanged(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId, DWORD dwNewState) | ||||
| static HRESULT STDMETHODCALLTYPE SDLMMNotificationClient_OnDeviceStateChanged(IMMNotificationClient *ithis, LPCWSTR pwstrDeviceId, DWORD dwNewState) | ||||
| { | ||||
|     IMMDevice *device = NULL; | ||||
|  | ||||
| @@ -278,7 +270,7 @@ SDLMMNotificationClient_OnDeviceStateChanged(IMMNotificationClient *ithis, LPCWS | ||||
|             EDataFlow flow; | ||||
|             if (SUCCEEDED(IMMEndpoint_GetDataFlow(endpoint, &flow))) { | ||||
|                 const SDL_bool iscapture = (flow == eCapture); | ||||
|                 const SDLMMNotificationClient *client = (SDLMMNotificationClient*) ithis; | ||||
|                 const SDLMMNotificationClient *client = (SDLMMNotificationClient *)ithis; | ||||
|                 if (dwNewState == DEVICE_STATE_ACTIVE) { | ||||
|                     char *utf8dev; | ||||
|                     WAVEFORMATEXTENSIBLE fmt; | ||||
| @@ -300,10 +292,9 @@ SDLMMNotificationClient_OnDeviceStateChanged(IMMNotificationClient *ithis, LPCWS | ||||
|     return S_OK; | ||||
| } | ||||
|  | ||||
| static HRESULT STDMETHODCALLTYPE | ||||
| SDLMMNotificationClient_OnPropertyValueChanged(IMMNotificationClient *this, LPCWSTR pwstrDeviceId, const PROPERTYKEY key) | ||||
| static HRESULT STDMETHODCALLTYPE 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. */ | ||||
| } | ||||
|  | ||||
| static const IMMNotificationClientVtbl notification_client_vtbl = { | ||||
| @@ -319,8 +310,7 @@ static const IMMNotificationClientVtbl notification_client_vtbl = { | ||||
|  | ||||
| static SDLMMNotificationClient notification_client = { ¬ification_client_vtbl, { 1 } }; | ||||
|  | ||||
| int | ||||
| SDL_IMMDevice_Init(void) | ||||
| int SDL_IMMDevice_Init(void) | ||||
| { | ||||
|     HRESULT ret; | ||||
|  | ||||
| @@ -344,8 +334,7 @@ SDL_IMMDevice_Init(void) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IMMDevice_Quit(void) | ||||
| void SDL_IMMDevice_Quit(void) | ||||
| { | ||||
|     DevIdList *devidlist; | ||||
|     DevIdList *next; | ||||
| @@ -366,8 +355,7 @@ SDL_IMMDevice_Quit(void) | ||||
|     deviceid_list = NULL; | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_IMMDevice_Get(LPCWSTR devid, IMMDevice **device, SDL_bool iscapture) | ||||
| int SDL_IMMDevice_Get(LPCWSTR devid, IMMDevice **device, SDL_bool iscapture) | ||||
| { | ||||
|     HRESULT ret; | ||||
|  | ||||
| @@ -422,8 +410,7 @@ static int SDLCALL sort_endpoints(const void *_a, const void *_b) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| EnumerateEndpointsForFlow(const SDL_bool iscapture) | ||||
| static void EnumerateEndpointsForFlow(const SDL_bool iscapture) | ||||
| { | ||||
|     IMMDeviceCollection *collection = NULL; | ||||
|     EndpointItem *items; | ||||
| @@ -443,7 +430,7 @@ EnumerateEndpointsForFlow(const SDL_bool iscapture) | ||||
|  | ||||
|     items = (EndpointItem *)SDL_calloc(total, sizeof(EndpointItem)); | ||||
|     if (items == NULL) { | ||||
|         return;  /* oh well. */ | ||||
|         return; /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     for (i = 0; i < total; i++) { | ||||
| @@ -474,20 +461,18 @@ EnumerateEndpointsForFlow(const SDL_bool iscapture) | ||||
|     IMMDeviceCollection_Release(collection); | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_IMMDevice_EnumerateEndpoints(SDL_bool useguid) | ||||
| void SDL_IMMDevice_EnumerateEndpoints(SDL_bool useguid) | ||||
| { | ||||
|     notification_client.useguid = useguid; | ||||
|  | ||||
|     EnumerateEndpointsForFlow(SDL_FALSE);  /* playback */ | ||||
|     EnumerateEndpointsForFlow(SDL_FALSE); /* playback */ | ||||
|     EnumerateEndpointsForFlow(SDL_TRUE);  /* capture */ | ||||
|  | ||||
|     /* if this fails, we just won't get hotplug events. Carry on anyhow. */ | ||||
|     IMMDeviceEnumerator_RegisterEndpointNotificationCallback(enumerator, (IMMNotificationClient *)¬ification_client); | ||||
| } | ||||
|  | ||||
| int | ||||
| SDL_IMMDevice_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| int SDL_IMMDevice_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) | ||||
| { | ||||
|     WAVEFORMATEXTENSIBLE fmt; | ||||
|     IMMDevice *device = NULL; | ||||
| @@ -516,7 +501,7 @@ SDL_IMMDevice_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscaptur | ||||
|     SDL_zerop(spec); | ||||
|     spec->channels = (Uint8)fmt.Format.nChannels; | ||||
|     spec->freq = fmt.Format.nSamplesPerSec; | ||||
|     spec->format = WaveFormatToSDLFormat((WAVEFORMATEX *) &fmt); | ||||
|     spec->format = WaveFormatToSDLFormat((WAVEFORMATEX *)&fmt); | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -26,40 +26,39 @@ | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_system.h" | ||||
|  | ||||
| #include <objbase.h>    /* for CoInitialize/CoUninitialize (Win32 only) */ | ||||
| #include <objbase.h> /* for CoInitialize/CoUninitialize (Win32 only) */ | ||||
| #if defined(HAVE_ROAPI_H) | ||||
| #include <roapi.h>      /* For RoInitialize/RoUninitialize (Win32 only) */ | ||||
| #include <roapi.h> /* For RoInitialize/RoUninitialize (Win32 only) */ | ||||
| #else | ||||
| typedef enum RO_INIT_TYPE { | ||||
|   RO_INIT_SINGLETHREADED = 0, | ||||
|   RO_INIT_MULTITHREADED  = 1 | ||||
| typedef enum RO_INIT_TYPE | ||||
| { | ||||
|     RO_INIT_SINGLETHREADED = 0, | ||||
|     RO_INIT_MULTITHREADED = 1 | ||||
| } RO_INIT_TYPE; | ||||
| #endif | ||||
|  | ||||
| #ifndef _WIN32_WINNT_VISTA | ||||
| #define _WIN32_WINNT_VISTA  0x0600 | ||||
| #define _WIN32_WINNT_VISTA 0x0600 | ||||
| #endif | ||||
| #ifndef _WIN32_WINNT_WIN7 | ||||
| #define _WIN32_WINNT_WIN7   0x0601 | ||||
| #define _WIN32_WINNT_WIN7 0x0601 | ||||
| #endif | ||||
| #ifndef _WIN32_WINNT_WIN8 | ||||
| #define _WIN32_WINNT_WIN8   0x0602 | ||||
| #define _WIN32_WINNT_WIN8 0x0602 | ||||
| #endif | ||||
|  | ||||
| #ifndef LOAD_LIBRARY_SEARCH_SYSTEM32 | ||||
| #define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* Sets an error message based on an HRESULT */ | ||||
| int | ||||
| WIN_SetErrorFromHRESULT(const char *prefix, HRESULT hr) | ||||
| int WIN_SetErrorFromHRESULT(const char *prefix, HRESULT hr) | ||||
| { | ||||
|     TCHAR buffer[1024]; | ||||
|     char *message; | ||||
|     TCHAR *p = buffer; | ||||
|     DWORD c = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, 0, | ||||
|                   buffer, SDL_arraysize(buffer), NULL); | ||||
|                             buffer, SDL_arraysize(buffer), NULL); | ||||
|     buffer[c] = 0; | ||||
|     /* kill CR/LF that FormatMessage() sticks at the end */ | ||||
|     while (*p) { | ||||
| @@ -76,8 +75,7 @@ WIN_SetErrorFromHRESULT(const char *prefix, HRESULT hr) | ||||
| } | ||||
|  | ||||
| /* Sets an error message based on GetLastError() */ | ||||
| int | ||||
| WIN_SetError(const char *prefix) | ||||
| int WIN_SetError(const char *prefix) | ||||
| { | ||||
|     return WIN_SetErrorFromHRESULT(prefix, GetLastError()); | ||||
| } | ||||
| @@ -116,8 +114,7 @@ WIN_CoInitialize(void) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| void | ||||
| WIN_CoUninitialize(void) | ||||
| void WIN_CoUninitialize(void) | ||||
| { | ||||
| #ifndef __WINRT__ | ||||
|     CoUninitialize(); | ||||
| @@ -132,8 +129,8 @@ WIN_LoadComBaseFunction(const char *name) | ||||
|     static HMODULE s_hComBase; | ||||
|  | ||||
|     if (!s_bLoaded) { | ||||
|        s_hComBase = LoadLibraryEx(TEXT("combase.dll"), NULL, LOAD_LIBRARY_SEARCH_SYSTEM32); | ||||
|        s_bLoaded = SDL_TRUE; | ||||
|         s_hComBase = LoadLibraryEx(TEXT("combase.dll"), NULL, LOAD_LIBRARY_SEARCH_SYSTEM32); | ||||
|         s_bLoaded = SDL_TRUE; | ||||
|     } | ||||
|     if (s_hComBase) { | ||||
|         return GetProcAddress(s_hComBase, name); | ||||
| @@ -149,7 +146,7 @@ WIN_RoInitialize(void) | ||||
| #ifdef __WINRT__ | ||||
|     return S_OK; | ||||
| #else | ||||
|     typedef HRESULT (WINAPI *RoInitialize_t)(RO_INIT_TYPE initType); | ||||
|     typedef HRESULT(WINAPI * RoInitialize_t)(RO_INIT_TYPE initType); | ||||
|     RoInitialize_t RoInitializeFunc = (RoInitialize_t)WIN_LoadComBaseFunction("RoInitialize"); | ||||
|     if (RoInitializeFunc) { | ||||
|         /* RO_INIT_SINGLETHREADED is equivalent to COINIT_APARTMENTTHREADED */ | ||||
| @@ -171,11 +168,10 @@ WIN_RoInitialize(void) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| void | ||||
| WIN_RoUninitialize(void) | ||||
| void WIN_RoUninitialize(void) | ||||
| { | ||||
| #ifndef __WINRT__ | ||||
|     typedef void (WINAPI *RoUninitialize_t)(void); | ||||
|     typedef void(WINAPI * RoUninitialize_t)(void); | ||||
|     RoUninitialize_t RoUninitializeFunc = (RoUninitialize_t)WIN_LoadComBaseFunction("RoUninitialize"); | ||||
|     if (RoUninitializeFunc) { | ||||
|         RoUninitializeFunc(); | ||||
| @@ -184,16 +180,15 @@ WIN_RoUninitialize(void) | ||||
| } | ||||
|  | ||||
| #if !defined(__WINRT__) && !defined(__XBOXONE__) && !defined(__XBOXSERIES__) | ||||
| static BOOL | ||||
| IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor) | ||||
| static BOOL IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor) | ||||
| { | ||||
|     OSVERSIONINFOEXW osvi; | ||||
|     DWORDLONG const dwlConditionMask = VerSetConditionMask( | ||||
|         VerSetConditionMask( | ||||
|         VerSetConditionMask( | ||||
|         0, VER_MAJORVERSION, VER_GREATER_EQUAL ), | ||||
|         VER_MINORVERSION, VER_GREATER_EQUAL ), | ||||
|         VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL ); | ||||
|             VerSetConditionMask( | ||||
|                 0, VER_MAJORVERSION, VER_GREATER_EQUAL), | ||||
|             VER_MINORVERSION, VER_GREATER_EQUAL), | ||||
|         VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); | ||||
|  | ||||
|     SDL_zero(osvi); | ||||
|     osvi.dwOSVersionInfoSize = sizeof(osvi); | ||||
| @@ -257,7 +252,7 @@ char * | ||||
| WIN_LookupAudioDeviceName(const WCHAR *name, const GUID *guid) | ||||
| { | ||||
| #if defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__) | ||||
|     return WIN_StringToUTF8(name);  /* No registry access on WinRT/UWP and Xbox, go with what we've got. */ | ||||
|     return WIN_StringToUTF8(name); /* No registry access on WinRT/UWP and Xbox, go with what we've got. */ | ||||
| #else | ||||
|     static const GUID nullguid = { 0 }; | ||||
|     const unsigned char *ptr; | ||||
| @@ -269,42 +264,42 @@ WIN_LookupAudioDeviceName(const WCHAR *name, const GUID *guid) | ||||
|     char *retval = NULL; | ||||
|  | ||||
|     if (WIN_IsEqualGUID(guid, &nullguid)) { | ||||
|         return WIN_StringToUTF8(name);  /* No GUID, go with what we've got. */ | ||||
|         return WIN_StringToUTF8(name); /* No GUID, go with what we've got. */ | ||||
|     } | ||||
|  | ||||
|     ptr = (const unsigned char *) guid; | ||||
|     SDL_snprintf(keystr, sizeof (keystr), | ||||
|         "System\\CurrentControlSet\\Control\\MediaCategories\\{%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X}", | ||||
|         ptr[3], ptr[2], ptr[1], ptr[0], ptr[5], ptr[4], ptr[7], ptr[6], | ||||
|         ptr[8], ptr[9], ptr[10], ptr[11], ptr[12], ptr[13], ptr[14], ptr[15]); | ||||
|     ptr = (const unsigned char *)guid; | ||||
|     SDL_snprintf(keystr, sizeof(keystr), | ||||
|                  "System\\CurrentControlSet\\Control\\MediaCategories\\{%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X}", | ||||
|                  ptr[3], ptr[2], ptr[1], ptr[0], ptr[5], ptr[4], ptr[7], ptr[6], | ||||
|                  ptr[8], ptr[9], ptr[10], ptr[11], ptr[12], ptr[13], ptr[14], ptr[15]); | ||||
|  | ||||
|     strw = WIN_UTF8ToString(keystr); | ||||
|     rc = (RegOpenKeyExW(HKEY_LOCAL_MACHINE, strw, 0, KEY_QUERY_VALUE, &hkey) == ERROR_SUCCESS); | ||||
|     SDL_free(strw); | ||||
|     if (!rc) { | ||||
|         return WIN_StringToUTF8(name);  /* oh well. */ | ||||
|         return WIN_StringToUTF8(name); /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     rc = (RegQueryValueExW(hkey, L"Name", NULL, NULL, NULL, &len) == ERROR_SUCCESS); | ||||
|     if (!rc) { | ||||
|         RegCloseKey(hkey); | ||||
|         return WIN_StringToUTF8(name);  /* oh well. */ | ||||
|         return WIN_StringToUTF8(name); /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     strw = (WCHAR *) SDL_malloc(len + sizeof (WCHAR)); | ||||
|     strw = (WCHAR *)SDL_malloc(len + sizeof(WCHAR)); | ||||
|     if (strw == NULL) { | ||||
|         RegCloseKey(hkey); | ||||
|         return WIN_StringToUTF8(name);  /* oh well. */ | ||||
|         return WIN_StringToUTF8(name); /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     rc = (RegQueryValueExW(hkey, L"Name", NULL, NULL, (LPBYTE) strw, &len) == ERROR_SUCCESS); | ||||
|     rc = (RegQueryValueExW(hkey, L"Name", NULL, NULL, (LPBYTE)strw, &len) == ERROR_SUCCESS); | ||||
|     RegCloseKey(hkey); | ||||
|     if (!rc) { | ||||
|         SDL_free(strw); | ||||
|         return WIN_StringToUTF8(name);  /* oh well. */ | ||||
|         return WIN_StringToUTF8(name); /* oh well. */ | ||||
|     } | ||||
|  | ||||
|     strw[len / 2] = 0;  /* make sure it's null-terminated. */ | ||||
|     strw[len / 2] = 0; /* make sure it's null-terminated. */ | ||||
|  | ||||
|     retval = WIN_StringToUTF8(strw); | ||||
|     SDL_free(strw); | ||||
| @@ -312,20 +307,17 @@ WIN_LookupAudioDeviceName(const WCHAR *name, const GUID *guid) | ||||
| #endif /* if __WINRT__ / else */ | ||||
| } | ||||
|  | ||||
| BOOL | ||||
| WIN_IsEqualGUID(const GUID * a, const GUID * b) | ||||
| BOOL WIN_IsEqualGUID(const GUID *a, const GUID *b) | ||||
| { | ||||
|     return SDL_memcmp(a, b, sizeof(*a)) == 0; | ||||
| } | ||||
|  | ||||
| BOOL | ||||
| WIN_IsEqualIID(REFIID a, REFIID b) | ||||
| BOOL WIN_IsEqualIID(REFIID a, REFIID b) | ||||
| { | ||||
|     return SDL_memcmp(a, b, sizeof(*a)) == 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| WIN_RECTToRect(const RECT *winrect, SDL_Rect *sdlrect) | ||||
| void WIN_RECTToRect(const RECT *winrect, SDL_Rect *sdlrect) | ||||
| { | ||||
|     sdlrect->x = winrect->left; | ||||
|     sdlrect->w = (winrect->right - winrect->left) + 1; | ||||
| @@ -333,8 +325,7 @@ WIN_RECTToRect(const RECT *winrect, SDL_Rect *sdlrect) | ||||
|     sdlrect->h = (winrect->bottom - winrect->top) + 1; | ||||
| } | ||||
|  | ||||
| void | ||||
| WIN_RectToRECT(const SDL_Rect *sdlrect, RECT *winrect) | ||||
| void WIN_RectToRECT(const SDL_Rect *sdlrect, RECT *winrect) | ||||
| { | ||||
|     winrect->left = sdlrect->x; | ||||
|     winrect->right = sdlrect->x + sdlrect->w - 1; | ||||
| @@ -344,24 +335,21 @@ WIN_RectToRECT(const SDL_Rect *sdlrect, RECT *winrect) | ||||
|  | ||||
| #endif /* defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__) */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Public APIs | ||||
|  */ | ||||
| #if !defined(SDL_VIDEO_DRIVER_WINDOWS) | ||||
|  | ||||
| #if defined(__WIN32__) || defined(__GDK__) | ||||
| int | ||||
| SDL_RegisterApp(const char *name, Uint32 style, void *hInst) | ||||
| int SDL_RegisterApp(const char *name, Uint32 style, void *hInst) | ||||
| { | ||||
|     (void) name; | ||||
|     (void) style; | ||||
|     (void) hInst; | ||||
|     (void)name; | ||||
|     (void)style; | ||||
|     (void)hInst; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| SDL_UnregisterApp(void) | ||||
| void SDL_UnregisterApp(void) | ||||
| { | ||||
| } | ||||
|  | ||||
| @@ -371,17 +359,16 @@ void SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata) | ||||
| #endif /* __WIN32__ || __GDK__ */ | ||||
|  | ||||
| #if defined(__WIN32__) || defined(__WINGDK__) | ||||
| int | ||||
| SDL_Direct3D9GetAdapterIndex(int displayIndex) | ||||
| int SDL_Direct3D9GetAdapterIndex(int displayIndex) | ||||
| { | ||||
|     (void) displayIndex; | ||||
|     (void)displayIndex; | ||||
|     return 0; /* D3DADAPTER_DEFAULT */ | ||||
| } | ||||
|  | ||||
| SDL_bool | ||||
| SDL_DXGIGetOutputInfo(int displayIndex, int *adapterIndex, int *outputIndex) | ||||
| { | ||||
|     (void) displayIndex; | ||||
|     (void)displayIndex; | ||||
|     if (adapterIndex) { | ||||
|         *adapterIndex = -1; | ||||
|     } | ||||
|   | ||||
| @@ -37,13 +37,13 @@ | ||||
| #undef WINVER | ||||
| #undef _WIN32_WINNT | ||||
| #if defined(SDL_VIDEO_RENDER_D3D12) | ||||
| #define _WIN32_WINNT  0xA00   /* For D3D12, 0xA00 is required */ | ||||
| #define _WIN32_WINNT 0xA00 /* For D3D12, 0xA00 is required */ | ||||
| #elif defined(HAVE_SHELLSCALINGAPI_H) | ||||
| #define _WIN32_WINNT  0x603   /* For DPI support */ | ||||
| #define _WIN32_WINNT 0x603 /* For DPI support */ | ||||
| #else | ||||
| #define _WIN32_WINNT  0x501   /* Need 0x410 for AlphaBlend() and 0x500 for EnumDisplayDevices(), 0x501 for raw input */ | ||||
| #define _WIN32_WINNT 0x501 /* Need 0x410 for AlphaBlend() and 0x500 for EnumDisplayDevices(), 0x501 for raw input */ | ||||
| #endif | ||||
| #define WINVER        _WIN32_WINNT | ||||
| #define WINVER _WIN32_WINNT | ||||
|  | ||||
| #elif defined(__WINGDK__) | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| @@ -57,8 +57,8 @@ | ||||
| #endif | ||||
| #undef WINVER | ||||
| #undef _WIN32_WINNT | ||||
| #define _WIN32_WINNT  0xA00 | ||||
| #define WINVER        _WIN32_WINNT | ||||
| #define _WIN32_WINNT 0xA00 | ||||
| #define WINVER       _WIN32_WINNT | ||||
|  | ||||
| #elif defined(__XBOXONE__) || defined(__XBOXSERIES__) | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| @@ -77,7 +77,7 @@ | ||||
| #endif | ||||
|  | ||||
| #include <windows.h> | ||||
| #include <basetyps.h>   /* for REFIID with broken mingw.org headers */ | ||||
| #include <basetyps.h> /* for REFIID with broken mingw.org headers */ | ||||
|  | ||||
| /* Older Visual C++ headers don't have the Win64-compatible typedefs... */ | ||||
| #if defined(_MSC_VER) && (_MSC_VER <= 1200) | ||||
| @@ -92,21 +92,21 @@ | ||||
| #include "SDL_rect.h" | ||||
|  | ||||
| /* Routines to convert from UTF8 to native Windows text */ | ||||
| #define WIN_StringToUTF8W(S) SDL_iconv_string("UTF-8", "UTF-16LE", (const char *)(S), (SDL_wcslen(S)+1)*sizeof(WCHAR)) | ||||
| #define WIN_UTF8ToStringW(S) (WCHAR *)SDL_iconv_string("UTF-16LE", "UTF-8", (const char *)(S), SDL_strlen(S)+1) | ||||
| #define WIN_StringToUTF8W(S) SDL_iconv_string("UTF-8", "UTF-16LE", (const char *)(S), (SDL_wcslen(S) + 1) * sizeof(WCHAR)) | ||||
| #define WIN_UTF8ToStringW(S) (WCHAR *)SDL_iconv_string("UTF-16LE", "UTF-8", (const char *)(S), SDL_strlen(S) + 1) | ||||
| /* !!! FIXME: UTF8ToString() can just be a SDL_strdup() here. */ | ||||
| #define WIN_StringToUTF8A(S) SDL_iconv_string("UTF-8", "ASCII", (const char *)(S), (SDL_strlen(S)+1)) | ||||
| #define WIN_UTF8ToStringA(S) SDL_iconv_string("ASCII", "UTF-8", (const char *)(S), SDL_strlen(S)+1) | ||||
| #define WIN_StringToUTF8A(S) SDL_iconv_string("UTF-8", "ASCII", (const char *)(S), (SDL_strlen(S) + 1)) | ||||
| #define WIN_UTF8ToStringA(S) SDL_iconv_string("ASCII", "UTF-8", (const char *)(S), SDL_strlen(S) + 1) | ||||
| #if UNICODE | ||||
| #define WIN_StringToUTF8 WIN_StringToUTF8W | ||||
| #define WIN_UTF8ToString WIN_UTF8ToStringW | ||||
| #define SDL_tcslen SDL_wcslen | ||||
| #define SDL_tcsstr SDL_wcsstr | ||||
| #define SDL_tcslen       SDL_wcslen | ||||
| #define SDL_tcsstr       SDL_wcsstr | ||||
| #else | ||||
| #define WIN_StringToUTF8 WIN_StringToUTF8A | ||||
| #define WIN_UTF8ToString WIN_UTF8ToStringA | ||||
| #define SDL_tcslen SDL_strlen | ||||
| #define SDL_tcsstr SDL_strstr | ||||
| #define SDL_tcslen       SDL_strlen | ||||
| #define SDL_tcsstr       SDL_strstr | ||||
| #endif | ||||
|  | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| @@ -146,7 +146,7 @@ extern BOOL WIN_IsWindows8OrGreater(void); | ||||
| extern char *WIN_LookupAudioDeviceName(const WCHAR *name, const GUID *guid); | ||||
|  | ||||
| /* Checks to see if two GUID are the same. */ | ||||
| extern BOOL WIN_IsEqualGUID(const GUID * a, const GUID * b); | ||||
| extern BOOL WIN_IsEqualGUID(const GUID *a, const GUID *b); | ||||
| extern BOOL WIN_IsEqualIID(REFIID a, REFIID b); | ||||
|  | ||||
| /* Convert between SDL_rect and RECT */ | ||||
|   | ||||
| @@ -36,11 +36,9 @@ DWORD SDL_XInputVersion = 0; | ||||
| static HANDLE s_pXInputDLL = 0; | ||||
| static int s_XInputDLLRefCount = 0; | ||||
|  | ||||
|  | ||||
| #if defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__) | ||||
|  | ||||
| int | ||||
| WIN_LoadXInputDLL(void) | ||||
| int WIN_LoadXInputDLL(void) | ||||
| { | ||||
|     /* Getting handles to system dlls (via LoadLibrary and its variants) is not | ||||
|      * supported on WinRT, thus, pointers to XInput's functions can't be | ||||
| @@ -65,22 +63,20 @@ WIN_LoadXInputDLL(void) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| WIN_UnloadXInputDLL(void) | ||||
| void WIN_UnloadXInputDLL(void) | ||||
| { | ||||
| } | ||||
|  | ||||
| #else /* !(defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)) */ | ||||
|  | ||||
| int | ||||
| WIN_LoadXInputDLL(void) | ||||
| int WIN_LoadXInputDLL(void) | ||||
| { | ||||
|     DWORD version = 0; | ||||
|  | ||||
|     if (s_pXInputDLL) { | ||||
|         SDL_assert(s_XInputDLLRefCount > 0); | ||||
|         s_XInputDLLRefCount++; | ||||
|         return 0;  /* already loaded */ | ||||
|         return 0; /* already loaded */ | ||||
|     } | ||||
|  | ||||
|     /* NOTE: Don't load XinputUap.dll | ||||
| @@ -88,10 +84,10 @@ WIN_LoadXInputDLL(void) | ||||
|      * limitations of that API (no devices at startup, no background input, etc.) | ||||
|      */ | ||||
|     version = (1 << 16) | 4; | ||||
|     s_pXInputDLL = LoadLibrary(TEXT("XInput1_4.dll"));  /* 1.4 Ships with Windows 8. */ | ||||
|     s_pXInputDLL = LoadLibrary(TEXT("XInput1_4.dll")); /* 1.4 Ships with Windows 8. */ | ||||
|     if (!s_pXInputDLL) { | ||||
|         version = (1 << 16) | 3; | ||||
|         s_pXInputDLL = LoadLibrary(TEXT("XInput1_3.dll"));  /* 1.3 can be installed as a redistributable component. */ | ||||
|         s_pXInputDLL = LoadLibrary(TEXT("XInput1_3.dll")); /* 1.3 can be installed as a redistributable component. */ | ||||
|     } | ||||
|     if (!s_pXInputDLL) { | ||||
|         s_pXInputDLL = LoadLibrary(TEXT("bin\\XInput1_3.dll")); | ||||
| @@ -115,7 +111,7 @@ WIN_LoadXInputDLL(void) | ||||
|     } | ||||
|     SDL_XInputSetState = (XInputSetState_t)GetProcAddress((HMODULE)s_pXInputDLL, "XInputSetState"); | ||||
|     SDL_XInputGetCapabilities = (XInputGetCapabilities_t)GetProcAddress((HMODULE)s_pXInputDLL, "XInputGetCapabilities"); | ||||
|     SDL_XInputGetBatteryInformation = (XInputGetBatteryInformation_t)GetProcAddress( (HMODULE)s_pXInputDLL, "XInputGetBatteryInformation" ); | ||||
|     SDL_XInputGetBatteryInformation = (XInputGetBatteryInformation_t)GetProcAddress((HMODULE)s_pXInputDLL, "XInputGetBatteryInformation"); | ||||
|     if (SDL_XInputGetState == NULL || SDL_XInputSetState == NULL || SDL_XInputGetCapabilities == NULL) { | ||||
|         WIN_UnloadXInputDLL(); | ||||
|         return -1; | ||||
| @@ -124,8 +120,7 @@ WIN_LoadXInputDLL(void) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| WIN_UnloadXInputDLL(void) | ||||
| void WIN_UnloadXInputDLL(void) | ||||
| { | ||||
|     if (s_pXInputDLL) { | ||||
|         SDL_assert(s_XInputDLLRefCount > 0); | ||||
|   | ||||
| @@ -39,7 +39,7 @@ using namespace XInputOnGameInput; | ||||
| #define XUSER_MAX_COUNT 4 | ||||
| #endif | ||||
| #ifndef XUSER_INDEX_ANY | ||||
| #define XUSER_INDEX_ANY     0x000000FF | ||||
| #define XUSER_INDEX_ANY 0x000000FF | ||||
| #endif | ||||
| #ifndef XINPUT_CAPS_FFB_SUPPORTED | ||||
| #define XINPUT_CAPS_FFB_SUPPORTED 0x0001 | ||||
| @@ -131,29 +131,29 @@ using namespace XInputOnGameInput; | ||||
| #endif | ||||
|  | ||||
| #ifndef BATTERY_DEVTYPE_GAMEPAD | ||||
| #define BATTERY_DEVTYPE_GAMEPAD         0x00 | ||||
| #define BATTERY_DEVTYPE_GAMEPAD 0x00 | ||||
| #endif | ||||
|  | ||||
| #ifndef BATTERY_TYPE_DISCONNECTED | ||||
| #define BATTERY_TYPE_DISCONNECTED       0x00 | ||||
| #define BATTERY_TYPE_DISCONNECTED 0x00 | ||||
| #endif | ||||
| #ifndef BATTERY_TYPE_WIRED | ||||
| #define BATTERY_TYPE_WIRED              0x01 | ||||
| #define BATTERY_TYPE_WIRED 0x01 | ||||
| #endif | ||||
| #ifndef BATTERY_TYPE_UNKNOWN | ||||
| #define BATTERY_TYPE_UNKNOWN            0xFF | ||||
| #define BATTERY_TYPE_UNKNOWN 0xFF | ||||
| #endif | ||||
| #ifndef BATTERY_LEVEL_EMPTY | ||||
| #define BATTERY_LEVEL_EMPTY             0x00 | ||||
| #define BATTERY_LEVEL_EMPTY 0x00 | ||||
| #endif | ||||
| #ifndef BATTERY_LEVEL_LOW | ||||
| #define BATTERY_LEVEL_LOW               0x01 | ||||
| #define BATTERY_LEVEL_LOW 0x01 | ||||
| #endif | ||||
| #ifndef BATTERY_LEVEL_MEDIUM | ||||
| #define BATTERY_LEVEL_MEDIUM            0x02 | ||||
| #define BATTERY_LEVEL_MEDIUM 0x02 | ||||
| #endif | ||||
| #ifndef BATTERY_LEVEL_FULL | ||||
| #define BATTERY_LEVEL_FULL              0x03 | ||||
| #define BATTERY_LEVEL_FULL 0x03 | ||||
| #endif | ||||
|  | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| @@ -222,31 +222,26 @@ typedef struct | ||||
| #endif /* HAVE_XINPUT_H */ | ||||
|  | ||||
| /* Forward decl's for XInput API's we load dynamically and use if available */ | ||||
| typedef DWORD (WINAPI *XInputGetState_t) | ||||
|     ( | ||||
|     DWORD         dwUserIndex,  /* [in] Index of the gamer associated with the device */ | ||||
|     XINPUT_STATE_EX* pState     /* [out] Receives the current state */ | ||||
|     ); | ||||
| typedef DWORD(WINAPI *XInputGetState_t)( | ||||
|     DWORD dwUserIndex,      /* [in] Index of the gamer associated with the device */ | ||||
|     XINPUT_STATE_EX *pState /* [out] Receives the current state */ | ||||
| ); | ||||
|  | ||||
| typedef DWORD (WINAPI *XInputSetState_t) | ||||
|     ( | ||||
|     DWORD             dwUserIndex,  /* [in] Index of the gamer associated with the device */ | ||||
|     XINPUT_VIBRATION* pVibration    /* [in, out] The vibration information to send to the controller */ | ||||
|     ); | ||||
| typedef DWORD(WINAPI *XInputSetState_t)( | ||||
|     DWORD dwUserIndex,           /* [in] Index of the gamer associated with the device */ | ||||
|     XINPUT_VIBRATION *pVibration /* [in, out] The vibration information to send to the controller */ | ||||
| ); | ||||
|  | ||||
| typedef DWORD (WINAPI *XInputGetCapabilities_t) | ||||
|     ( | ||||
|     DWORD                dwUserIndex,   /* [in] Index of the gamer associated with the device */ | ||||
|     DWORD                dwFlags,       /* [in] Input flags that identify the device type */ | ||||
|     XINPUT_CAPABILITIES* pCapabilities  /* [out] Receives the capabilities */ | ||||
|     ); | ||||
| typedef DWORD(WINAPI *XInputGetCapabilities_t)( | ||||
|     DWORD dwUserIndex,                 /* [in] Index of the gamer associated with the device */ | ||||
|     DWORD dwFlags,                     /* [in] Input flags that identify the device type */ | ||||
|     XINPUT_CAPABILITIES *pCapabilities /* [out] Receives the capabilities */ | ||||
| ); | ||||
|  | ||||
| typedef DWORD (WINAPI *XInputGetBatteryInformation_t) | ||||
|     ( | ||||
|     DWORD                         dwUserIndex, | ||||
|     BYTE                          devType, | ||||
|     XINPUT_BATTERY_INFORMATION_EX *pBatteryInformation | ||||
|     ); | ||||
| typedef DWORD(WINAPI *XInputGetBatteryInformation_t)( | ||||
|     DWORD dwUserIndex, | ||||
|     BYTE devType, | ||||
|     XINPUT_BATTERY_INFORMATION_EX *pBatteryInformation); | ||||
|  | ||||
| extern int WIN_LoadXInputDLL(void); | ||||
| extern void WIN_UnloadXInputDLL(void); | ||||
| @@ -255,17 +250,17 @@ extern XInputGetState_t SDL_XInputGetState; | ||||
| extern XInputSetState_t SDL_XInputSetState; | ||||
| extern XInputGetCapabilities_t SDL_XInputGetCapabilities; | ||||
| extern XInputGetBatteryInformation_t SDL_XInputGetBatteryInformation; | ||||
| extern DWORD SDL_XInputVersion;  /* ((major << 16) & 0xFF00) | (minor & 0xFF) */ | ||||
| extern DWORD SDL_XInputVersion; /* ((major << 16) & 0xFF00) | (minor & 0xFF) */ | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #define XINPUTGETSTATE          SDL_XInputGetState | ||||
| #define XINPUTSETSTATE          SDL_XInputSetState | ||||
| #define XINPUTGETCAPABILITIES   SDL_XInputGetCapabilities | ||||
| #define XINPUTGETBATTERYINFORMATION   SDL_XInputGetBatteryInformation | ||||
| #define XINPUTGETSTATE              SDL_XInputGetState | ||||
| #define XINPUTSETSTATE              SDL_XInputSetState | ||||
| #define XINPUTGETCAPABILITIES       SDL_XInputGetCapabilities | ||||
| #define XINPUTGETBATTERYINFORMATION SDL_XInputGetBatteryInformation | ||||
|  | ||||
| #endif /* SDL_xinput_h_ */ | ||||
|  | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Sam Lantinga
					Sam Lantinga