summaryrefslogtreecommitdiff
path: root/firmware/mpeg.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r--firmware/mpeg.c25
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
458static 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 */