textrender: Don't pass plaintext as pango markup to Pango

Otherwise e.g. & in the text will cause Pango to complain about invalid
markup and render the text incorrectly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3445>
This commit is contained in:
Sebastian Dröge 2022-11-21 18:47:50 +02:00
parent 5b1a1c41b6
commit 7af129b755
2 changed files with 22 additions and 1 deletions

View file

@ -531,7 +531,10 @@ gst_text_render_chain (GstPad * pad, GstObject * parent, GstBuffer * inbuf)
/* render text */
GST_DEBUG ("rendering '%*s'", (gint) size, data);
pango_layout_set_markup (render->layout, (gchar *) data, size);
if (render->have_pango_markup)
pango_layout_set_markup (render->layout, (gchar *) data, size);
else
pango_layout_set_text (render->layout, (gchar *) data, size);
gst_text_render_render_pangocairo (render);
gst_buffer_unmap (inbuf, &map);
@ -630,6 +633,23 @@ gst_text_render_event (GstPad * pad, GstObject * parent, GstEvent * event)
}
break;
}
case GST_EVENT_CAPS:
{
GstCaps *caps;
GstStructure *structure;
const gchar *format;
gst_event_parse_caps (event, &caps);
structure = gst_caps_get_structure (caps, 0);
format = gst_structure_get_string (structure, "format");
render->have_pango_markup = (strcmp (format, "pango-markup") == 0);
gst_event_unref (event);
ret = TRUE;
break;
}
default:
ret = gst_pad_event_default (pad, parent, event);
break;

View file

@ -93,6 +93,7 @@ struct _GstTextRender {
gint ypad;
GstEvent *segment_event;
gboolean have_pango_markup;
};
struct _GstTextRenderClass {