mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-20 21:16:24 +00:00
aggregator: Use the event_full function for GstAggregatorPads
Allowing us to tell GstPad why we are failing an event, which might be because we are 'flushing' even if the sinkpad is not in flush state at that point.
This commit is contained in:
parent
885c95c3ed
commit
5fefb1b866
1 changed files with 26 additions and 9 deletions
|
@ -2310,10 +2310,11 @@ flushing:
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
static GstFlowReturn
|
||||
gst_aggregator_pad_event_func (GstPad * pad, GstObject * parent,
|
||||
GstEvent * event)
|
||||
{
|
||||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
GstAggregator *self = GST_AGGREGATOR (parent);
|
||||
GstAggregatorPad *aggpad = GST_AGGREGATOR_PAD (pad);
|
||||
GstAggregatorClass *klass = GST_AGGREGATOR_GET_CLASS (parent);
|
||||
|
@ -2324,8 +2325,10 @@ gst_aggregator_pad_event_func (GstPad * pad, GstObject * parent,
|
|||
PAD_LOCK (aggpad);
|
||||
|
||||
if (aggpad->priv->flow_return != GST_FLOW_OK
|
||||
&& GST_EVENT_TYPE (event) != GST_EVENT_FLUSH_STOP)
|
||||
&& GST_EVENT_TYPE (event) != GST_EVENT_FLUSH_STOP) {
|
||||
ret = aggpad->priv->flow_return;
|
||||
goto flushing;
|
||||
}
|
||||
|
||||
if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
|
||||
GST_OBJECT_LOCK (aggpad);
|
||||
|
@ -2347,10 +2350,22 @@ gst_aggregator_pad_event_func (GstPad * pad, GstObject * parent,
|
|||
SRC_UNLOCK (self);
|
||||
}
|
||||
|
||||
if (event)
|
||||
return klass->sink_event (self, aggpad, event);
|
||||
else
|
||||
return TRUE;
|
||||
if (event) {
|
||||
if (!klass->sink_event (self, aggpad, event)) {
|
||||
/* Copied from GstPad to convert boolean to a GstFlowReturn in
|
||||
* the event handling func */
|
||||
switch (GST_EVENT_TYPE (event)) {
|
||||
case GST_EVENT_CAPS:
|
||||
ret = GST_FLOW_NOT_NEGOTIATED;
|
||||
break;
|
||||
default:
|
||||
ret = GST_FLOW_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
flushing:
|
||||
GST_DEBUG_OBJECT (aggpad, "Pad is %s, dropping event",
|
||||
|
@ -2360,7 +2375,8 @@ flushing:
|
|||
if (GST_EVENT_IS_STICKY (event))
|
||||
gst_pad_store_sticky_event (pad, event);
|
||||
gst_event_unref (event);
|
||||
return FALSE;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -2397,8 +2413,9 @@ gst_aggregator_pad_constructed (GObject * object)
|
|||
|
||||
gst_pad_set_chain_function (pad,
|
||||
GST_DEBUG_FUNCPTR (gst_aggregator_pad_chain));
|
||||
gst_pad_set_event_function (pad,
|
||||
GST_DEBUG_FUNCPTR (gst_aggregator_pad_event_func));
|
||||
gst_pad_set_event_full_function_full (pad,
|
||||
GST_DEBUG_FUNCPTR (gst_aggregator_pad_event_func),
|
||||
NULL, NULL);
|
||||
gst_pad_set_query_function (pad,
|
||||
GST_DEBUG_FUNCPTR (gst_aggregator_pad_query_func));
|
||||
gst_pad_set_activatemode_function (pad,
|
||||
|
|
Loading…
Reference in a new issue