summaryrefslogtreecommitdiff
path: root/firmware/mpeg.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-10-04 08:48:20 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-10-04 08:48:20 +0000
commita6d0abb602985189b304648532053d7e61d54171 (patch)
treeeb2a935fe1c3e8c0a8cd085544cf997c3ad0ea7d /firmware/mpeg.c
parenta31bae655e92d85708a23b79ba27ace5fc2a185a (diff)
downloadrockbox-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.c23
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
740static void track_change(void) 743static 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);