mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
gst/subparse/gstsubparse.c: Improve typefinding a bit. If we don't have a Unicode charset try GST_SUBTITLE_ENCODING a...
Original commit message from CVS: * gst/subparse/gstsubparse.c: (gst_subparse_type_find): Improve typefinding a bit. If we don't have a Unicode charset try GST_SUBTITLE_ENCODING and otherwise try ISO-8859-15.
This commit is contained in:
parent
a0e3174c88
commit
e86d1dd432
2 changed files with 37 additions and 3 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2008-10-15 Sebastian Dröge <slomo@circular-chaos.org>
|
||||||
|
|
||||||
|
* gst/subparse/gstsubparse.c: (gst_subparse_type_find):
|
||||||
|
Improve typefinding a bit. If we don't have a Unicode charset
|
||||||
|
try GST_SUBTITLE_ENCODING and otherwise try ISO-8859-15.
|
||||||
|
|
||||||
2008-10-14 Edward Hervey <edward.hervey@collabora.co.uk>
|
2008-10-14 Edward Hervey <edward.hervey@collabora.co.uk>
|
||||||
|
|
||||||
* ext/theora/theoradec.c: (theora_dec_decode_buffer):
|
* ext/theora/theoradec.c: (theora_dec_decode_buffer):
|
||||||
|
|
|
@ -1408,6 +1408,7 @@ gst_subparse_type_find (GstTypeFind * tf, gpointer private)
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
gchar *str;
|
gchar *str;
|
||||||
gchar *encoding = NULL;
|
gchar *encoding = NULL;
|
||||||
|
const gchar *end;
|
||||||
|
|
||||||
if (!(data = gst_type_find_peek (tf, 0, 129)))
|
if (!(data = gst_type_find_peek (tf, 0, 129)))
|
||||||
return;
|
return;
|
||||||
|
@ -1427,12 +1428,39 @@ gst_subparse_type_find (GstTypeFind * tf, gpointer private)
|
||||||
err->message);
|
err->message);
|
||||||
g_error_free (err);
|
g_error_free (err);
|
||||||
g_free (encoding);
|
g_free (encoding);
|
||||||
|
} else {
|
||||||
|
g_free (str);
|
||||||
|
str = converted_str;
|
||||||
|
g_free (encoding);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if at least the first 120 chars are valid UTF8,
|
||||||
|
* otherwise convert as always */
|
||||||
|
if (!g_utf8_validate (str, 128, &end) && (end - str) < 120) {
|
||||||
|
gchar *converted_str;
|
||||||
|
GError *err = NULL;
|
||||||
|
gsize tmp;
|
||||||
|
const gchar *enc;
|
||||||
|
|
||||||
|
enc = g_getenv ("GST_SUBTITLE_ENCODING");
|
||||||
|
if (enc == NULL || *enc == '\0') {
|
||||||
|
/* if local encoding is UTF-8 and no encoding specified
|
||||||
|
* via the environment variable, assume ISO-8859-15 */
|
||||||
|
if (g_get_charset (&enc)) {
|
||||||
|
enc = "ISO-8859-15";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
converted_str = gst_convert_to_utf8 (str, 128, enc, &tmp, &err);
|
||||||
|
if (converted_str == NULL) {
|
||||||
|
GST_DEBUG ("Charset conversion failed: %s", err->message);
|
||||||
|
g_error_free (err);
|
||||||
g_free (str);
|
g_free (str);
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
g_free (str);
|
||||||
|
str = converted_str;
|
||||||
}
|
}
|
||||||
g_free (str);
|
|
||||||
|
|
||||||
str = converted_str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
format = gst_sub_parse_data_format_autodetect (str);
|
format = gst_sub_parse_data_format_autodetect (str);
|
||||||
|
|
Loading…
Reference in a new issue