diff --git a/src/decoder/sidplay_plugin.cxx b/src/decoder/sidplay_plugin.cxx index f88e5b582..b200eee3b 100644 --- a/src/decoder/sidplay_plugin.cxx +++ b/src/decoder/sidplay_plugin.cxx @@ -283,8 +283,10 @@ sidplay_file_decode(struct decoder *decoder, const char *path_fs) /* .. and play */ - float data_time=0; - int timebase=player.timebase(); + unsigned data_time = 0; + const unsigned timebase = player.timebase(); + song_len *= timebase; + enum decoder_command cmd; do { char buffer[4096]; @@ -295,12 +297,13 @@ sidplay_file_decode(struct decoder *decoder, const char *path_fs) break; cmd = decoder_data(decoder, NULL, buffer, nbytes, - data_time, 0, NULL); - - data_time=player.time()/timebase; + (float)data_time / (float)timebase, + 0, NULL); + data_time = player.time(); if(cmd==DECODE_COMMAND_SEEK) { - int target_time=decoder_seek_where(decoder); + unsigned target_time = (unsigned) + (decoder_seek_where(decoder) * timebase); /* can't rewind so return to zero and seek forward */ if(target_time=(float)song_len) + if (song_len > 0 && data_time >= song_len) break; } while (cmd != DECODE_COMMAND_STOP);