1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
From: divverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Date: Sat, 2 Feb 2019 02:48:15 +0000
Subject: Fix engine not starting on Windows if linked against SDL > 2.0.5
This migrates SDL_OpenAudio -> SDL_OpenAudioDevice et cetera, i.e. with explicit
device handles now.
Changes from DarkplacesRM
Origin: upstream, commit:2075ae43356d724bae305ce8fd36ea570718b14a
---
snd_sdl.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/snd_sdl.c b/snd_sdl.c
index 583ea1f..21341dc 100644
--- a/snd_sdl.c
+++ b/snd_sdl.c
@@ -25,6 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static unsigned int sdlaudiotime = 0;
+static int audio_device = 0;
// Note: SDL calls SDL_LockAudio() right before this function, so no need to lock the audio data here
@@ -124,7 +125,7 @@ qboolean SndSys_Init (const snd_format_t* requested, snd_format_t* suggested)
"\tSamples : %i\n",
wantspec.channels, wantspec.format, wantspec.freq, wantspec.samples);
- if( SDL_OpenAudio( &wantspec, &obtainspec ) )
+ if ((audio_device = SDL_OpenAudioDevice(NULL, 0, &wantspec, &obtainspec, 0)) == 0)
{
Con_Printf( "Failed to open the audio device! (%s)\n", SDL_GetError() );
return false;
@@ -142,7 +143,7 @@ qboolean SndSys_Init (const snd_format_t* requested, snd_format_t* suggested)
wantspec.format != obtainspec.format ||
wantspec.channels != obtainspec.channels)
{
- SDL_CloseAudio();
+ SDL_CloseAudioDevice(audio_device);
// Pass the obtained format as a suggested format
if (suggested != NULL)
@@ -163,7 +164,7 @@ qboolean SndSys_Init (const snd_format_t* requested, snd_format_t* suggested)
Cvar_SetValueQuick (&snd_channellayout, SND_CHANNELLAYOUT_STANDARD);
sdlaudiotime = 0;
- SDL_PauseAudio( false );
+ SDL_PauseAudioDevice(audio_device, 0);
return true;
}
@@ -178,8 +179,10 @@ Stop the sound card, delete "snd_renderbuffer" and free its other resources
*/
void SndSys_Shutdown(void)
{
- SDL_CloseAudio();
-
+ if (audio_device > 0) {
+ SDL_CloseAudioDevice(audio_device);
+ audio_device = 0;
+ }
if (snd_renderbuffer != NULL)
{
Mem_Free(snd_renderbuffer->ring);
@@ -224,7 +227,7 @@ Get the exclusive lock on "snd_renderbuffer"
*/
qboolean SndSys_LockRenderBuffer (void)
{
- SDL_LockAudio();
+ SDL_LockAudioDevice(audio_device);
return true;
}
@@ -238,7 +241,7 @@ Release the exclusive lock on "snd_renderbuffer"
*/
void SndSys_UnlockRenderBuffer (void)
{
- SDL_UnlockAudio();
+ SDL_UnlockAudioDevice(audio_device);
}
/*
|