Mercurial > audlegacy-plugins
diff src/madplug/input.c @ 618:a7a28782c1b0 trunk
[svn] - revise input_id3_get_string() to take encoding of field into account.
- restore title_override options I accidentally dropped.
- remove unnecessary code.
| author | yaz |
|---|---|
| date | Wed, 07 Feb 2007 23:31:26 -0800 |
| parents | 85a70ace8c02 |
| children | 7a181a17f995 |
line wrap: on
line diff
--- a/src/madplug/input.c Wed Feb 07 18:26:47 2007 -0800 +++ b/src/madplug/input.c Wed Feb 07 23:31:26 2007 -0800 @@ -258,23 +258,24 @@ return ret; } - gchar *input_id3_get_string(struct id3_tag * tag, char *frame_name) { - gchar *rtn; - gchar *rtn2; + gchar *rtn0 = NULL, *rtn = NULL; const id3_ucs4_t *string_const; id3_ucs4_t *string; - id3_ucs4_t *ucsptr; struct id3_frame *frame; union id3_field *field; - gboolean flagutf = FALSE; + int encoding = -1; frame = id3_tag_findframe(tag, frame_name, 0); if (!frame) return NULL; - if (!strcmp(frame_name, ID3_FRAME_COMMENT)) + field = id3_frame_field(frame, 0); + encoding = id3_field_gettextencoding(field); + g_print("encoding = %d\n", encoding); + + if (frame_name == ID3_FRAME_COMMENT) field = id3_frame_field(frame, 3); else field = id3_frame_field(frame, 1); @@ -282,7 +283,7 @@ if (!field) return NULL; - if (!strcmp(frame_name, ID3_FRAME_COMMENT)) + if (frame_name == ID3_FRAME_COMMENT) string_const = id3_field_getfullstring(field); else string_const = id3_field_getstrings(field, 0); @@ -292,38 +293,35 @@ string = mad_ucs4dup((id3_ucs4_t *)string_const); - if (!strcmp(frame_name, ID3_FRAME_GENRE)) { + if (frame_name == ID3_FRAME_GENRE) { id3_ucs4_t *string2 = NULL; string2 = mad_parse_genre(string); g_free((void *)string); string = string2; } - ucsptr = (id3_ucs4_t *)string; - while (*ucsptr) { - if (*ucsptr > 0x000000ffL) { - flagutf = TRUE; - break; - } - ucsptr++; + switch (encoding) { + case ID3_FIELD_TEXTENCODING_ISO_8859_1: + g_print("latin1\n"); + rtn0 = id3_ucs4_latin1duplicate(string); + break; + case ID3_FIELD_TEXTENCODING_UTF_16: + case ID3_FIELD_TEXTENCODING_UTF_16BE: + g_print("UTF16\n"); + rtn0 = id3_ucs4_utf16duplicate(string); + break; + case ID3_FIELD_TEXTENCODING_UTF_8: + default: + g_print("UTF8\n"); + rtn0 = id3_ucs4_utf8duplicate(string); + break; } - if (flagutf) { + rtn = str_to_utf8(rtn0); + g_free(rtn0); + #ifdef DEBUG - g_print("aud-mad: flagutf!\n"); -#endif - rtn = (gchar *)id3_ucs4_utf8duplicate(string); - } - else { - rtn = (gchar *)id3_ucs4_latin1duplicate(string); - rtn2 = str_to_utf8(rtn); - free(rtn); - rtn = rtn2; - } - g_free(string); - string = NULL; -#ifdef DEBUG - g_print("string = %s\n", rtn); + g_print("i: string = %s\n", rtn); #endif return rtn; } @@ -465,7 +463,7 @@ #endif #endif /* simply read to data from the file */ - len = vfs_fread(buffer, 1, buffer_size, madinfo->infile); //vfs_fread returns num of element. + len = vfs_fread(buffer, 1, buffer_size, madinfo->infile); //vfs_fread returns num of elements. if(len == 0){ if(madinfo->playback)
