summaryrefslogtreecommitdiff
path: root/ext/pango/gstclockoverlay.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pango/gstclockoverlay.c')
-rw-r--r--ext/pango/gstclockoverlay.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/ext/pango/gstclockoverlay.c b/ext/pango/gstclockoverlay.c
index ba8e625e6..ea2645b45 100644
--- a/ext/pango/gstclockoverlay.c
+++ b/ext/pango/gstclockoverlay.c
@@ -80,7 +80,11 @@ gst_clock_overlay_render_time (GstClockOverlay * overlay)
#endif
struct tm *t;
time_t now;
+#ifdef G_OS_WIN32
+ gunichar2 buf[256];
+#else
gchar buf[256];
+#endif
now = time (NULL);
@@ -97,9 +101,17 @@ gst_clock_overlay_render_time (GstClockOverlay * overlay)
if (t == NULL)
return g_strdup ("--:--:--");
+#ifdef G_OS_WIN32
+ if (wcsftime (buf, sizeof (buf), (wchar_t *) overlay->wformat, t) == 0)
+ return g_strdup ("");
+
+ return g_utf16_to_utf8 (buf, -1, NULL, NULL, NULL);
+#else
if (strftime (buf, sizeof (buf), overlay->format, t) == 0)
return g_strdup ("");
+
return g_strdup (buf);
+#endif
}
/* Called with lock held */
@@ -112,7 +124,10 @@ gst_clock_overlay_get_text (GstBaseTextOverlay * overlay,
txt = g_strdup (overlay->default_text);
+ GST_OBJECT_LOCK (overlay);
time_str = gst_clock_overlay_render_time (clock_overlay);
+ GST_OBJECT_UNLOCK (overlay);
+
if (txt != NULL && *txt != '\0') {
ret = g_strdup_printf ("%s %s", txt, time_str);
} else {
@@ -170,6 +185,8 @@ gst_clock_overlay_finalize (GObject * object)
g_free (overlay->text);
overlay->format = NULL;
+ g_free (overlay->wformat);
+
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -188,6 +205,11 @@ gst_clock_overlay_init (GstClockOverlay * overlay)
overlay->format = g_strdup (DEFAULT_PROP_TIMEFORMAT);
+#ifdef G_OS_WIN32
+ overlay->wformat =
+ g_utf8_to_utf16 (DEFAULT_PROP_TIMEFORMAT, -1, NULL, NULL, NULL);
+#endif
+
context = textoverlay->pango_context;
pango_context_set_language (context, pango_language_from_string ("en_US"));
@@ -215,6 +237,13 @@ gst_clock_overlay_set_property (GObject * object, guint prop_id,
case PROP_TIMEFORMAT:
g_free (overlay->format);
overlay->format = g_value_dup_string (value);
+ if (!overlay->format)
+ overlay->format = g_strdup (DEFAULT_PROP_TIMEFORMAT);
+#ifdef G_OS_WIN32
+ g_free (overlay->wformat);
+ overlay->wformat =
+ g_utf8_to_utf16 (overlay->format, -1, NULL, NULL, NULL);
+#endif
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);