From f4a61f0c4a999790f07d061352100ac6310a38f6 Mon Sep 17 00:00:00 2001 From: Dan Everton Date: Fri, 3 Aug 2007 10:00:42 +0000 Subject: Add support for parsing the disc number tag from metadata and use of it in the database. Patch originally from FS#4961 with some minor tweaks by me. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14154 a1c6a512-1295-4272-9138-f99709370657 --- firmware/id3.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'firmware/id3.c') diff --git a/firmware/id3.c b/firmware/id3.c index 8e1d96462b..a66318b2fc 100644 --- a/firmware/id3.c +++ b/firmware/id3.c @@ -351,6 +351,13 @@ static int parsetracknum( struct mp3entry* entry, char* tag, int bufferpos ) return bufferpos; } +/* parse numeric value from string */ +static int parsediscnum( struct mp3entry* entry, char* tag, int bufferpos ) +{ + entry->discnum = atoi( tag ); + return bufferpos; +} + /* parse numeric value from string */ static int parseyearnum( struct mp3entry* entry, char* tag, int bufferpos ) { @@ -446,6 +453,7 @@ static const struct tag_resolver taglist[] = { { "TALB", 4, offsetof(struct mp3entry, album), NULL, false }, { "TAL", 3, offsetof(struct mp3entry, album), NULL, false }, { "TRK", 3, offsetof(struct mp3entry, track_string), &parsetracknum, false }, + { "TPOS", 4, offsetof(struct mp3entry, disc_string), &parsediscnum, false }, { "TRCK", 4, offsetof(struct mp3entry, track_string), &parsetracknum, false }, { "TDRC", 4, offsetof(struct mp3entry, year_string), &parseyearnum, false }, { "TYER", 4, offsetof(struct mp3entry, year_string), &parseyearnum, false }, @@ -693,7 +701,7 @@ static void setid3v2title(int fd, struct mp3entry *entry) return; } entry->id3version = version; - entry->tracknum = entry->year = 0; + entry->tracknum = entry->year = entry->discnum = 0; entry->title = entry->artist = entry->album = NULL; /* FIXME incomplete */ global_flags = header[5]; @@ -1112,6 +1120,7 @@ bool get_mp3_metadata(int fd, struct mp3entry *entry, const char *filename, bool entry->filesize = filesize(fd); entry->id3v2len = getid3v2len(fd); entry->tracknum = 0; + entry->discnum = 0; if(v1first) v1found = setid3v1title(fd, entry); @@ -1173,6 +1182,8 @@ void adjust_mp3entry(struct mp3entry *entry, void *dest, void *orig) entry->genre_string += offset; if (entry->track_string) entry->track_string += offset; + if (entry->disc_string) + entry->disc_string += offset; if (entry->year_string) entry->year_string += offset; if (entry->composer) -- cgit v1.2.3