summaryrefslogtreecommitdiff
path: root/libavformat/mp3enc.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2011-02-05 22:20:13 +0100
committerRonald S. Bultje <rsbultje@gmail.com>2011-02-05 20:13:48 -0500
commit5a6de4e7e8d81169be9b6909b71e42a9ece59a82 (patch)
treeb89bf67283242b27acda25289c5d69a508684d02 /libavformat/mp3enc.c
parent74571e333cc9abf3fe3fde3735698def1547db71 (diff)
mp3enc: write ISO8859-1 instead of UTF-16 when possible
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Diffstat (limited to 'libavformat/mp3enc.c')
-rw-r--r--libavformat/mp3enc.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c
index b2c0a7e6f8..5921dedad0 100644
--- a/libavformat/mp3enc.c
+++ b/libavformat/mp3enc.c
@@ -77,6 +77,12 @@ static void id3v2_put_size(AVFormatContext *s, int size)
put_byte(s->pb, size & 0x7f);
}
+static int string_is_ascii(const uint8_t *str)
+{
+ while (*str && *str < 128) str++;
+ return !*str;
+}
+
/**
* Write a text frame with one (normal frames) or two (TXXX frames) strings
* according to encoding (only UTF-8 or UTF-16+BOM supported).
@@ -92,6 +98,12 @@ static int id3v2_put_ttag(AVFormatContext *s, const char *str1, const char *str2
if (url_open_dyn_buf(&dyn_buf) < 0)
return AVERROR(ENOMEM);
+ /* check if the strings are ASCII-only and use UTF16 only if
+ * they're not */
+ if (enc == ID3v2_ENCODING_UTF16BOM && string_is_ascii(str1) &&
+ (!str2 || string_is_ascii(str2)))
+ enc = ID3v2_ENCODING_ISO8859;
+
put_byte(dyn_buf, enc);
if (enc == ID3v2_ENCODING_UTF16BOM) {
put_le16(dyn_buf, 0xFEFF); /* BOM */