From: Josep Torra Date: Fri, 11 Apr 2014 08:24:10 +0000 (+0200) Subject: textrender: push segment event after caps event X-Git-Tag: 1.19.3~511^2~4601 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=40c2d3c088c2cfc0a8d228568fc88f761550acc0;p=platform%2Fupstream%2Fgstreamer.git textrender: push segment event after caps event Fixes warning "Sticky event misordering, got 'segment' before 'caps'". --- diff --git a/ext/pango/gsttextrender.c b/ext/pango/gsttextrender.c index 853e7e3..be7df62 100644 --- a/ext/pango/gsttextrender.c +++ b/ext/pango/gsttextrender.c @@ -521,6 +521,11 @@ gst_text_render_chain (GstPad * pad, GstObject * parent, GstBuffer * inbuf) goto done; } + if (render->segment_event) { + gst_pad_push_event (render->srcpad, render->segment_event); + render->segment_event = NULL; + } + GST_DEBUG ("Allocating buffer WxH = %dx%d", render->width, render->height); outbuf = gst_buffer_new_and_alloc (render->width * render->height * 4); @@ -589,11 +594,38 @@ done: return ret; } +static gboolean +gst_text_render_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + GstTextRender *render = GST_TEXT_RENDER (parent); + gboolean ret = TRUE; + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_SEGMENT: + { + if (gst_pad_has_current_caps (render->srcpad)) { + ret = gst_pad_push_event (render->srcpad, event); + } else { + gst_event_replace (&render->segment_event, event); + gst_event_unref (event); + } + break; + } + default: + ret = gst_pad_push_event (render->srcpad, event); + break; + } + + return ret; +} + static void gst_text_render_finalize (GObject * object) { GstTextRender *render = GST_TEXT_RENDER (object); + gst_event_replace (&render->segment_event, NULL); + g_free (render->text_image); if (render->layout) @@ -613,6 +645,9 @@ gst_text_render_init (GstTextRender * render) gst_object_unref (template); gst_pad_set_chain_function (render->sinkpad, GST_DEBUG_FUNCPTR (gst_text_render_chain)); + gst_pad_set_event_function (render->sinkpad, + GST_DEBUG_FUNCPTR (gst_text_render_event)); + gst_element_add_pad (GST_ELEMENT (render), render->sinkpad); /* source */ diff --git a/ext/pango/gsttextrender.h b/ext/pango/gsttextrender.h index 66d37db..90ac089 100644 --- a/ext/pango/gsttextrender.h +++ b/ext/pango/gsttextrender.h @@ -89,6 +89,8 @@ struct _GstTextRender { gint xpad; gint ypad; + + GstEvent *segment_event; }; struct _GstTextRenderClass {