summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-08-14 10:15:27 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-08-14 10:15:27 +0000
commit66f9bccd4746e222a5c1bea7f1fe57d4f2124f5a (patch)
tree3bac192bea9a81d4143d01cf952e8e9198b3b456
parent41977da3d5169c44f996db819310b1a48f704054 (diff)
downloadrockbox-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.c11
-rw-r--r--firmware/mpeg.c8
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;