summaryrefslogtreecommitdiff
path: root/gst/goom
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2013-07-17 14:27:57 +0200
committerSebastian Dröge <slomo@circular-chaos.org>2013-07-17 14:28:43 +0200
commit78c7c16e9e932ed9b7a51ecc60d5c777381797dc (patch)
treec5056d59f9a1bf8454e3e17470ef110c1e480321 /gst/goom
parentfbafca49f818666327bf43265de6b03af873955a (diff)
goom: Fix event handling and negotiate as soon as possible
Diffstat (limited to 'gst/goom')
-rw-r--r--gst/goom/gstgoom.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/gst/goom/gstgoom.c b/gst/goom/gstgoom.c
index 48864c77e..02ca396bd 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;
}