summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibaut Mattern <tmattern@users.sourceforge.net>2005-09-16 23:01:10 +0000
committerThibaut Mattern <tmattern@users.sourceforge.net>2005-09-16 23:01:10 +0000
commit801a491a64cb01af880bd2093b3d350be38219a7 (patch)
tree5e56045d09031fcceca7af1254e9c1401d749151
parent3a9187648f362aff32855d3b41ba0755fb5f0b20 (diff)
downloadxine-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.c22
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);
}
}