From 0c0379e8f03bcf9145fce3fe622d8bc71de8f045 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Mon, 19 May 2014 16:20:44 -0300 Subject: [PATCH] mpegts: atsc: add encoding conversion for UTF-16 ETT strings https://bugzilla.gnome.org/show_bug.cgi?id=730435 --- gst-libs/gst/mpegts/gst-atsc-section.c | 32 +++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/gst-libs/gst/mpegts/gst-atsc-section.c b/gst-libs/gst/mpegts/gst-atsc-section.c index a7118c15ab..9b5a55e05e 100644 --- a/gst-libs/gst/mpegts/gst-atsc-section.c +++ b/gst-libs/gst/mpegts/gst-atsc-section.c @@ -418,16 +418,42 @@ _gst_mpegts_atsc_string_segment_free (GstMpegTsAtscStringSegment * seg) static void _gst_mpegts_atsc_string_segment_decode_string (GstMpegTsAtscStringSegment * seg) { + const gchar *from_encoding; + g_return_if_fail (seg->cached_string == NULL); if (seg->compression_type != 0) { GST_FIXME ("Compressed strings not yet supported"); return; } - /* FIXME check encoding */ - seg->cached_string = - g_strndup ((gchar *) seg->compressed_data, seg->compressed_data_size); + /* FIXME add more encodings */ + switch (seg->mode) { + case 0x3F: + from_encoding = "UTF-16BE"; + break; + default: + from_encoding = NULL; + break; + } + + if (from_encoding != NULL) { + GError *err = NULL; + + seg->cached_string = + g_convert ((gchar *) seg->compressed_data, + (gssize) seg->compressed_data_size, "UTF-8", from_encoding, NULL, NULL, + &err); + + if (err) { + GST_WARNING ("Failed to convert input string from codeset %s", + from_encoding); + g_error_free (err); + } + } else { + seg->cached_string = + g_strndup ((gchar *) seg->compressed_data, seg->compressed_data_size); + } } const gchar *