void SDL_QuitSubSystem(Uint32 flags) { /* Shut down requested initialized subsystems */ #if !SDL_JOYSTICK_DISABLED if ((flags & SDL_initialized & SDL_INIT_JOYSTICK)) { SDL_JoystickQuit(); SDL_initialized &= ~SDL_INIT_JOYSTICK; } #endif #if !SDL_HAPTIC_DISABLED if ((flags & SDL_initialized & SDL_INIT_HAPTIC)) { SDL_HapticQuit(); SDL_initialized &= ~SDL_INIT_HAPTIC; } #endif #if !SDL_TIMERS_DISABLED if ((flags & SDL_initialized & SDL_INIT_TIMER)) { SDL_TimerQuit(); SDL_initialized &= ~SDL_INIT_TIMER; } #endif #if !SDL_AUDIO_DISABLED if ((flags & SDL_initialized & SDL_INIT_AUDIO)) { SDL_AudioQuit(); SDL_initialized &= ~SDL_INIT_AUDIO; } #endif #if !SDL_VIDEO_DISABLED if ((flags & SDL_initialized & SDL_INIT_VIDEO)) { SDL_VideoQuit(); SDL_initialized &= ~SDL_INIT_VIDEO; } #endif }
void SDL_QuitSubSystem(Uint32 flags) { /* Shut down requested initialized subsystems */ #ifndef DISABLE_CDROM if ( (flags & SDL_initialized & SDL_INIT_CDROM) ) { SDL_CDROMQuit(); SDL_initialized &= ~SDL_INIT_CDROM; } #endif #ifndef DISABLE_JOYSTICK if ( (flags & SDL_initialized & SDL_INIT_JOYSTICK) ) { SDL_JoystickQuit(); SDL_initialized &= ~SDL_INIT_JOYSTICK; } #endif #ifndef DISABLE_TIMERS if ( (flags & SDL_initialized & SDL_INIT_TIMER) ) { SDL_TimerQuit(); SDL_initialized &= ~SDL_INIT_TIMER; } #endif #ifndef DISABLE_AUDIO if ( (flags & SDL_initialized & SDL_INIT_AUDIO) ) { SDL_AudioQuit(); SDL_initialized &= ~SDL_INIT_AUDIO; } #endif #ifndef DISABLE_VIDEO if ( (flags & SDL_initialized & SDL_INIT_VIDEO) ) { SDL_VideoQuit(); SDL_initialized &= ~SDL_INIT_VIDEO; } #endif }
void audio_Quit() { if (soundenabled) { SDL_CloseAudio(); SDL_AudioQuit(); soundenabled = 0; } }
/** * \brief Start and stop audio directly * * \sa https://wiki.libsdl.org/SDL_InitAudio * \sa https://wiki.libsdl.org/SDL_QuitAudio */ int audio_initQuitAudio() { int result; int i, iMax; const char* audioDriver; /* Stop SDL audio subsystem */ SDL_QuitSubSystem( SDL_INIT_AUDIO ); SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); /* Loop over all available audio drivers */ iMax = SDL_GetNumAudioDrivers(); SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); for (i = 0; i < iMax; i++) { audioDriver = SDL_GetAudioDriver(i); SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL"); SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); /* Call Init */ result = SDL_AudioInit(audioDriver); SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver); SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); /* Call Quit */ SDL_AudioQuit(); SDLTest_AssertPass("Call to SDL_AudioQuit()"); } /* NULL driver specification */ audioDriver = NULL; /* Call Init */ result = SDL_AudioInit(audioDriver); SDLTest_AssertPass("Call to SDL_AudioInit(NULL)"); SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); /* Call Quit */ SDL_AudioQuit(); SDLTest_AssertPass("Call to SDL_AudioQuit()"); /* Restart audio again */ _audioSetUp(NULL); return TEST_COMPLETED; }
void SDL_QuitSubSystem(Uint32 flags) { /* Shut down requested initialized subsystems */ #if !SDL_JOYSTICK_DISABLED if ((flags & SDL_INIT_GAMECONTROLLER)) { // Game controller implies Joystick. flags |= SDL_INIT_JOYSTICK; if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_GAMECONTROLLER)) { SDL_GameControllerQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_GAMECONTROLLER); } if ((flags & SDL_INIT_JOYSTICK)) { if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_JOYSTICK)) { SDL_JoystickQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_JOYSTICK); } #endif #if !SDL_HAPTIC_DISABLED if ((flags & SDL_INIT_HAPTIC)) { if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_HAPTIC)) { SDL_HapticQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_HAPTIC); } #endif #if !SDL_AUDIO_DISABLED if ((flags & SDL_INIT_AUDIO)) { if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_AUDIO)) { SDL_AudioQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_AUDIO); } #endif #if !SDL_VIDEO_DISABLED if ((flags & SDL_INIT_VIDEO)) { if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_VIDEO)) { SDL_VideoQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_VIDEO); } #endif #if !SDL_TIMERS_DISABLED if ((flags & SDL_INIT_TIMER)) { if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_TIMER)) { SDL_TimerQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_TIMER); } #endif }
void close() { //Destroy window SDL_DestroyRenderer( gRenderer ); SDL_DestroyWindow( gWindow ); gWindow = nullptr; gRenderer = nullptr; SDL_AudioQuit(); //Quit SDL subsystems SDL_Quit(); }
void CommonQuit(CommonState * state) { if (state->flags & SDL_INIT_VIDEO) { SDL_VideoQuit(); } if (state->flags & SDL_INIT_AUDIO) { SDL_AudioQuit(); } if (state->windows) { SDL_free(state->windows); } SDL_free(state); }
void SDLTest_CommonQuit(SDLTest_CommonState * state) { int i; SDL_free(state->windows); if (state->renderers) { for (i = 0; i < state->num_windows; ++i) { if (state->renderers[i]) { SDL_DestroyRenderer(state->renderers[i]); } } SDL_free(state->renderers); } if (state->flags & SDL_INIT_VIDEO) { SDL_VideoQuit(); } if (state->flags & SDL_INIT_AUDIO) { SDL_AudioQuit(); } SDL_free(state); }
int audio_Init(void (*samplecallback)(void*, unsigned int), unsigned int buffersize, const char* backend, int s16, char** error) { #ifndef USE_SDL_GRAPHICS if (!sdlvideoinit) { if (SDL_VideoInit(NULL) < 0) { char errormsg[512]; snprintf(errormsg,sizeof(errormsg), "Failed to initialize SDL video: %s", SDL_GetError()); errormsg[sizeof(errormsg)-1] = 0; *error = strdup(errormsg); return 0; } sdlvideoinit = 1; } #endif if (soundenabled) { // quit old sound first SDL_PauseAudio(1); SDL_AudioQuit(); soundenabled = 0; } #ifdef ANDROID if (!s16) { *error = strdup("No 32bit float audio available on Android"); return 0; } #endif if (!samplecallback) { *error = strdup("Need sample callback"); return 0; } char errbuf[512]; char preferredbackend[20] = ""; #ifdef WINDOWS if (backend && strcasecmp(backend, "waveout") == 0) { strcpy(preferredbackend, "waveout"); } if (backend && (strcasecmp(backend, "directsound") == 0 || strcasecmp(backend, "dsound") == 0)) { strcpy(preferredbackend, "directsound"); } #else #ifdef LINUX if (backend && strcasecmp(backend, "alsa") == 0) { strcpy(preferredbackend, "alsa"); } if (backend && (strcasecmp(backend, "oss") == 0 || strcasecmp(backend, "dsp") == 0)) { strcpy(preferredbackend, "dsp"); } #endif #endif const char* b = preferredbackend; if (strlen(b) <= 0) { b = NULL; } if (SDL_AudioInit(b) < 0) { snprintf(errbuf,sizeof(errbuf),"Failed to initialize SDL audio: %s", SDL_GetError()); errbuf[sizeof(errbuf)-1] = 0; *error = strdup(errbuf); return 0; } SDL_AudioSpec fmt,actualfmt; int custombuffersize = DEFAULTSOUNDBUFFERSIZE; if (buffersize > 0) { if (buffersize < MINSOUNDBUFFERSIZE) { buffersize = MINSOUNDBUFFERSIZE; } if (buffersize > MAXSOUNDBUFFERSIZE) { buffersize = MAXSOUNDBUFFERSIZE; } custombuffersize = buffersize; } memset(&fmt,0,sizeof(fmt)); fmt.freq = 48000; if (!s16) { fmt.format = AUDIO_F32SYS; }else{ fmt.format = AUDIO_S16; } fmt.channels = 2; fmt.samples = custombuffersize; fmt.callback = audiocallback; fmt.userdata = NULL; samplecallbackptr = samplecallback; if (SDL_OpenAudio(&fmt, &actualfmt) < 0) { snprintf(errbuf,sizeof(errbuf),"Failed to open SDL audio: %s", SDL_GetError()); errbuf[sizeof(errbuf)-1] = 0; *error = strdup(errbuf); // FIXME: this is a workaround for http:// bugzilla.libsdl.org/show_bug.cgi?id=1343 (will cause a memory leak!) // SDL_AudioQuit(); return 0; } if (actualfmt.channels != 2 || actualfmt.freq != 48000 || (s16 && actualfmt.format != AUDIO_S16) || (!s16 && actualfmt.format != AUDIO_F32SYS)) { *error = strdup("SDL audio delivered wrong/unusable format"); // FIXME: this is a workaround for http:// bugzilla.libsdl.org/show_bug.cgi?id=1343 (will cause a memory leak!) // SDL_AudioQuit(); return 0; } soundenabled = 1; SDL_PauseAudio(0); return 1; }
/** * \brief Pause and unpause audio * * \sa https://wiki.libsdl.org/SDL_PauseAudio */ int audio_pauseUnpauseAudio() { int result; int i, iMax, j, k, l; int totalDelay; int pause_on; int originalCounter; const char* audioDriver; SDL_AudioSpec desired; /* Stop SDL audio subsystem */ SDL_QuitSubSystem( SDL_INIT_AUDIO ); SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); /* Loop over all available audio drivers */ iMax = SDL_GetNumAudioDrivers(); SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); for (i = 0; i < iMax; i++) { audioDriver = SDL_GetAudioDriver(i); SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL"); SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); /* Change specs */ for (j = 0; j < 2; j++) { /* Call Init */ result = SDL_AudioInit(audioDriver); SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver); SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); /* Set spec */ SDL_memset(&desired, 0, sizeof(desired)); switch (j) { case 0: /* Set standard desired spec */ desired.freq = 22050; desired.format = AUDIO_S16SYS; desired.channels = 2; desired.samples = 4096; desired.callback = _audio_testCallback; desired.userdata = NULL; case 1: /* Set custom desired spec */ desired.freq = 48000; desired.format = AUDIO_F32SYS; desired.channels = 2; desired.samples = 2048; desired.callback = _audio_testCallback; desired.userdata = NULL; break; } /* Call Open */ result = SDL_OpenAudio(&desired, NULL); SDLTest_AssertPass("Call to SDL_OpenAudio(desired_spec_%d, NULL)", j); SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0 got: %d", result); /* Start and stop audio multiple times */ for (l=0; l<3; l++) { SDLTest_Log("Pause/Unpause iteration: %d", l+1); /* Reset callback counters */ _audio_testCallbackCounter = 0; _audio_testCallbackLength = 0; /* Un-pause audio to start playing (maybe multiple times) */ pause_on = 0; for (k=0; k <= j; k++) { SDL_PauseAudio(pause_on); SDLTest_AssertPass("Call to SDL_PauseAudio(%d), call %d", pause_on, k+1); } /* Wait for callback */ totalDelay = 0; do { SDL_Delay(10); totalDelay += 10; } while (_audio_testCallbackCounter == 0 && totalDelay < 1000); SDLTest_AssertCheck(_audio_testCallbackCounter > 0, "Verify callback counter; expected: >0 got: %d", _audio_testCallbackCounter); SDLTest_AssertCheck(_audio_testCallbackLength > 0, "Verify callback length; expected: >0 got: %d", _audio_testCallbackLength); /* Pause audio to stop playing (maybe multiple times) */ for (k=0; k <= j; k++) { pause_on = (k==0) ? 1 : SDLTest_RandomIntegerInRange(99, 9999); SDL_PauseAudio(pause_on); SDLTest_AssertPass("Call to SDL_PauseAudio(%d), call %d", pause_on, k+1); } /* Ensure callback is not called again */ originalCounter = _audio_testCallbackCounter; SDL_Delay(totalDelay + 10); SDLTest_AssertCheck(originalCounter == _audio_testCallbackCounter, "Verify callback counter; expected: %d, got: %d", originalCounter, _audio_testCallbackCounter); } /* Call Close */ SDL_CloseAudio(); SDLTest_AssertPass("Call to SDL_CloseAudio()"); /* Call Quit */ SDL_AudioQuit(); SDLTest_AssertPass("Call to SDL_AudioQuit()"); } /* spec loop */ } /* driver loop */ /* Restart audio again */ _audioSetUp(NULL); return TEST_COMPLETED; }
/** * \brief Start, open, close and stop audio * * \sa https://wiki.libsdl.org/SDL_InitAudio * \sa https://wiki.libsdl.org/SDL_OpenAudio * \sa https://wiki.libsdl.org/SDL_CloseAudio * \sa https://wiki.libsdl.org/SDL_QuitAudio */ int audio_initOpenCloseQuitAudio() { int result, expectedResult; int i, iMax, j, k; const char* audioDriver; SDL_AudioSpec desired; /* Stop SDL audio subsystem */ SDL_QuitSubSystem( SDL_INIT_AUDIO ); SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); /* Loop over all available audio drivers */ iMax = SDL_GetNumAudioDrivers(); SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); for (i = 0; i < iMax; i++) { audioDriver = SDL_GetAudioDriver(i); SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL"); SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); /* Change specs */ for (j = 0; j < 2; j++) { /* Call Init */ result = SDL_AudioInit(audioDriver); SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver); SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); /* Set spec */ SDL_memset(&desired, 0, sizeof(desired)); switch (j) { case 0: /* Set standard desired spec */ desired.freq = 22050; desired.format = AUDIO_S16SYS; desired.channels = 2; desired.samples = 4096; desired.callback = _audio_testCallback; desired.userdata = NULL; case 1: /* Set custom desired spec */ desired.freq = 48000; desired.format = AUDIO_F32SYS; desired.channels = 2; desired.samples = 2048; desired.callback = _audio_testCallback; desired.userdata = NULL; break; } /* Call Open (maybe multiple times) */ for (k=0; k <= j; k++) { result = SDL_OpenAudio(&desired, NULL); SDLTest_AssertPass("Call to SDL_OpenAudio(desired_spec_%d, NULL), call %d", j, k+1); expectedResult = (k==0) ? 0 : -1; SDLTest_AssertCheck(result == expectedResult, "Verify return value; expected: %d, got: %d", expectedResult, result); } /* Call Close (maybe multiple times) */ for (k=0; k <= j; k++) { SDL_CloseAudio(); SDLTest_AssertPass("Call to SDL_CloseAudio(), call %d", k+1); } /* Call Quit (maybe multiple times) */ for (k=0; k <= j; k++) { SDL_AudioQuit(); SDLTest_AssertPass("Call to SDL_AudioQuit(), call %d", k+1); } } /* spec loop */ } /* driver loop */ /* Restart audio again */ _audioSetUp(NULL); return TEST_COMPLETED; }
static int lua_SDL_AudioQuit(lutok::state& state){ SDL_AudioQuit(); return 0; }