mpegts: atsc: add encoding conversion for UTF-16 ETT strings
authorThiago Santos <ts.santos@sisa.samsung.com>
Mon, 19 May 2014 19:20:44 +0000 (16:20 -0300)
committerEdward Hervey <bilboed@bilboed.com>
Thu, 29 May 2014 08:37:59 +0000 (10:37 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=730435

gst-libs/gst/mpegts/gst-atsc-section.c

index a7118c15abf474de7dd29c92b752617ae2047b83..9b5a55e05e2fd60de75939dc9973511bcec163b1 100644 (file)
@@ -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 *