diff options
author | Björn Stenberg <bjorn@haxx.se> | 2002-08-14 10:15:27 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2002-08-14 10:15:27 +0000 |
commit | 66f9bccd4746e222a5c1bea7f1fe57d4f2124f5a (patch) | |
tree | 3bac192bea9a81d4143d01cf952e8e9198b3b456 | |
parent | 41977da3d5169c44f996db819310b1a48f704054 (diff) | |
download | rockbox-66f9bccd4746e222a5c1bea7f1fe57d4f2124f5a.tar.gz rockbox-66f9bccd4746e222a5c1bea7f1fe57d4f2124f5a.zip |
Skip past id3v2 tag when loading mp3 data
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1729 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/id3.c | 11 | ||||
-rw-r--r-- | firmware/mpeg.c | 8 |
2 files changed, 10 insertions, 9 deletions
diff --git a/firmware/id3.c b/firmware/id3.c index 021b817704..743ff74902 100644 --- a/firmware/id3.c +++ b/firmware/id3.c | |||
@@ -44,9 +44,6 @@ | |||
44 | ((b3 & 0x7F) << (1*7)) | \ | 44 | ((b3 & 0x7F) << (1*7)) | \ |
45 | ((b4 & 0x7F) << (0*7))) | 45 | ((b4 & 0x7F) << (0*7))) |
46 | 46 | ||
47 | #define HASID3V2(entry) entry->id3v2len > 0 | ||
48 | #define HASID3V1(entry) entry->id3v1len > 0 | ||
49 | |||
50 | /* Table of bitrates for MP3 files, all values in kilo. | 47 | /* Table of bitrates for MP3 files, all values in kilo. |
51 | * Indexed by version, layer and value of bit 15-12 in header. | 48 | * Indexed by version, layer and value of bit 15-12 in header. |
52 | */ | 49 | */ |
@@ -596,16 +593,12 @@ bool mp3info(struct mp3entry *entry, char *filename) | |||
596 | entry->id3v2len = getid3v2len(fd); | 593 | entry->id3v2len = getid3v2len(fd); |
597 | entry->tracknum = 0; | 594 | entry->tracknum = 0; |
598 | 595 | ||
599 | /* Ignore the tag if it is too big */ | 596 | if ( entry->id3v2len && entry->id3v2len <= sizeof( entry->id3v2buf ) ) |
600 | if(entry->id3v2len > sizeof(entry->id3v2buf)) | ||
601 | entry->id3v2len = 0; | ||
602 | |||
603 | if(HASID3V2(entry)) | ||
604 | setid3v2title(fd, entry); | 597 | setid3v2title(fd, entry); |
605 | entry->length = getsonglength(fd, entry); | 598 | entry->length = getsonglength(fd, entry); |
606 | 599 | ||
607 | entry->id3v1len = getid3v1len(fd); | 600 | entry->id3v1len = getid3v1len(fd); |
608 | if(HASID3V1(entry) && !entry->title) | 601 | if(entry->id3v1len && !entry->title) |
609 | setid3v1title(fd, entry); | 602 | setid3v1title(fd, entry); |
610 | 603 | ||
611 | close(fd); | 604 | close(fd); |
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 1a42ee9c2f..fed755b7f8 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -624,6 +624,10 @@ static int new_file(int steps) | |||
624 | else | 624 | else |
625 | { | 625 | { |
626 | add_track_to_tag_list(trackname); | 626 | add_track_to_tag_list(trackname); |
627 | /* skip past id3v2 tag (to an even byte) */ | ||
628 | lseek(mpeg_file, | ||
629 | id3tags[tag_read_idx]->id3.id3v2len & ~1, | ||
630 | SEEK_SET); | ||
627 | } | 631 | } |
628 | } while ( mpeg_file < 0 ); | 632 | } while ( mpeg_file < 0 ); |
629 | 633 | ||
@@ -698,6 +702,10 @@ static void mpeg_thread(void) | |||
698 | } | 702 | } |
699 | 703 | ||
700 | add_track_to_tag_list((char *)ev.data); | 704 | add_track_to_tag_list((char *)ev.data); |
705 | /* skip past id3v2 tag (to an even byte) */ | ||
706 | lseek(mpeg_file, | ||
707 | id3tags[tag_read_idx]->id3.id3v2len & ~1, | ||
708 | SEEK_SET); | ||
701 | 709 | ||
702 | /* Make it read more data */ | 710 | /* Make it read more data */ |
703 | filling = true; | 711 | filling = true; |