From a6d0abb602985189b304648532053d7e61d54171 Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Fri, 4 Oct 2002 08:48:20 +0000 Subject: Repeat off/all/one toggle. By Hardeep Sidhu. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2498 a1c6a512-1295-4272-9138-f99709370657 --- firmware/mpeg.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'firmware/mpeg.c') diff --git a/firmware/mpeg.c b/firmware/mpeg.c index ae9888869f..05f0a163c8 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c @@ -733,8 +733,11 @@ static void update_playlist(void) { int index; + if (num_tracks_in_memory() > 0) + { index = playlist_next(id3tags[tag_read_idx]->id3.index); id3tags[tag_read_idx]->id3.index = index; + } } static void track_change(void) @@ -878,15 +881,15 @@ static void mpeg_thread(void) case MPEG_NEXT: DEBUGF("MPEG_NEXT\n"); + /* is next track in ram? */ + if ( num_tracks_in_memory() > 1 ) { + int unplayed_space_left, unswapped_space_left; + /* stop the current stream */ play_pending = false; playing = false; stop_dma(); - /* is next track in ram? */ - if ( num_tracks_in_memory() > 1 ) { - int unplayed_space_left, unswapped_space_left; - track_change(); mp3buf_read = id3tags[tag_read_idx]->mempos; init_dma(); @@ -912,6 +915,14 @@ static void mpeg_thread(void) } } else { + if (!playlist_peek(1)) + break; + + /* stop the current stream */ + play_pending = false; + playing = false; + stop_dma(); + reset_mp3_buffer(); remove_all_tags(); @@ -940,6 +951,8 @@ static void mpeg_thread(void) case MPEG_PREV: { int numtracks = num_tracks_in_memory(); DEBUGF("MPEG_PREV\n"); + if (!playlist_peek(-1)) + break; /* stop the current stream */ play_pending = false; playing = false; @@ -1162,7 +1175,7 @@ static void mpeg_thread(void) case MPEG_SWAP_DATA: free_space_left = get_unswapped_space(); - if(free_space_left == 0) + if(free_space_left == 0 && !play_pending) break; amount_to_swap = MIN(MPEG_SWAP_CHUNKSIZE, free_space_left); -- cgit v1.2.3