summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/id3.c10
-rw-r--r--firmware/id3.h3
-rw-r--r--firmware/mpeg.c4
3 files changed, 9 insertions, 8 deletions
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)
713 filetime = entry->filesize/bpf*tpf; 713 filetime = entry->filesize/bpf*tpf;
714 } 714 }
715 715
716 DEBUGF("Old ID3V2 length: %x\n", entry->id3v2len); 716 /* Update the seek point for the first playable frame */
717 /* Adjust the tag length only if there is a tag present */ 717 entry->first_frame_offset = bytecount;
718 if(entry->id3v2len || header_found) 718 DEBUGF("First frame is at %x\n", entry->first_frame_offset);
719 entry->id3v2len = bytecount; 719
720 DEBUGF("New ID3V2 length: %x\n", bytecount);
721
722 return filetime; 720 return filetime;
723} 721}
724 722
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 {
33 unsigned int frequency; 33 unsigned int frequency;
34 unsigned int id3v2len; 34 unsigned int id3v2len;
35 unsigned int id3v1len; 35 unsigned int id3v1len;
36 unsigned int first_frame_offset; /* Byte offset to first real MP3 frame.
37 Used for skipping leading garbage to
38 avoid gaps between tracks. */
36 unsigned int filesize; /* in bytes */ 39 unsigned int filesize; /* in bytes */
37 unsigned int length; /* song length */ 40 unsigned int length; /* song length */
38 unsigned int elapsed; /* ms played */ 41 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)
775 { 775 {
776 /* skip past id3v2 tag */ 776 /* skip past id3v2 tag */
777 lseek(mpeg_file, 777 lseek(mpeg_file,
778 id3tags[new_tag_idx]->id3.id3v2len, 778 id3tags[new_tag_idx]->id3.first_frame_offset,
779 SEEK_SET); 779 SEEK_SET);
780 id3tags[new_tag_idx]->id3.index = steps; 780 id3tags[new_tag_idx]->id3.index = steps;
781 id3tags[new_tag_idx]->id3.offset = 0; 781 id3tags[new_tag_idx]->id3.offset = 0;
@@ -967,7 +967,7 @@ static void mpeg_thread(void)
967 else { 967 else {
968 /* skip past id3v2 tag */ 968 /* skip past id3v2 tag */
969 lseek(mpeg_file, 969 lseek(mpeg_file,
970 id3tags[tag_read_idx]->id3.id3v2len, 970 id3tags[tag_read_idx]->id3.first_frame_offset,
971 SEEK_SET); 971 SEEK_SET);
972 972
973 } 973 }