diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/id3.c | 10 | ||||
-rw-r--r-- | firmware/id3.h | 3 | ||||
-rw-r--r-- | firmware/mpeg.c | 4 |
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 | } |