diff options
author | Björn Stenberg <bjorn@haxx.se> | 2002-10-04 08:48:20 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2002-10-04 08:48:20 +0000 |
commit | a6d0abb602985189b304648532053d7e61d54171 (patch) | |
tree | eb2a935fe1c3e8c0a8cd085544cf997c3ad0ea7d /firmware/mpeg.c | |
parent | a31bae655e92d85708a23b79ba27ace5fc2a185a (diff) | |
download | rockbox-a6d0abb602985189b304648532053d7e61d54171.tar.gz rockbox-a6d0abb602985189b304648532053d7e61d54171.zip |
Repeat off/all/one toggle. By Hardeep Sidhu.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2498 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r-- | firmware/mpeg.c | 23 |
1 files changed, 18 insertions, 5 deletions
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) | |||
733 | { | 733 | { |
734 | int index; | 734 | int index; |
735 | 735 | ||
736 | if (num_tracks_in_memory() > 0) | ||
737 | { | ||
736 | index = playlist_next(id3tags[tag_read_idx]->id3.index); | 738 | index = playlist_next(id3tags[tag_read_idx]->id3.index); |
737 | id3tags[tag_read_idx]->id3.index = index; | 739 | id3tags[tag_read_idx]->id3.index = index; |
740 | } | ||
738 | } | 741 | } |
739 | 742 | ||
740 | static void track_change(void) | 743 | static void track_change(void) |
@@ -878,15 +881,15 @@ static void mpeg_thread(void) | |||
878 | 881 | ||
879 | case MPEG_NEXT: | 882 | case MPEG_NEXT: |
880 | DEBUGF("MPEG_NEXT\n"); | 883 | DEBUGF("MPEG_NEXT\n"); |
884 | /* is next track in ram? */ | ||
885 | if ( num_tracks_in_memory() > 1 ) { | ||
886 | int unplayed_space_left, unswapped_space_left; | ||
887 | |||
881 | /* stop the current stream */ | 888 | /* stop the current stream */ |
882 | play_pending = false; | 889 | play_pending = false; |
883 | playing = false; | 890 | playing = false; |
884 | stop_dma(); | 891 | stop_dma(); |
885 | 892 | ||
886 | /* is next track in ram? */ | ||
887 | if ( num_tracks_in_memory() > 1 ) { | ||
888 | int unplayed_space_left, unswapped_space_left; | ||
889 | |||
890 | track_change(); | 893 | track_change(); |
891 | mp3buf_read = id3tags[tag_read_idx]->mempos; | 894 | mp3buf_read = id3tags[tag_read_idx]->mempos; |
892 | init_dma(); | 895 | init_dma(); |
@@ -912,6 +915,14 @@ static void mpeg_thread(void) | |||
912 | } | 915 | } |
913 | } | 916 | } |
914 | else { | 917 | else { |
918 | if (!playlist_peek(1)) | ||
919 | break; | ||
920 | |||
921 | /* stop the current stream */ | ||
922 | play_pending = false; | ||
923 | playing = false; | ||
924 | stop_dma(); | ||
925 | |||
915 | reset_mp3_buffer(); | 926 | reset_mp3_buffer(); |
916 | remove_all_tags(); | 927 | remove_all_tags(); |
917 | 928 | ||
@@ -940,6 +951,8 @@ static void mpeg_thread(void) | |||
940 | case MPEG_PREV: { | 951 | case MPEG_PREV: { |
941 | int numtracks = num_tracks_in_memory(); | 952 | int numtracks = num_tracks_in_memory(); |
942 | DEBUGF("MPEG_PREV\n"); | 953 | DEBUGF("MPEG_PREV\n"); |
954 | if (!playlist_peek(-1)) | ||
955 | break; | ||
943 | /* stop the current stream */ | 956 | /* stop the current stream */ |
944 | play_pending = false; | 957 | play_pending = false; |
945 | playing = false; | 958 | playing = false; |
@@ -1162,7 +1175,7 @@ static void mpeg_thread(void) | |||
1162 | case MPEG_SWAP_DATA: | 1175 | case MPEG_SWAP_DATA: |
1163 | free_space_left = get_unswapped_space(); | 1176 | free_space_left = get_unswapped_space(); |
1164 | 1177 | ||
1165 | if(free_space_left == 0) | 1178 | if(free_space_left == 0 && !play_pending) |
1166 | break; | 1179 | break; |
1167 | 1180 | ||
1168 | amount_to_swap = MIN(MPEG_SWAP_CHUNKSIZE, free_space_left); | 1181 | amount_to_swap = MIN(MPEG_SWAP_CHUNKSIZE, free_space_left); |