File: Fix-engine-not-starting-on-Windows-if-linked-against-SDL-.patch

package info (click to toggle)
darkplaces 0~20180908~beta1-6
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 17,424 kB
  • sloc: ansic: 152,917; pascal: 393; makefile: 392; perl: 372; objc: 245; sh: 102
file content (84 lines) | stat: -rw-r--r-- 2,565 bytes parent folder | download | duplicates (2)
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);
 }
 
 /*