Index: source/audiolib/src/driver_sdl.cpp =================================================================== --- source/audiolib/src/driver_sdl.cpp (revision 6068) +++ source/audiolib/src/driver_sdl.cpp (working copy) @@ -46,7 +46,7 @@ static int32_t ErrorCode = SDLErr_Ok; static int32_t Initialised = 0; static int32_t Playing = 0; -// static int32_t StartedSDL = -1; +static int32_t StartedSDL = -1; static char *MixBuffer = 0; static int32_t MixBufferSize = 0; @@ -145,6 +145,7 @@ int32_t SDLDrv_PCM_Init(int32_t *mixrate, int32_t *numchannels, void * initdata) { + uint32_t inited; int32_t err = 0; int32_t chunksize; uint16_t fmt; @@ -156,6 +157,22 @@ SDLDrv_PCM_Shutdown(); } + inited = SDL_WasInit(SDL_INIT_EVERYTHING); + + if (inited == 0) { + // nothing was initialised + err = SDL_Init(SDL_INIT_AUDIO); + StartedSDL = 0; + } else if (!(inited & SDL_INIT_AUDIO)) { + err = SDL_InitSubSystem(SDL_INIT_AUDIO); + StartedSDL = 1; + } + + if (err < 0) { + ErrorCode = SDLErr_InitSubSystem; + return SDLErr_Error; + } + chunksize = 512; #ifdef __ANDROID__ chunksize = droidinfo.audio_buffer_size; @@ -222,6 +239,13 @@ SDL_DestroyMutex(EffectFence); + if (StartedSDL > 0) { + SDL_QuitSubSystem(SDL_INIT_AUDIO); + } else if (StartedSDL == 0) { + SDL_Quit(); + } + + StartedSDL = -1; Initialised = 0; }