From 773cdd867e519700c0a67ab58abe441810d891d0 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 16 Aug 2013 15:29:12 -0500 Subject: Fix OpenAL music stop issues using stream stop code S_AL_StopBackgroundTrack would sometimes generate AL errors. S_AL_MusicSourceFree needs to kill source or next track may have short looping buffer. --- src/client/snd_openal.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/client/snd_openal.c b/src/client/snd_openal.c index e26375c2..23a6a67d 100644 --- a/src/client/snd_openal.c +++ b/src/client/snd_openal.c @@ -1895,6 +1895,7 @@ static void S_AL_MusicSourceFree( void ) { // Release the output musicSource S_AL_SrcUnlock(musicSourceHandle); + S_AL_SrcKill(musicSourceHandle); musicSource = 0; musicSourceHandle = -1; } @@ -1927,17 +1928,22 @@ S_AL_StopBackgroundTrack static void S_AL_StopBackgroundTrack( void ) { + int numBuffers; + if(!musicPlaying) return; // Stop playing qalSourceStop(musicSource); - // De-queue the musicBuffers - qalSourceUnqueueBuffers(musicSource, NUM_MUSIC_BUFFERS, musicBuffers); - - // Destroy the musicBuffers - qalDeleteBuffers(NUM_MUSIC_BUFFERS, musicBuffers); + // Un-queue any buffers, and delete them + qalGetSourcei( musicSource, AL_BUFFERS_PROCESSED, &numBuffers ); + while( numBuffers-- ) + { + ALuint buffer; + qalSourceUnqueueBuffers(musicSource, 1, &buffer); + qalDeleteBuffers(1, &buffer); + } // Free the musicSource S_AL_MusicSourceFree(); -- cgit