From c41322c59182e4cb10de185f7c14a59a015ac994 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Sun, 27 Oct 2002 23:07:26 +0000 Subject: Better skipping of leading garbage. Fixes bug #625868. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2752 a1c6a512-1295-4272-9138-f99709370657 --- firmware/id3.c | 10 ++++------ firmware/id3.h | 3 +++ firmware/mpeg.c | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) (limited to 'firmware') diff --git a/firmware/id3.c b/firmware/id3.c index 54f0f970c1..e0e3ca1abf 100644 --- a/firmware/id3.c +++ b/firmware/id3.c @@ -713,12 +713,10 @@ static int getsonglength(int fd, struct mp3entry *entry) filetime = entry->filesize/bpf*tpf; } - DEBUGF("Old ID3V2 length: %x\n", entry->id3v2len); - /* Adjust the tag length only if there is a tag present */ - if(entry->id3v2len || header_found) - entry->id3v2len = bytecount; - DEBUGF("New ID3V2 length: %x\n", bytecount); - + /* Update the seek point for the first playable frame */ + entry->first_frame_offset = bytecount; + DEBUGF("First frame is at %x\n", entry->first_frame_offset); + return filetime; } diff --git a/firmware/id3.h b/firmware/id3.h index d76614f540..88f50ba9b1 100644 --- a/firmware/id3.h +++ b/firmware/id3.h @@ -33,6 +33,9 @@ struct mp3entry { unsigned int frequency; unsigned int id3v2len; unsigned int id3v1len; + unsigned int first_frame_offset; /* Byte offset to first real MP3 frame. + Used for skipping leading garbage to + avoid gaps between tracks. */ unsigned int filesize; /* in bytes */ unsigned int length; /* song length */ unsigned int elapsed; /* ms played */ diff --git a/firmware/mpeg.c b/firmware/mpeg.c index d75ac2085e..e8fd1acbc7 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c @@ -775,7 +775,7 @@ static int new_file(int steps) { /* skip past id3v2 tag */ lseek(mpeg_file, - id3tags[new_tag_idx]->id3.id3v2len, + id3tags[new_tag_idx]->id3.first_frame_offset, SEEK_SET); id3tags[new_tag_idx]->id3.index = steps; id3tags[new_tag_idx]->id3.offset = 0; @@ -967,7 +967,7 @@ static void mpeg_thread(void) else { /* skip past id3v2 tag */ lseek(mpeg_file, - id3tags[tag_read_idx]->id3.id3v2len, + id3tags[tag_read_idx]->id3.first_frame_offset, SEEK_SET); } -- cgit v1.2.3