diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 3ca605b365..d6fdf907ee 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c @@ -415,6 +415,23 @@ void DEI3(void) if(mp3buf_read >= mp3buflen) mp3buf_read = 0; + /* First, check if we are on a track boundary */ + if (last_tag > 1) + { + if (mp3buf_read == id3tags[1].mempos) + { + /* shift array so index 0 is current track */ + int i; + + DEBUGF("Track change\n"); + for (i=0; i1 ) { + if (last_tag>1) + { /* will we move across the track boundary? */ - if (( mp3buf_read <= id3tags[1].mempos ) && - ((mp3buf_read+last_dma_chunk_size) > id3tags[1].mempos )) { - /* shift array so index 0 is current track */ - int i; - for (i=0; i id3tags[1].mempos )) + { + /* Make sure that we end exactly on the boundary */ + last_dma_chunk_size = id3tags[1].mempos - mp3buf_read; } } + + DTCR3 = last_dma_chunk_size & 0xffff; + SAR3 = (unsigned int)mp3buf + mp3buf_read; } else {