From e3821f686a58838819ffe994bd0e239bdb240150 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 14 Dec 2003 06:28:07 +0000 Subject: [PATCH] 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. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40756 --- src/audio/mme/SDL_mmeaudio.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/audio/mme/SDL_mmeaudio.c b/src/audio/mme/SDL_mmeaudio.c index 5ea8a6931..daefaedfe 100644 --- a/src/audio/mme/SDL_mmeaudio.c +++ b/src/audio/mme/SDL_mmeaudio.c @@ -191,17 +191,16 @@ static int MME_OpenAudio(_THIS, SDL_AudioSpec *spec) 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 @@ static void MME_WaitDone(_THIS) 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 @@ static void MME_CloseAudio(_THIS) result = waveOutClose(shm->sound); if (result != MMSYSERR_NOERROR ) SetMMerror("waveOutClose()", result); + mmeProcessCallbacks(); } result = mmeFreeMem(shm); if (result != MMSYSERR_NOERROR )