Use the SDL2 audio device interface instead of the legacy 1.2 API.

This is a little bit of future-proofing, but also gives us a little more
flexibility in general; now we can add in the cvars to open a specific
device, etc, that the OpenAL codepath does.
This commit is contained in:
Ryan C. Gordon 2018-04-13 22:47:29 -04:00
parent 69f92daf08
commit 78c70d0afc
1 changed files with 16 additions and 7 deletions

View File

@ -45,6 +45,8 @@ cvar_t *s_sdlMixSamps;
static int dmapos = 0; static int dmapos = 0;
static int dmasize = 0; static int dmasize = 0;
static SDL_AudioDeviceID sdlPlaybackDevice;
#ifdef USE_VOIP #ifdef USE_VOIP
static SDL_AudioDeviceID sdlCaptureDevice; static SDL_AudioDeviceID sdlCaptureDevice;
static cvar_t *s_sdlCapture; static cvar_t *s_sdlCapture;
@ -239,9 +241,10 @@ qboolean SNDDMA_Init(void)
desired.channels = (int) s_sdlChannels->value; desired.channels = (int) s_sdlChannels->value;
desired.callback = SNDDMA_AudioCallback; desired.callback = SNDDMA_AudioCallback;
if (SDL_OpenAudio(&desired, &obtained) == -1) sdlPlaybackDevice = SDL_OpenAudioDevice(NULL, SDL_FALSE, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE);
if (sdlPlaybackDevice == 0)
{ {
Com_Printf("SDL_OpenAudio() failed: %s\n", SDL_GetError()); Com_Printf("SDL_OpenAudioDevice() failed: %s\n", SDL_GetError());
SDL_QuitSubSystem(SDL_INIT_AUDIO); SDL_QuitSubSystem(SDL_INIT_AUDIO);
return qfalse; return qfalse;
} }
@ -309,7 +312,7 @@ qboolean SNDDMA_Init(void)
sdlMasterGain = 1.0f; sdlMasterGain = 1.0f;
Com_Printf("Starting SDL audio callback...\n"); Com_Printf("Starting SDL audio callback...\n");
SDL_PauseAudio(0); // start callback. SDL_PauseAudioDevice(sdlPlaybackDevice, 0); // start callback.
// don't unpause the capture device; we'll do that in StartCapture. // don't unpause the capture device; we'll do that in StartCapture.
Com_Printf("SDL audio initialized.\n"); Com_Printf("SDL audio initialized.\n");
@ -334,13 +337,19 @@ SNDDMA_Shutdown
*/ */
void SNDDMA_Shutdown(void) void SNDDMA_Shutdown(void)
{ {
Com_Printf("Closing SDL audio device...\n"); if (sdlPlaybackDevice != 0)
SDL_CloseAudio(); {
Com_Printf("Closing SDL audio playback device...\n");
SDL_CloseAudioDevice(sdlPlaybackDevice);
Com_Printf("SDL audio playback device closed.\n");
sdlPlaybackDevice = 0;
}
if (sdlCaptureDevice) if (sdlCaptureDevice)
{ {
Com_Printf("Closing SDL audio capture device...\n"); Com_Printf("Closing SDL audio capture device...\n");
SDL_CloseAudioDevice(sdlCaptureDevice); SDL_CloseAudioDevice(sdlCaptureDevice);
Com_Printf("SDL audio capture device closed.\n");
sdlCaptureDevice = 0; sdlCaptureDevice = 0;
} }
@ -361,7 +370,7 @@ Send sound to device if buffer isn't really the dma buffer
*/ */
void SNDDMA_Submit(void) void SNDDMA_Submit(void)
{ {
SDL_UnlockAudio(); SDL_UnlockAudioDevice(sdlPlaybackDevice);
} }
/* /*
@ -371,7 +380,7 @@ SNDDMA_BeginPainting
*/ */
void SNDDMA_BeginPainting (void) void SNDDMA_BeginPainting (void)
{ {
SDL_LockAudio(); SDL_LockAudioDevice(sdlPlaybackDevice);
} }