From 58727a3bba05b00971eb672e1551043d637b48ba Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 15 Aug 2018 02:02:33 -0400 Subject: [PATCH] SDL mixer: Fix no looping bug when changing song position # Conflicts: # src/sdl12/mixer_sound.c --- src/sdl/mixer_sound.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c index 573634fd9..a82187b26 100644 --- a/src/sdl/mixer_sound.c +++ b/src/sdl/mixer_sound.c @@ -793,9 +793,15 @@ boolean I_SetSongPosition(UINT32 position) { if(midimode || !music) return false; - Mix_PlayMusic(music, 0); - Mix_SetMusicPosition((float)(position/1000.0L)); - music_bytes = position/1000.0L*44100.0L*4; //assume 44.1khz, 4-byte length (see I_GetSongPositon) + Mix_RewindMusic(); // needed for mp3 + if(Mix_SetMusicPosition((float)(position/1000.0L)) == 0) + music_bytes = position/1000.0L*44100.0L*4; //assume 44.1khz, 4-byte length (see I_GetSongPositon) + else + // NOTE: This block fires on incorrect song format, + // NOT if position input is greater than song length. + // This means music_bytes will be inaccurate because we can't compare to + // max song length. So, don't write your scripts to seek beyond the song. + music_bytes = 0; return true; }