diff options
author | Björn Stenberg <bjorn@haxx.se> | 2002-08-15 16:48:34 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2002-08-15 16:48:34 +0000 |
commit | 749d87bb20dd3a7a26e33636b0f7a99055f2a68a (patch) | |
tree | 0d645b63ba88c3353e10077fb157c6231f3b286d /firmware | |
parent | cb6bafd1f259d7a0e440993aa168b13c985f0503 (diff) | |
download | rockbox-749d87bb20dd3a7a26e33636b0f7a99055f2a68a.tar.gz rockbox-749d87bb20dd3a7a26e33636b0f7a99055f2a68a.zip |
Correction for fast-forward/rewind
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1769 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/mpeg.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 784c9010c0..92ef55983b 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -451,7 +451,28 @@ static int get_unplayed_space(void) | |||
451 | { | 451 | { |
452 | int space = mp3buf_write - mp3buf_read; | 452 | int space = mp3buf_write - mp3buf_read; |
453 | if (space < 0) | 453 | if (space < 0) |
454 | space = mp3buflen + space; | 454 | space += mp3buflen; |
455 | return space; | ||
456 | } | ||
457 | |||
458 | static int get_unplayed_space_current_song(void) | ||
459 | { | ||
460 | int space; | ||
461 | |||
462 | if (num_tracks_in_memory() > 1) | ||
463 | { | ||
464 | int track_offset = (tag_read_idx+1) & MAX_ID3_TAGS_MASK; | ||
465 | |||
466 | space = id3tags[track_offset]->mempos - mp3buf_read; | ||
467 | } | ||
468 | else | ||
469 | { | ||
470 | space = mp3buf_write - mp3buf_read; | ||
471 | } | ||
472 | |||
473 | if (space < 0) | ||
474 | space += mp3buflen; | ||
475 | |||
455 | return space; | 476 | return space; |
456 | } | 477 | } |
457 | 478 | ||
@@ -461,7 +482,7 @@ static void init_dma(void) | |||
461 | DAR3 = 0x5FFFEC3; | 482 | DAR3 = 0x5FFFEC3; |
462 | CHCR3 &= ~0x0002; /* Clear interrupt */ | 483 | CHCR3 &= ~0x0002; /* Clear interrupt */ |
463 | CHCR3 = 0x1504; /* Single address destination, TXI0, IE=1 */ | 484 | CHCR3 = 0x1504; /* Single address destination, TXI0, IE=1 */ |
464 | last_dma_chunk_size = MIN(65536, get_unplayed_space()); | 485 | last_dma_chunk_size = MIN(65536, get_unplayed_space_current_song()); |
465 | DTCR3 = last_dma_chunk_size & 0xffff; | 486 | DTCR3 = last_dma_chunk_size & 0xffff; |
466 | DMAOR = 0x0001; /* Enable DMA */ | 487 | DMAOR = 0x0001; /* Enable DMA */ |
467 | CHCR3 |= 0x0001; /* Enable DMA IRQ */ | 488 | CHCR3 |= 0x0001; /* Enable DMA IRQ */ |