From 801a491a64cb01af880bd2093b3d350be38219a7 Mon Sep 17 00:00:00 2001 From: Thibaut Mattern Date: Fri, 16 Sep 2005 23:01:10 +0000 Subject: Fixed id3v2.4 genre parsing. CVS patchset: 7737 CVS date: 2005/09/16 23:01:10 --- src/demuxers/id3.c | 22 ++++++++++++++++++++-- 1 file 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); } } -- cgit v1.2.3