mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
aggregator: Don't take flush lock from output thread
Instead just take it in the chain function. https://bugzilla.gnome.org/show_bug.cgi?id=784911
This commit is contained in:
parent
8b60b25917
commit
3d0dad59a0
1 changed files with 17 additions and 7 deletions
|
@ -2467,6 +2467,12 @@ apply_buffer (GstAggregatorPad * aggpad, GstBuffer * buffer, gboolean head)
|
||||||
update_time_level (aggpad, head);
|
update_time_level (aggpad, head);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Can be called either from the sinkpad's chain function or from the srcpad's
|
||||||
|
* thread in the case of a buffer synthetized from a GAP event.
|
||||||
|
* Because of this second case, FLUSH_LOCK can't be used here.
|
||||||
|
*/
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
gst_aggregator_pad_chain_internal (GstAggregator * self,
|
gst_aggregator_pad_chain_internal (GstAggregator * self,
|
||||||
GstAggregatorPad * aggpad, GstBuffer * buffer, gboolean head)
|
GstAggregatorPad * aggpad, GstBuffer * buffer, gboolean head)
|
||||||
|
@ -2476,8 +2482,6 @@ gst_aggregator_pad_chain_internal (GstAggregator * self,
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (aggpad, "Start chaining a buffer %" GST_PTR_FORMAT, buffer);
|
GST_DEBUG_OBJECT (aggpad, "Start chaining a buffer %" GST_PTR_FORMAT, buffer);
|
||||||
|
|
||||||
PAD_FLUSH_LOCK (aggpad);
|
|
||||||
|
|
||||||
PAD_LOCK (aggpad);
|
PAD_LOCK (aggpad);
|
||||||
flow_return = aggpad->priv->flow_return;
|
flow_return = aggpad->priv->flow_return;
|
||||||
if (flow_return != GST_FLOW_OK)
|
if (flow_return != GST_FLOW_OK)
|
||||||
|
@ -2573,15 +2577,12 @@ gst_aggregator_pad_chain_internal (GstAggregator * self,
|
||||||
GST_OBJECT_UNLOCK (self);
|
GST_OBJECT_UNLOCK (self);
|
||||||
SRC_UNLOCK (self);
|
SRC_UNLOCK (self);
|
||||||
|
|
||||||
PAD_FLUSH_UNLOCK (aggpad);
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (aggpad, "Done chaining");
|
GST_DEBUG_OBJECT (aggpad, "Done chaining");
|
||||||
|
|
||||||
return flow_return;
|
return flow_return;
|
||||||
|
|
||||||
flushing:
|
flushing:
|
||||||
PAD_UNLOCK (aggpad);
|
PAD_UNLOCK (aggpad);
|
||||||
PAD_FLUSH_UNLOCK (aggpad);
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (aggpad, "Pad is %s, dropping buffer",
|
GST_DEBUG_OBJECT (aggpad, "Pad is %s, dropping buffer",
|
||||||
gst_flow_get_name (flow_return));
|
gst_flow_get_name (flow_return));
|
||||||
|
@ -2594,8 +2595,17 @@ flushing:
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
gst_aggregator_pad_chain (GstPad * pad, GstObject * object, GstBuffer * buffer)
|
gst_aggregator_pad_chain (GstPad * pad, GstObject * object, GstBuffer * buffer)
|
||||||
{
|
{
|
||||||
return gst_aggregator_pad_chain_internal (GST_AGGREGATOR_CAST (object),
|
GstFlowReturn ret;
|
||||||
GST_AGGREGATOR_PAD_CAST (pad), buffer, TRUE);
|
GstAggregatorPad *aggpad = GST_AGGREGATOR_PAD (pad);
|
||||||
|
|
||||||
|
PAD_FLUSH_LOCK (aggpad);
|
||||||
|
|
||||||
|
ret = gst_aggregator_pad_chain_internal (GST_AGGREGATOR_CAST (object),
|
||||||
|
aggpad, buffer, TRUE);
|
||||||
|
|
||||||
|
PAD_FLUSH_UNLOCK (aggpad);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
Loading…
Reference in a new issue