resindvd: handle non-utf8 dvd disc titles better
authorTim-Philipp Müller <tim@centricular.net>
Mon, 7 Jan 2013 10:37:53 +0000 (10:37 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Mon, 7 Jan 2013 10:37:53 +0000 (10:37 +0000)
Maybe something based on the code in bug #688367
and the language encodings would work even better
though (now it will try things based on the locale).

https://bugzilla.gnome.org/show_bug.cgi?id=690097

ext/resindvd/Makefile.am
ext/resindvd/resindvdsrc.c
ext/resindvd/resindvdsrc.h

index bc51f9b..1dceac6 100644 (file)
@@ -18,6 +18,7 @@ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
 $(GST_CFLAGS) $(DVDNAV_CFLAGS)
 libgstresindvd_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
 -lgstvideo-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) \
+-lgsttag-$(GST_API_VERSION) \
 $(GST_BASE_LIBS) $(GST_LIBS) $(GMODULE_NO_EXPORT_LIBS) $(DVDNAV_LIBS)
 libgstresindvd_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstresindvd_la_LIBTOOLFLAGS = --tag=disable-static
index f13418a..cb43e2a 100644 (file)
@@ -30,6 +30,7 @@
 #include <gst/gst-i18n-plugin.h>
 #include <gst/video/video.h>
 #include <gst/video/navigation.h>
+#include <gst/tag/tag.h>
 
 #include "resindvdsrc.h"
 
@@ -351,6 +352,7 @@ rsn_dvdsrc_start (GstBaseSrc * bsrc)
 {
   resinDvdSrc *src = RESINDVDSRC (bsrc);
   const gchar *const *langs, *const *cur;
+  const char *disc_name;
   gchar lang[8];
 
   g_mutex_lock (src->dvd_lock);
@@ -397,7 +399,13 @@ rsn_dvdsrc_start (GstBaseSrc * bsrc)
     }
   }
 
-  dvdnav_get_title_string (src->dvdnav, &src->disc_name);
+  /* Get disc name and convert to UTF-8 */
+  g_free (src->disc_name);
+  dvdnav_get_title_string (src->dvdnav, &disc_name);
+  if (disc_name != NULL && *disc_name != '\0')
+    src->disc_name = gst_tag_freeform_string_to_utf8 (disc_name, -1, NULL);
+  else
+    src->disc_name = NULL;
 
   src->first_seek = TRUE;
   src->running = TRUE;
@@ -576,6 +584,7 @@ rsn_dvdsrc_stop (GstBaseSrc * bsrc)
     src->highlight_event = NULL;
   }
 
+  g_free (src->disc_name);
   src->disc_name = NULL;
 
   if (src->dvdnav) {
index e53fb2b..5804c07 100644 (file)
@@ -58,7 +58,7 @@ struct _resinDvdSrc
   gchar                *device;
   dvdnav_t     *dvdnav;
 
-  const char    *disc_name;
+  gchar     *disc_name;
 
   /* dvd_reader instance is used to load and cache VTS/VMG ifo info */
   dvd_reader_t  *dvdread;