diff options
| author | Björn Stenberg <bjorn@haxx.se> | 2002-06-26 21:27:17 +0000 |
|---|---|---|
| committer | Björn Stenberg <bjorn@haxx.se> | 2002-06-26 21:27:17 +0000 |
| commit | a61617f2b278fe3e0ea14b26980f2a98950fcdc3 (patch) | |
| tree | 68e6e8c80c3c767e2932661b22dd7bf4531bb7d4 | |
| parent | 928e334831f87dfe3b35b50e119b0ade9980b944 (diff) | |
| download | rockbox-a61617f2b278fe3e0ea14b26980f2a98950fcdc3.zip rockbox-a61617f2b278fe3e0ea14b26980f2a98950fcdc3.tar.gz rockbox-a61617f2b278fe3e0ea14b26980f2a98950fcdc3.tar.bz2 rockbox-a61617f2b278fe3e0ea14b26980f2a98950fcdc3.tar.xz | |
Added mpeg_next() and mpeg_prev() (Yusef Napora)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1205 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/mpeg.c | 74 | ||||
| -rw-r--r-- | firmware/mpeg.h | 2 |
2 files changed, 73 insertions, 3 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 5f717d6..2cc5e2f 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c @@ -38,9 +38,12 @@ #define MPEG_STOP 2 #define MPEG_PAUSE 3 #define MPEG_RESUME 4 +#define MPEG_NEXT 5 +#define MPEG_PREV 6 #define MPEG_NEED_DATA 100 extern char* peek_next_track(int type); +extern char* peek_prev_track(int type); #ifndef ARCHOS_RECORDER static unsigned int bass_table[] = @@ -311,11 +314,16 @@ void IMIA1(void) TSR1 &= ~0x01; } -static int new_file(void) +/* If next_track is true, opens the next track, if false, opens prev track */ +static int new_file(bool next_track) { char *trackname; - trackname = peek_next_track(0); + if (next_track) + trackname = peek_next_track(0); + else + trackname = peek_prev_track(0); + if ( !trackname ) return -1; @@ -419,6 +427,56 @@ static void mpeg_thread(void) start_dma(); break; + case MPEG_NEXT: + DEBUGF("MPEG_NEXT\n"); + /* stop the current stream */ + play_pending = false; + playing = false; + stop_dma(); + + reset_mp3_buffer(); + /* Open the next file */ + if (mpeg_file >= 0) + close(mpeg_file); + if (new_file(true) < 0) { + DEBUGF("Finished Playing!\n"); + filling = false; + } else { + /* Make it read more data */ + filling = true; + queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); + + /* Tell the file loading code that we want to start playing + as soon as we have some data */ + play_pending = true; + } + break; + + case MPEG_PREV: + DEBUGF("MPEG_PREV\n"); + /* stop the current stream */ + play_pending = false; + playing = false; + stop_dma(); + + reset_mp3_buffer(); + /* Open the next file */ + if (mpeg_file >= 0) + close(mpeg_file); + if (new_file(false) < 0) { + DEBUGF("Finished Playing!\n"); + filling = false; + } else { + /* Make it read more data */ + filling = true; + queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); + + /* Tell the file loading code that we want to start playing + as soon as we have some data */ + play_pending = true; + } + break; + case MPEG_NEED_DATA: free_space_left = mp3buf_read - mp3buf_write; @@ -486,7 +544,7 @@ static void mpeg_thread(void) boundary */ mp3buf_write = (mp3buf_write + 1) & 0xfffffffe; - if(new_file() < 0) + if(new_file(1) < 0) { /* No more data to play */ DEBUGF("Finished playing\n"); @@ -569,6 +627,16 @@ void mpeg_resume(void) queue_post(&mpeg_queue, MPEG_RESUME, NULL); } +void mpeg_next(void) +{ + queue_post(&mpeg_queue, MPEG_NEXT, NULL); +} + +void mpeg_prev(void) +{ + queue_post(&mpeg_queue, MPEG_PREV, NULL); +} + void mpeg_volume(int percent) { int volume; diff --git a/firmware/mpeg.h b/firmware/mpeg.h index 54b760c..063ab3f 100644 --- a/firmware/mpeg.h +++ b/firmware/mpeg.h @@ -24,6 +24,8 @@ void mpeg_play(char* trackname); void mpeg_stop(void); void mpeg_pause(void); void mpeg_resume(void); +void mpeg_next(void); +void mpeg_prev(void); void mpeg_volume(int percent); void mpeg_bass(int percent); void mpeg_treble(int percent); |