Commit 9ac74c59 authored by Stefan Kost's avatar Stefan Kost
Browse files

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
parent 3294ecda
......@@ -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);
......
......@@ -155,6 +155,7 @@ struct _GstTextOverlayClass {
GstElementClass parent_class;
PangoContext *pango_context;
GMutex *pango_lock;
gchar * (*get_text) (GstTextOverlay *overlay, GstBuffer *video_frame);
};
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment