Mercurial > sdl-ios-xcode
view test/automated/platform/platform.c @ 5082:de59e0218aa2
Fixed bug #1011
Daniel Ellis 2010-06-25 15:20:31 PDT
SDL based applications sometimes display the wrong application name in the
Sound Preferences dialog when using pulseaudio.
I can see from the code that the SDL pulse module is initiating a new pulse
audio context and passing an application name using the function
get_progname().
The get_progname() function returns the name of the current process. However,
the process name is often not a suitable name to use. For example, the OpenShot
video editor is a python application, and so "python" is displayed in the Sound
Preferences window (see Bug #596504), when it should be displaying "OpenShot".
PulseAudio allows applications to specify the application name, either at the
time the context is created (as SDL does currently), or by special environment
variables (see http://www.pulseaudio.org/wiki/ApplicationProperties). If no
name is specified, then pulseaudio will determine the name based on the
process.
If you specify the application name when initiating the pulseaudio context,
then that will override any application name specified using an environment
variable.
As libsdl is a library, I believe the solution is for libsdl to not specify any
application name when initiating a pulseaudio context, which will enable
applications to specify the application name using environment variables. In
the case that the applications do not specify anything, pulseaudio will fall
back to using the process name anyway.
The attached patch removes the get_progname() function and passes NULL as the
application name when creating the pulseaudio context, which fixes the issue.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 23 Jan 2011 21:55:04 -0800 |
parents | 3427271a2d75 |
children |
line wrap: on
line source
/** * Automated SDL platform test. * * Based off of testplatform.c. * * Written by Edgar Simo "bobbens" * * Released under Public Domain. */ #include "SDL.h" #include "SDL_endian.h" #include "SDL_cpuinfo.h" #include "../SDL_at.h" /* * Prototypes. */ static int plat_testSize( size_t sizeoftype, size_t hardcodetype ); static void plat_testTypes (void); /** * @brief Test size. * * @note Watcom C flags these as Warning 201: "Unreachable code" if you just * compare them directly, so we push it through a function to keep the * compiler quiet. --ryan. */ static int plat_testSize( size_t sizeoftype, size_t hardcodetype ) { return sizeoftype != hardcodetype; } /** * @brief Tests type size. */ static void plat_testTypes (void) { int ret; SDL_ATbegin( "Type size" ); ret = plat_testSize( sizeof(Uint8), 1 ); if (SDL_ATvassert( ret == 0, "sizeof(Uint8) = %lu instead of 1", sizeof(Uint8) )) return; ret = plat_testSize( sizeof(Uint16), 2 ); if (SDL_ATvassert( ret == 0, "sizeof(Uint16) = %lu instead of 2", sizeof(Uint16) )) return; ret = plat_testSize( sizeof(Uint32), 4 ); if (SDL_ATvassert( ret == 0, "sizeof(Uint32) = %lu instead of 4", sizeof(Uint32) )) return; #ifdef SDL_HAS_64BIT_TYPE ret = plat_testSize( sizeof(Uint64), 8 ); if (SDL_ATvassert( ret == 0, "sizeof(Uint64) = %lu instead of 8", sizeof(Uint64) )) return; #endif /* SDL_HAS_64BIT_TYPE */ SDL_ATend(); } /** * @brief Tests platform endianness. */ static void plat_testEndian (void) { Uint16 value = 0x1234; int real_byteorder; Uint16 value16 = 0xCDAB; Uint16 swapped16 = 0xABCD; Uint32 value32 = 0xEFBEADDE; Uint32 swapped32 = 0xDEADBEEF; #ifdef SDL_HAS_64BIT_TYPE Uint64 value64, swapped64; value64 = 0xEFBEADDE; value64 <<= 32; value64 |= 0xCDAB3412; swapped64 = 0x1234ABCD; swapped64 <<= 32; swapped64 |= 0xDEADBEEF; #endif SDL_ATbegin( "Endianness" ); /* Test endianness. */ if ((*((char *) &value) >> 4) == 0x1) { real_byteorder = SDL_BIG_ENDIAN; } else { real_byteorder = SDL_LIL_ENDIAN; } if (SDL_ATvassert( real_byteorder == SDL_BYTEORDER, "Machine detected as %s endian but appears to be %s endian.", (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big", (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big" )) return; /* Test 16 swap. */ if (SDL_ATvassert( SDL_Swap16(value16) == swapped16, "16 bit swapped incorrectly: 0x%X => 0x%X", value16, SDL_Swap16(value16) )) return; /* Test 32 swap. */ if (SDL_ATvassert( SDL_Swap32(value32) == swapped32, "32 bit swapped incorrectly: 0x%X => 0x%X", value32, SDL_Swap32(value32) )) return; #ifdef SDL_HAS_64BIT_TYPE /* Test 64 swap. */ if (SDL_ATvassert( SDL_Swap64(value64) == swapped64, #ifdef _MSC_VER "64 bit swapped incorrectly: 0x%I64X => 0x%I64X", #else "64 bit swapped incorrectly: 0x%llX => 0x%llX", #endif value64, SDL_Swap64(value64) )) return; #endif SDL_ATend(); } /** * @brief Platform test entrypoint. */ #ifdef TEST_STANDALONE int main( int argc, const char *argv[] ) { (void) argc; (void) argv; #else /* TEST_STANDALONE */ int test_platform (void) { #endif /* TEST_STANDALONE */ SDL_ATinit( "Platform" ); /* Debug information. */ SDL_ATprintVerbose( 1, "%s System detected\n", SDL_GetPlatform() ); SDL_ATprintVerbose( 1, "System is %s endian\n", #ifdef SDL_LIL_ENDIAN "little" #else "big" #endif ); SDL_ATprintVerbose( 1, "CPU count: %d\n", SDL_GetCPUCount()); SDL_ATprintVerbose( 1, "Available extensions:\n" ); SDL_ATprintVerbose( 1, " RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected" ); SDL_ATprintVerbose( 1, " MMX %s\n", SDL_HasMMX()? "detected" : "not detected" ); SDL_ATprintVerbose( 1, " MMX Ext %s\n", SDL_HasMMXExt()? "detected" : "not detected" ); SDL_ATprintVerbose( 1, " 3DNow %s\n", SDL_Has3DNow()? "detected" : "not detected" ); SDL_ATprintVerbose( 1, " 3DNow Ext %s\n", SDL_Has3DNowExt()? "detected" : "not detected" ); SDL_ATprintVerbose( 1, " SSE %s\n", SDL_HasSSE()? "detected" : "not detected" ); SDL_ATprintVerbose( 1, " SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected" ); SDL_ATprintVerbose( 1, " AltiVec %s\n", SDL_HasAltiVec()? "detected" : "not detected" ); plat_testTypes(); plat_testEndian(); return SDL_ATfinish(); }