mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
API: GstAggregatorPad.skip_buffer virtual method
Allows subclasses to prevent buffers from being queued. https://bugzilla.gnome.org/show_bug.cgi?id=781928
This commit is contained in:
parent
ac7434088e
commit
9f69034d41
2 changed files with 21 additions and 5 deletions
|
@ -2426,6 +2426,7 @@ gst_aggregator_pad_chain_internal (GstAggregator * self,
|
||||||
{
|
{
|
||||||
GstFlowReturn flow_return;
|
GstFlowReturn flow_return;
|
||||||
GstClockTime buf_pts;
|
GstClockTime buf_pts;
|
||||||
|
GstAggregatorPadClass *klass = GST_AGGREGATOR_PAD_GET_CLASS (aggpad);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (aggpad, "Start chaining a buffer %" GST_PTR_FORMAT, buffer);
|
GST_DEBUG_OBJECT (aggpad, "Start chaining a buffer %" GST_PTR_FORMAT, buffer);
|
||||||
|
|
||||||
|
@ -2434,6 +2435,9 @@ gst_aggregator_pad_chain_internal (GstAggregator * self,
|
||||||
if (flow_return != GST_FLOW_OK)
|
if (flow_return != GST_FLOW_OK)
|
||||||
goto flushing;
|
goto flushing;
|
||||||
|
|
||||||
|
if (klass->skip_buffer && klass->skip_buffer (aggpad, self, buffer))
|
||||||
|
goto skipped;
|
||||||
|
|
||||||
PAD_UNLOCK (aggpad);
|
PAD_UNLOCK (aggpad);
|
||||||
|
|
||||||
buf_pts = GST_BUFFER_PTS (buffer);
|
buf_pts = GST_BUFFER_PTS (buffer);
|
||||||
|
@ -2537,6 +2541,14 @@ flushing:
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
|
|
||||||
return flow_return;
|
return flow_return;
|
||||||
|
|
||||||
|
skipped:
|
||||||
|
PAD_UNLOCK (aggpad);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (aggpad, "Skipped buffer %" GST_PTR_FORMAT, buffer);
|
||||||
|
gst_buffer_unref (buffer);
|
||||||
|
|
||||||
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
|
|
|
@ -74,17 +74,21 @@ struct _GstAggregatorPad
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstAggregatorPadClass:
|
* GstAggregatorPadClass:
|
||||||
* @flush: Optional
|
* @flush: Optional
|
||||||
* Called when the pad has received a flush stop, this is the place
|
* Called when the pad has received a flush stop, this is the place
|
||||||
* to flush any information specific to the pad, it allows for individual
|
* to flush any information specific to the pad, it allows for individual
|
||||||
* pads to be flushed while others might not be.
|
* pads to be flushed while others might not be.
|
||||||
|
* @skip_buffer: Optional
|
||||||
|
* Called before input buffers are queued in the pad, return %TRUE
|
||||||
|
* if the buffer should be skipped.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
struct _GstAggregatorPadClass
|
struct _GstAggregatorPadClass
|
||||||
{
|
{
|
||||||
GstPadClass parent_class;
|
GstPadClass parent_class;
|
||||||
|
|
||||||
GstFlowReturn (*flush) (GstAggregatorPad * aggpad, GstAggregator * aggregator);
|
GstFlowReturn (*flush) (GstAggregatorPad * aggpad, GstAggregator * aggregator);
|
||||||
|
gboolean (*skip_buffer) (GstAggregatorPad * aggpad, GstAggregator * aggregator, GstBuffer * buffer);
|
||||||
|
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
gpointer _gst_reserved[GST_PADDING_LARGE];
|
gpointer _gst_reserved[GST_PADDING_LARGE];
|
||||||
|
|
Loading…
Reference in a new issue