From 78c7c16e9e932ed9b7a51ecc60d5c777381797dc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 17 Jul 2013 14:27:57 +0200 Subject: [PATCH] goom: Fix event handling and negotiate as soon as possible --- gst/goom/gstgoom.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/gst/goom/gstgoom.c b/gst/goom/gstgoom.c index 48864c7..02ca396 100644 --- a/gst/goom/gstgoom.c +++ b/gst/goom/gstgoom.c @@ -111,6 +111,8 @@ static gboolean gst_goom_sink_event (GstPad * pad, GstObject * parent, static gboolean gst_goom_src_query (GstPad * pad, GstObject * parent, GstQuery * query); +static gboolean gst_goom_src_negotiate (GstGoom * goom); + #define gst_goom_parent_class parent_class G_DEFINE_TYPE (GstGoom, gst_goom, GST_TYPE_ELEMENT); @@ -207,7 +209,7 @@ gst_goom_sink_setcaps (GstGoom * goom, GstCaps * caps) goom->bps = goom->channels * sizeof (gint16); - return TRUE; + return gst_goom_src_negotiate (goom); } static gboolean @@ -360,11 +362,11 @@ gst_goom_src_event (GstPad * pad, GstObject * parent, GstEvent * event) goom->earliest_time = timestamp + diff; GST_OBJECT_UNLOCK (goom); - res = gst_pad_push_event (goom->sinkpad, event); + res = gst_pad_event_default (pad, parent, event); break; } default: - res = gst_pad_push_event (goom->sinkpad, event); + res = gst_pad_event_default (pad, parent, event); break; } @@ -389,12 +391,9 @@ gst_goom_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) gst_event_unref (event); break; } - case GST_EVENT_FLUSH_START: - res = gst_pad_push_event (goom->srcpad, event); - break; case GST_EVENT_FLUSH_STOP: gst_goom_reset (goom); - res = gst_pad_push_event (goom->srcpad, event); + res = gst_pad_event_default (pad, parent, event); break; case GST_EVENT_SEGMENT: { @@ -403,11 +402,11 @@ gst_goom_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) * we can do QoS */ gst_event_copy_segment (event, &goom->segment); - res = gst_pad_push_event (goom->srcpad, event); + res = gst_pad_event_default (pad, parent, event); break; } default: - res = gst_pad_push_event (goom->srcpad, event); + res = gst_pad_event_default (pad, parent, event); break; } @@ -476,12 +475,7 @@ gst_goom_src_query (GstPad * pad, GstObject * parent, GstQuery * query) static GstFlowReturn ensure_negotiated (GstGoom * goom) { - gboolean reconfigure; - - reconfigure = gst_pad_check_reconfigure (goom->srcpad); - - /* we don't know an output format yet, pick one */ - if (reconfigure || !gst_pad_has_current_caps (goom->srcpad)) { + if (gst_pad_check_reconfigure (goom->srcpad)) { if (!gst_goom_src_negotiate (goom)) return GST_FLOW_NOT_NEGOTIATED; } -- 2.7.4