summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cdplayer.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/cdplayer.c b/src/cdplayer.c
index 953e988..53fcb7c 100644
--- a/src/cdplayer.c
+++ b/src/cdplayer.c
@@ -108,8 +108,25 @@ void CDDA_Play(int CDDATrack)
if (cdrom == NULL)
return;
- if (CD_INDRIVE(SDL_CDStatus(cdrom)))
- SDL_CDPlayTracks(cdrom, CDDATrack-1, 0, 1, 0);
+ if (CD_INDRIVE(SDL_CDStatus(cdrom))) {
+ int track = CDDATrack - 1;
+ int i;
+
+ if (cdrom->numtracks == 0)
+ return;
+
+ track %= cdrom->numtracks;
+
+ for (i = 0; i < cdrom->numtracks; i++) {
+ if (cdrom->track[track].type == SDL_AUDIO_TRACK) {
+ SDL_CDPlayTracks(cdrom, track, 0, 1, 0);
+ return;
+ }
+
+ track++;
+ track %= cdrom->numtracks;
+ }
+ }
}
void CDDA_PlayLoop(int CDDATrack)