mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 11:55:39 +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
f15a3e3657
commit
533ee7be95
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