summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2012-11-11 20:42:42 +0000
committerTim-Philipp Müller <tim@centricular.net>2012-11-11 20:42:42 +0000
commitc4335cf66395d2b272cbbf22eaa7703621f64ff9 (patch)
tree3e2d0d115a4653d6cc113133c05128862535ecc1
parentcf3e901996ab885d2556029564f956c9bca75a2e (diff)
cdio: use gst_tag_freeform_string_to_utf8() for CD-TEXT strings
They're probably not going to be UTF-8, but ISO-8859-1 or somesuch if they're not plain ASCII.
-rw-r--r--ext/cdio/Makefile.am2
-rw-r--r--ext/cdio/gstcdio.c24
2 files changed, 18 insertions, 8 deletions
diff --git a/ext/cdio/Makefile.am b/ext/cdio/Makefile.am
index 8ad13c3f..e4865d18 100644
--- a/ext/cdio/Makefile.am
+++ b/ext/cdio/Makefile.am
@@ -11,7 +11,7 @@ libgstcdio_la_CFLAGS = \
$(CDIO_CFLAGS)
libgstcdio_la_LIBADD = \
- $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
+ $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) -lgsttag-$(GST_API_VERSION) \
$(GST_BASE_LIBS) \
$(CDIO_LIBS)
diff --git a/ext/cdio/gstcdio.c b/ext/cdio/gstcdio.c
index 4964fd8a..e89e1055 100644
--- a/ext/cdio/gstcdio.c
+++ b/ext/cdio/gstcdio.c
@@ -23,6 +23,7 @@
#endif
#include <gst/gst.h>
+#include <gst/tag/tag.h>
static gboolean plugin_init (GstPlugin * plugin);
@@ -31,7 +32,7 @@ GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
GST_VERSION_MINOR,
cdio,
"Read audio from audio CDs",
- plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
+ plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
#include "gstcdio.h"
#include "gstcdiocddasrc.h"
@@ -44,7 +45,9 @@ void
gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags)
{
+ const gchar *vars[] = { "GST_CDTEXT_TAG_ENCODING", "GST_TAG_ENCODING", NULL };
const gchar *txt;
+ gchar *txt_utf8;
#if LIBCDIO_VERSION_NUM > 83
txt = cdtext_get_const (cdtext, field, track);
@@ -56,19 +59,26 @@ gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
return;
}
- /* FIXME: beautify strings (they might be all uppercase for example)? */
- /* FIXME: what encoding are these strings in? Let's hope ASCII or UTF-8 */
- if (!g_utf8_validate (txt, -1, NULL)) {
- GST_WARNING_OBJECT (src, "CD-TEXT string is not UTF-8! (%s)", gst_tag);
+ /* The character encoding is not specified, and there is no provision
+ * for indicating in the CD-Text data which encoding is in use.. */
+ txt_utf8 = gst_tag_freeform_string_to_utf8 (txt, -1, vars);
+
+ if (txt_utf8 == NULL) {
+ GST_WARNING_OBJECT (src, "CD-TEXT %s could not be converted to UTF-8, "
+ "try setting the GST_CDTEXT_TAG_ENCODING or GST_TAG_ENCODING "
+ "environment variable", gst_tag);
return;
}
+ /* FIXME: beautify strings (they might be all uppercase for example)? */
+
if (*p_tags == NULL)
*p_tags = gst_tag_list_new_empty ();
- gst_tag_list_add (*p_tags, GST_TAG_MERGE_REPLACE, gst_tag, txt, NULL);
+ gst_tag_list_add (*p_tags, GST_TAG_MERGE_REPLACE, gst_tag, txt_utf8, NULL);
- GST_DEBUG_OBJECT (src, "CD-TEXT: %s = %s", gst_tag, txt);
+ GST_DEBUG_OBJECT (src, "CD-TEXT: %s = %s", gst_tag, txt_utf8);
+ g_free (txt_utf8);
}
GstTagList *