diff options
author | Thibaut Mattern <tmattern@users.sourceforge.net> | 2005-09-16 23:01:10 +0000 |
---|---|---|
committer | Thibaut Mattern <tmattern@users.sourceforge.net> | 2005-09-16 23:01:10 +0000 |
commit | 801a491a64cb01af880bd2093b3d350be38219a7 (patch) | |
tree | 5e56045d09031fcceca7af1254e9c1401d749151 | |
parent | 3a9187648f362aff32855d3b41ba0755fb5f0b20 (diff) | |
download | xine-lib-801a491a64cb01af880bd2093b3d350be38219a7.tar.gz xine-lib-801a491a64cb01af880bd2093b3d350be38219a7.tar.bz2 |
Fixed id3v2.4 genre parsing.
CVS patchset: 7737
CVS date: 2005/09/16 23:01:10
-rw-r--r-- | src/demuxers/id3.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/demuxers/id3.c b/src/demuxers/id3.c index a5e45acd7..29cb3d4c4 100644 --- a/src/demuxers/id3.c +++ b/src/demuxers/id3.c @@ -29,7 +29,7 @@ * * ID3v2 specs: http://www.id3.org/ * - * $Id: id3.c,v 1.10 2005/09/16 22:16:11 tmattern Exp $ + * $Id: id3.c,v 1.11 2005/09/16 23:01:10 tmattern Exp $ */ #ifdef HAVE_CONFIG_H @@ -625,6 +625,22 @@ int id3v23_parse_tag(input_plugin_t *input, /* id3 v2.4 */ +/* id3v2 "genre" parsing code. what a ugly format ! */ +static int id3v24_parse_genre(char* dest, char *src, int len) { + int index = 0; + + dest[0] = '\0'; + if (sscanf(src, "%2d", &index) == 1) { + if (index < ID3_GENRE_COUNT) { + strncpy(dest, id3_genre[index], len); + dest[len - 1] = '\0'; + } else { + lprintf("invalid index: %d\n", index); + } + } + return 1; +} + static int id3v24_parse_frame_header(input_plugin_t *input, id3v24_frame_header_t *frame_header) { uint8_t buf[ID3V24_FRAME_HEADER_SIZE]; @@ -742,13 +758,15 @@ static int id3v24_interp_frame(input_plugin_t *input, enc = buf[0]; if( enc >= ID3_ENCODING_COUNT ) enc = 0; + + lprintf("data: %s\n", buf+1); switch (frame_header->id) { case ( FOURCC_TAG('T', 'C', 'O', 'N') ): { char tmp[1024]; - if (id3v2_parse_genre(tmp, buf + 1, 1024)) { + if (id3v24_parse_genre(tmp, buf + 1, 1024)) { _x_meta_info_set(stream, XINE_META_INFO_GENRE, tmp); } } |