From: <ale...@us...> - 2023-12-14 09:13:46
|
Revision: 6528 http://sourceforge.net/p/lame/svn/6528 Author: aleidinger Date: 2023-12-14 09:13:45 +0000 (Thu, 14 Dec 2023) Log Message: ----------- Unbreak UTF8 genre tag. Text tags still broken. Disable UTF8 for now in the frontend. Modified Paths: -------------- trunk/lame/frontend/parse.c Modified: trunk/lame/frontend/parse.c =================================================================== --- trunk/lame/frontend/parse.c 2023-12-14 09:12:21 UTC (rev 6527) +++ trunk/lame/frontend/parse.c 2023-12-14 09:13:45 UTC (rev 6528) @@ -304,6 +304,7 @@ size_t w = currCharCodeSize(); char* dst = 0; if (src != 0) { + /* XXX: size calculation for UTF-16, a bit too much for UTF-8, but not too small */ size_t const l = strlenMultiByte(src, w); size_t const n = (l+1)*4; dst = calloc(n+4, 4); @@ -310,11 +311,9 @@ if (dst != 0) { char* cur_code = currentCharacterEncoding(); iconv_t xiconv = iconv_open("UTF-8//TRANSLIT", cur_code); - dst[0] = 0xff; - dst[1] = 0xfe; if (xiconv != (iconv_t)-1) { char* i_ptr = (char*)src; - char* o_ptr = &dst[2]; + char* o_ptr = &dst[0]; size_t srcln = l*w; size_t avail = n; iconv(xiconv, &i_ptr, &srcln, &o_ptr, &avail); @@ -370,7 +369,7 @@ unsigned short* toUtf8(char const* s) { - return (unsigned short *)s; + return local8BitToUtf8(s); } #endif @@ -404,18 +403,38 @@ #ifdef ID3TAGS_EXTENDED static int -set_id3v2tag(lame_global_flags* gfp, int type, unsigned short const* str) +set_id3v2tag(lame_global_flags* gfp, TextEncoding enc, int type, unsigned short const* str) { - switch (type) + switch (enc) { - case 'a': return id3tag_set_textinfo_utf16(gfp, "TPE1", str); - case 't': return id3tag_set_textinfo_utf16(gfp, "TIT2", str); - case 'l': return id3tag_set_textinfo_utf16(gfp, "TALB", str); - case 'g': return id3tag_set_textinfo_utf16(gfp, "TCON", str); - case 'c': return id3tag_set_comment_utf16(gfp, 0, 0, str); - case 'n': return id3tag_set_textinfo_utf16(gfp, "TRCK", str); - case 'y': return id3tag_set_textinfo_utf16(gfp, "TYER", str); - case 'v': return id3tag_set_fieldvalue_utf16(gfp, str); + case TENC_UTF8: + switch (type) + { + case 'a': return id3tag_set_textinfo_utf8(gfp, "TPE1", str); + case 't': return id3tag_set_textinfo_utf8(gfp, "TIT2", str); + case 'l': return id3tag_set_textinfo_utf8(gfp, "TALB", str); + case 'g': return id3tag_set_textinfo_utf8(gfp, "TCON", str); + case 'c': return id3tag_set_comment_ucs2(gfp, 0, 0, str); + case 'n': return id3tag_set_textinfo_utf8(gfp, "TRCK", str); + case 'y': return id3tag_set_textinfo_utf8(gfp, "TYER", str); + case 'v': return id3tag_set_fieldvalue_ucs2(gfp, str); + } + ;; + case TENC_UTF16: + switch (type) + { + case 'a': return id3tag_set_textinfo_utf16(gfp, "TPE1", str); + case 't': return id3tag_set_textinfo_utf16(gfp, "TIT2", str); + case 'l': return id3tag_set_textinfo_utf16(gfp, "TALB", str); + case 'g': return id3tag_set_textinfo_utf16(gfp, "TCON", str); + case 'c': return id3tag_set_comment_utf16(gfp, 0, 0, str); + case 'n': return id3tag_set_textinfo_utf16(gfp, "TRCK", str); + case 'y': return id3tag_set_textinfo_utf16(gfp, "TYER", str); + case 'v': return id3tag_set_fieldvalue_utf16(gfp, str); + } + ;; + default: + return -3; } return 0; } @@ -443,7 +462,7 @@ { void* x = 0; int result; - if (enc == TENC_UTF16 && type != 'v' ) { + if ((enc == TENC_UTF16 || enc == TENC_UTF8) && type != 'v' ) { id3_tag(gfp, type, TENC_LATIN1, str); /* for id3v1 */ } switch (enc) @@ -462,8 +481,8 @@ default: #ifdef ID3TAGS_EXTENDED case TENC_LATIN1: result = set_id3tag(gfp, type, x); break; - case TENC_UTF16: result = set_id3v2tag(gfp, type, x); break; - case TENC_UTF8: result = set_id3v2tag(gfp, type, x); break; + case TENC_UTF16: result = set_id3v2tag(gfp, enc, type, x); break; + case TENC_UTF8: result = set_id3v2tag(gfp, enc, type, x); break; #else case TENC_RAW: result = set_id3tag(gfp, type, x); break; #endif @@ -679,7 +698,9 @@ " --id3v1-only add only a version 1 tag\n" " --id3v2-only add only a version 2 tag\n" #ifdef ID3TAGS_EXTENDED +#ifdef UTF8BROKEN " --id3v2-utf8 add following options in unicode UTF-8 text encoding\n" +#endif " --id3v2-utf16 add following options in unicode UTF-16 text encoding\n" " --id3v2-latin1 add following options in latin-1 text encoding\n" #endif @@ -1596,7 +1617,7 @@ int id3tag_mode = ID3TAG_MODE_DEFAULT; int ignore_tag_errors = 0; /* Ignore errors in values passed for tags */ #ifdef ID3TAGS_EXTENDED - enum TextEncoding id3_tenc = TENC_UTF8; + enum TextEncoding id3_tenc = TENC_UTF16; #else enum TextEncoding id3_tenc = TENC_LATIN1; #endif @@ -1809,9 +1830,11 @@ id3_tenc = TENC_UTF16; id3tag_add_v2(gfp); +#ifdef UTF8BROKEN T_ELIF("id3v2-utf8") id3_tenc = TENC_UTF8; id3tag_add_v2_4_UTF8(gfp); +#endif T_ELIF("id3v2-latin1") id3_tenc = TENC_LATIN1; |