diff src/audio/mme/SDL_mmeaudio.c @ 755:b1595db396a7

Date: Fri, 12 Dec 2003 11:51:21 +0900 From: Hayashi Naoyuki Subject: Tru64 audio(mme) fix ./src/audio/mme/SDL_mmeaudio.c Fix the sound skip problem which is caused even if it recover from high load.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 14 Dec 2003 06:28:07 +0000
parents e92bcf2573cb
children b8d311d90021
line wrap: on
line diff
--- a/src/audio/mme/SDL_mmeaudio.c	Sun Dec 14 06:25:53 2003 +0000
+++ b/src/audio/mme/SDL_mmeaudio.c	Sun Dec 14 06:28:07 2003 +0000
@@ -191,17 +191,16 @@
 
 static void MME_WaitAudio(_THIS)
 {
-    mmeWaitForCallbacks ();
-    mmeProcessCallbacks ();
+    while ( inUse[next_buffer] ) {
+	mmeWaitForCallbacks();
+	mmeProcessCallbacks();
+    }
 }
 
 static Uint8 *MME_GetAudioBuf(_THIS)
 {
     Uint8 *retval;
 
-    while ( inUse[next_buffer] )
-	;
-
     inUse[next_buffer] = TRUE;
     retval = (Uint8 *)(shm->wHdr[next_buffer].lpData);
     return retval;
@@ -220,13 +219,15 @@
     int i;
 
     if ( shm->sound ) {
+	for (i = 0; i < NUM_BUFFERS; i++)
+	    while ( inUse[i] ) {
+		mmeWaitForCallbacks();
+		mmeProcessCallbacks();
+	    }
 	result = waveOutReset(shm->sound);
 	if ( result != MMSYSERR_NOERROR )
 	    SetMMerror("waveOutReset()", result);
-	else {
-	    mmeWaitForCallbacks ();
-	    mmeProcessCallbacks ();
-	}
+	mmeProcessCallbacks();
     }
 }
 
@@ -246,6 +247,7 @@
 	    result = waveOutClose(shm->sound);
 	    if (result != MMSYSERR_NOERROR )
 		SetMMerror("waveOutClose()", result);
+	    mmeProcessCallbacks();
 	}
 	result = mmeFreeMem(shm);
 	if (result != MMSYSERR_NOERROR )