[Scummvm-cvs-logs] CVS: scummvm/backends/sdl sdl.cpp,1.83,1.84

Torbjörn Andersson eriktorbjorn at users.sourceforge.net
Tue Jun 7 07:43:54 CEST 2005


Update of /cvsroot/scummvm/scummvm/backends/sdl
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8669

Modified Files:
	sdl.cpp 
Log Message:
Be less prone to crash on really, really stupid output sample rates.

Added warning message if SDL_OpenAudio() fails. Might help diagnosing bug
reports like #1206314.


Index: sdl.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/sdl/sdl.cpp,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -d -r1.83 -r1.84
--- sdl.cpp	19 Apr 2005 20:22:50 -0000	1.83
+++ sdl.cpp	7 Jun 2005 14:43:12 -0000	1.84
@@ -278,19 +278,22 @@
 
 	memset(&desired, 0, sizeof(desired));
 
+	_samplesPerSec = 0;
+
 	if (ConfMan.hasKey("output_rate"))
 		_samplesPerSec = ConfMan.getInt("output_rate");
-	else
+
+	if (_samplesPerSec <= 0)
 		_samplesPerSec = SAMPLES_PER_SEC;
 
 	// Originally, we always used 2048 samples. This loop will produce the
 	// same result at 22050 Hz, and should hopefully produce something
 	// sensible for other frequencies. Note that it must be a power of two.
 
-	uint16 samples = 0x8000;
+	uint32 samples = 0x8000;
 
 	for (;;) {
-		if (samples / (_samplesPerSec / 1000) < 100)
+		if ((1000 * samples) / _samplesPerSec < 100)
 			break;
 		samples >>= 1;
 	}
@@ -298,10 +301,11 @@
 	desired.freq = _samplesPerSec;
 	desired.format = AUDIO_S16SYS;
 	desired.channels = 2;
-	desired.samples = samples;
+	desired.samples = (uint16)samples;
 	desired.callback = proc;
 	desired.userdata = param;
 	if (SDL_OpenAudio(&desired, &obtained) != 0) {
+		warning("Could not open audio device: %s", SDL_GetError());
 		return false;
 	}
 	// Note: This should be the obtained output rate, but it seems that at





More information about the Scummvm-git-logs mailing list