gst-plugins-base: textoverlay: use a class wide mutex to work around pango reentrance issues
Stefan Kost
ensonic at kemper.freedesktop.org
Mon Mar 14 02:18:35 PDT 2011
Module: gst-plugins-base
Branch: master
Commit: 9ac74c59db5b2cb7090b9e18fda1894c8511e881
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=9ac74c59db5b2cb7090b9e18fda1894c8511e881
Author: Stefan Kost <ensonic at users.sf.net>
Date: Mon Mar 14 11:14:04 2011 +0200
textoverlay: use a class wide mutex to work around pango reentrance issues
Pango is not reentrant. Use a class wide mutex to protect pange use in
gst_text_overlay_render_pangocairo(). This works reliable in contrast to the
hack in my previous commit.
Fixes Bug #412678
---
ext/pango/gsttextoverlay.c | 6 ++++++
ext/pango/gsttextoverlay.h | 1 +
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/ext/pango/gsttextoverlay.c b/ext/pango/gsttextoverlay.c
index 54a260f..ca38dc1 100644
--- a/ext/pango/gsttextoverlay.c
+++ b/ext/pango/gsttextoverlay.c
@@ -375,6 +375,8 @@ gst_text_overlay_class_init (GstTextOverlayClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_text_overlay_change_state);
+ klass->pango_lock = g_mutex_new ();
+
klass->get_text = gst_text_overlay_get_text;
fontmap = pango_cairo_font_map_get_default ();
klass->pango_context =
@@ -1235,6 +1237,8 @@ gst_text_overlay_render_pangocairo (GstTextOverlay * overlay,
double scalef = 1.0;
double a, r, g, b;
+ g_mutex_lock (GST_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+
if (overlay->auto_adjust_size) {
/* 640 pixel is default */
scalef = (double) (overlay->width) / DEFAULT_SCALE_BASIS;
@@ -1298,6 +1302,8 @@ gst_text_overlay_render_pangocairo (GstTextOverlay * overlay,
cairo_matrix_init_scale (&cairo_matrix, scalef, scalef);
}
+ g_mutex_unlock (GST_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+
/* reallocate surface */
overlay->text_image = g_realloc (overlay->text_image, 4 * width * height);
diff --git a/ext/pango/gsttextoverlay.h b/ext/pango/gsttextoverlay.h
index 10dd947..d230121 100644
--- a/ext/pango/gsttextoverlay.h
+++ b/ext/pango/gsttextoverlay.h
@@ -155,6 +155,7 @@ struct _GstTextOverlayClass {
GstElementClass parent_class;
PangoContext *pango_context;
+ GMutex *pango_lock;
gchar * (*get_text) (GstTextOverlay *overlay, GstBuffer *video_frame);
};
More information about the gstreamer-commits
mailing list