TagId3: remove the "id3v1_encoding" setting

Drop support for misencoded tags.  People should not be using ID3v1
anyway.
This commit is contained in:
Max Kellermann 2015-06-26 00:08:29 +02:00
parent f415167e59
commit d5cfa6d4dc
5 changed files with 13 additions and 58 deletions

2
NEWS
View File

@ -9,6 +9,8 @@ ver 0.20 (not yet released)
- ape, ogg: drop support for non-standard tag "album artist" - ape, ogg: drop support for non-standard tag "album artist"
affected filetypes: vorbis, flac, opus & all files with ape2 tags affected filetypes: vorbis, flac, opus & all files with ape2 tags
(most importantly some mp3s) (most importantly some mp3s)
- id3: remove the "id3v1_encoding" setting; by definition, all ID3v1 tags
are ISO-Latin-1
* decoder * decoder
- ffmpeg: support ReplayGain and MixRamp - ffmpeg: support ReplayGain and MixRamp
- ffmpeg: support stream tags - ffmpeg: support stream tags

View File

@ -156,12 +156,6 @@ This specifies the character set used for the filesystem. A list of supported
character sets can be obtained by running "iconv \-l". The default is character sets can be obtained by running "iconv \-l". The default is
determined from the locale when the db was originally created. determined from the locale when the db was originally created.
.TP .TP
.B id3v1_encoding <charset>
This specifies the character set which ID3v1 tags are encoded in. A list of
supported character sets can be obtained by running "iconv \-l". The default is
to let libid3tag convert them (from ISO-8859-1, as the standard specifies) and
do no additional conversion.
.TP
.B gapless_mp3_playback <yes or no> .B gapless_mp3_playback <yes or no>
This specifies whether to support gapless playback of MP3s which have the This specifies whether to support gapless playback of MP3s which have the
necessary headers. Useful if your MP3s have headers with incorrect necessary headers. Useful if your MP3s have headers with incorrect

View File

@ -373,8 +373,4 @@ input {
# #
#filesystem_charset "UTF-8" #filesystem_charset "UTF-8"
# #
# This setting controls the encoding that ID3v1 tags should be converted from.
#
#id3v1_encoding "ISO-8859-1"
#
############################################################################### ###############################################################################

View File

@ -64,7 +64,7 @@ const ConfigTemplate config_param_templates[] = {
{ "max_command_list_size" }, { "max_command_list_size" },
{ "max_output_buffer_size" }, { "max_output_buffer_size" },
{ "filesystem_charset" }, { "filesystem_charset" },
{ "id3v1_encoding" }, { "id3v1_encoding", false, true },
{ "metadata_to_use" }, { "metadata_to_use" },
{ "save_absolute_paths_in_playlists" }, { "save_absolute_paths_in_playlists" },
{ "gapless_mp3_playback" }, { "gapless_mp3_playback" },

View File

@ -33,10 +33,6 @@
#include "fs/Path.hxx" #include "fs/Path.hxx"
#include "fs/FileSystem.hxx" #include "fs/FileSystem.hxx"
#ifdef HAVE_GLIB
#include <glib.h>
#endif
#include <id3tag.h> #include <id3tag.h>
#include <string> #include <string>
@ -91,43 +87,11 @@ tag_id3_getstring(const struct id3_frame *frame, unsigned i)
/* This will try to convert a string to utf-8, /* This will try to convert a string to utf-8,
*/ */
static id3_utf8_t * static id3_utf8_t *
import_id3_string(bool is_id3v1, const id3_ucs4_t *ucs4) import_id3_string(const id3_ucs4_t *ucs4)
{ {
id3_utf8_t *utf8; id3_utf8_t *utf8 = id3_ucs4_utf8duplicate(ucs4);
if (gcc_unlikely(utf8 == nullptr))
#ifdef HAVE_GLIB return nullptr;
/* use encoding field here? */
const char *encoding;
if (is_id3v1 &&
(encoding = config_get_string(ConfigOption::ID3V1_ENCODING,
nullptr)) != nullptr) {
id3_latin1_t *isostr = id3_ucs4_latin1duplicate(ucs4);
if (gcc_unlikely(isostr == nullptr))
return nullptr;
utf8 = (id3_utf8_t *)
g_convert_with_fallback((const char*)isostr, -1,
"utf-8", encoding,
nullptr, nullptr,
nullptr, nullptr);
if (utf8 == nullptr) {
FormatWarning(id3_domain,
"Unable to convert %s string to UTF-8: '%s'",
encoding, isostr);
free(isostr);
return nullptr;
}
free(isostr);
} else {
#else
(void)is_id3v1;
#endif
utf8 = id3_ucs4_utf8duplicate(ucs4);
if (gcc_unlikely(utf8 == nullptr))
return nullptr;
#ifdef HAVE_GLIB
}
#endif
id3_utf8_t *utf8_stripped = (id3_utf8_t *) id3_utf8_t *utf8_stripped = (id3_utf8_t *)
xstrdup(Strip((char *)utf8)); xstrdup(Strip((char *)utf8));
@ -144,7 +108,7 @@ import_id3_string(bool is_id3v1, const id3_ucs4_t *ucs4)
* - string list * - string list
*/ */
static void static void
tag_id3_import_text_frame(struct id3_tag *tag, const struct id3_frame *frame, tag_id3_import_text_frame(const struct id3_frame *frame,
TagType type, TagType type,
const struct tag_handler *handler, void *handler_ctx) const struct tag_handler *handler, void *handler_ctx)
{ {
@ -173,7 +137,7 @@ tag_id3_import_text_frame(struct id3_tag *tag, const struct id3_frame *frame,
if (type == TAG_GENRE) if (type == TAG_GENRE)
ucs4 = id3_genre_name(ucs4); ucs4 = id3_genre_name(ucs4);
id3_utf8_t *utf8 = import_id3_string(tag_is_id3v1(tag), ucs4); id3_utf8_t *utf8 = import_id3_string(ucs4);
if (utf8 == nullptr) if (utf8 == nullptr)
continue; continue;
@ -194,7 +158,7 @@ tag_id3_import_text(struct id3_tag *tag, const char *id, TagType type,
const struct id3_frame *frame; const struct id3_frame *frame;
for (unsigned i = 0; for (unsigned i = 0;
(frame = id3_tag_findframe(tag, id, i)) != nullptr; ++i) (frame = id3_tag_findframe(tag, id, i)) != nullptr; ++i)
tag_id3_import_text_frame(tag, frame, type, tag_id3_import_text_frame(frame, type,
handler, handler_ctx); handler, handler_ctx);
} }
@ -208,8 +172,7 @@ tag_id3_import_text(struct id3_tag *tag, const char *id, TagType type,
* - full string (we use this one) * - full string (we use this one)
*/ */
static void static void
tag_id3_import_comment_frame(struct id3_tag *tag, tag_id3_import_comment_frame(const struct id3_frame *frame, TagType type,
const struct id3_frame *frame, TagType type,
const struct tag_handler *handler, const struct tag_handler *handler,
void *handler_ctx) void *handler_ctx)
{ {
@ -225,7 +188,7 @@ tag_id3_import_comment_frame(struct id3_tag *tag,
if (ucs4 == nullptr) if (ucs4 == nullptr)
return; return;
id3_utf8_t *utf8 = import_id3_string(tag_is_id3v1(tag), ucs4); id3_utf8_t *utf8 = import_id3_string(ucs4);
if (utf8 == nullptr) if (utf8 == nullptr)
return; return;
@ -244,7 +207,7 @@ tag_id3_import_comment(struct id3_tag *tag, const char *id, TagType type,
const struct id3_frame *frame; const struct id3_frame *frame;
for (unsigned i = 0; for (unsigned i = 0;
(frame = id3_tag_findframe(tag, id, i)) != nullptr; ++i) (frame = id3_tag_findframe(tag, id, i)) != nullptr; ++i)
tag_id3_import_comment_frame(tag, frame, type, tag_id3_import_comment_frame(frame, type,
handler, handler_ctx); handler, handler_ctx);
} }