diff --git a/girs/GstBase-1.0.gir b/girs/GstBase-1.0.gir index 889df8ad68..b93a292b13 100644 --- a/girs/GstBase-1.0.gir +++ b/girs/GstBase-1.0.gir @@ -1551,6 +1551,28 @@ control aggregating parameters for a given set of input samples. + + This method will push the provided event downstream. If needed, mandatory +events such as stream-start, caps, and segment events will be sent before +pushing the event. + +This API does not allow pushing stream-start, caps, segment and EOS events. +Specific API like gst_aggregator_set_src_caps() should be used for these. + + + + + + + The #GstAggregator + + + + the #GstEvent to push. + + + + Subclasses should call this when they have prepared the buffers they will aggregate for each of their sink pads, but diff --git a/subprojects/gstreamer/libs/gst/base/gstaggregator.c b/subprojects/gstreamer/libs/gst/base/gstaggregator.c index 88bd6d571e..606585c260 100644 --- a/subprojects/gstreamer/libs/gst/base/gstaggregator.c +++ b/subprojects/gstreamer/libs/gst/base/gstaggregator.c @@ -786,6 +786,36 @@ gst_aggregator_finish_buffer_list (GstAggregator * aggregator, return klass->finish_buffer_list (aggregator, bufferlist); } +/** + * gst_aggregator_push_src_event: + * @aggregator: The #GstAggregator + * @event: (transfer full): the #GstEvent to push. + * + * This method will push the provided event downstream. If needed, mandatory + * events such as stream-start, caps, and segment events will be sent before + * pushing the event. + * + * This API does not allow pushing stream-start, caps, segment and EOS events. + * Specific API like gst_aggregator_set_src_caps() should be used for these. + * + * Since: 1.26 + */ +gboolean +gst_aggregator_push_src_event (GstAggregator * aggregator, GstEvent * event) +{ + g_return_val_if_fail (GST_EVENT_IS_DOWNSTREAM (event), FALSE); + g_return_val_if_fail (GST_EVENT_TYPE (event) != GST_EVENT_STREAM_START && + GST_EVENT_TYPE (event) != GST_EVENT_CAPS && + GST_EVENT_TYPE (event) != GST_EVENT_SEGMENT && + GST_EVENT_TYPE (event) != GST_EVENT_EOS, FALSE); + + if (GST_EVENT_IS_SERIALIZED (event)) { + gst_aggregator_push_mandatory_events (aggregator, FALSE); + } + + return gst_pad_push_event (aggregator->srcpad, event); +} + static void gst_aggregator_push_eos (GstAggregator * self) { diff --git a/subprojects/gstreamer/libs/gst/base/gstaggregator.h b/subprojects/gstreamer/libs/gst/base/gstaggregator.h index bbac9e4c04..7c394a711e 100644 --- a/subprojects/gstreamer/libs/gst/base/gstaggregator.h +++ b/subprojects/gstreamer/libs/gst/base/gstaggregator.h @@ -383,6 +383,10 @@ GST_BASE_API GstFlowReturn gst_aggregator_finish_buffer_list (GstAggregator * aggregator, GstBufferList * bufferlist); +GST_BASE_API +gboolean gst_aggregator_push_src_event (GstAggregator * aggregator, + GstEvent * event); + GST_BASE_API void gst_aggregator_set_src_caps (GstAggregator * self, GstCaps * caps);