#ifndef __GST_AGGREGATOR_H__
#define __GST_AGGREGATOR_H__
-#ifndef GST_USE_UNSTABLE_API
-#warning "The Base library from gst-plugins-bad is unstable API and may change in future."
-#warning "You can define GST_USE_UNSTABLE_API to avoid this warning."
-#endif
-
#include <gst/gst.h>
+#include <gst/base/base-prelude.h>
G_BEGIN_DECLS
* @segment: last segment received.
*
* The implementation the GstPad to use with #GstAggregator
+ *
+ * Since: 1.14
*/
struct _GstAggregatorPad
{
GstPad parent;
+ /*< public >*/
/* Protected by the OBJECT_LOCK */
GstSegment segment;
- /* < Private > */
+ /* < private > */
GstAggregatorPadPrivate * priv;
gpointer _gst_reserved[GST_PADDING];
/**
* GstAggregatorPadClass:
- * @flush: Optional
- * 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
- * pads to be flushed while others might not be.
+ * @flush: Optional
+ * 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
+ * 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.
*
+ * Since: 1.14
*/
struct _GstAggregatorPadClass
{
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 >*/
gpointer _gst_reserved[GST_PADDING_LARGE];
};
-GST_EXPORT
+GST_BASE_API
GType gst_aggregator_pad_get_type (void);
/****************************
* GstAggregatorPad methods *
***************************/
-GST_EXPORT
-GstBuffer * gst_aggregator_pad_steal_buffer (GstAggregatorPad * pad);
+GST_BASE_API
+GstBuffer * gst_aggregator_pad_pop_buffer (GstAggregatorPad * pad);
-GST_EXPORT
-GstBuffer * gst_aggregator_pad_get_buffer (GstAggregatorPad * pad);
+GST_BASE_API
+GstBuffer * gst_aggregator_pad_peek_buffer (GstAggregatorPad * pad);
-GST_EXPORT
+GST_BASE_API
gboolean gst_aggregator_pad_drop_buffer (GstAggregatorPad * pad);
-GST_EXPORT
+GST_BASE_API
+gboolean gst_aggregator_pad_has_buffer (GstAggregatorPad * pad);
+
+GST_BASE_API
gboolean gst_aggregator_pad_is_eos (GstAggregatorPad * pad);
/*********************
/**
* GstAggregator:
* @srcpad: the aggregator's source pad
- * @segment: the output segment
*
* Aggregator base class object structure.
+ *
+ * Since: 1.14
*/
struct _GstAggregator
{
GstElement parent;
+ /*< public >*/
GstPad * srcpad;
- /* Only access with the object lock held */
- GstSegment segment;
-
/*< private >*/
GstAggregatorPrivate * priv;
* clipping of input buffer. This function takes ownership of
* buf and should output a buffer or return NULL in
* if the buffer should be dropped.
+ * @finish_buffer: Optional.
+ * Called when a subclass calls gst_aggregator_finish_buffer()
+ * from their aggregate function to push out a buffer.
+ * Subclasses can override this to modify or decorate buffers
+ * before they get pushed out. This function takes ownership
+ * of the buffer passed. Subclasses that override this method
+ * should always chain up to the parent class virtual method.
* @sink_event: Optional.
* Called when an event is received on a sink pad, the subclass
* should always chain up.
* based aggregation to occur. Defaults to returning
* GST_CLOCK_TIME_NONE causing the element to wait for buffers
* on all sink pads before aggregating.
+ * @create_new_pad: Optional.
+ * Called when a new pad needs to be created. Allows subclass that
+ * don't have a single sink pad template to provide a pad based
+ * on the provided information.
* @update_src_caps: Lets subclasses update the #GstCaps representing
* the src pad caps before usage. The result should end up
* in @ret. Return %GST_AGGREGATOR_FLOW_NEED_DATA to indicate that the
* Setup the allocation parameters for allocating output
* buffers. The passed in query contains the result of the
* downstream allocation query.
+ * @propose_allocation: Optional.
+ * Allows the subclass to handle the allocation query from upstream.
*
* The aggregator base class will handle in a thread-safe way all manners of
* concurrent flushes, seeks, pad additions and removals, leaving to the
*
* Basically, a simple implementation will override @aggregate, and call
* _finish_buffer from inside that function.
+ *
+ * Since: 1.14
*/
struct _GstAggregatorClass {
GstElementClass parent_class;
GstAggregatorPad * aggregator_pad,
GstBuffer * buf);
+ GstFlowReturn (*finish_buffer) (GstAggregator * aggregator,
+ GstBuffer * buffer);
+
/* sinkpads virtual methods */
gboolean (*sink_event) (GstAggregator * aggregator,
GstAggregatorPad * aggregator_pad,
GstPadTemplate * templ,
const gchar * req_name,
const GstCaps * caps);
+
+ /**
+ * GstAggregatorClass::update_src_caps:
+ * @ret: (out) (allow-none):
+ */
GstFlowReturn (*update_src_caps) (GstAggregator * self,
GstCaps * caps,
GstCaps ** ret);
* GstAggregator methods *
************************/
-GST_EXPORT
-GstFlowReturn gst_aggregator_finish_buffer (GstAggregator * self,
+GST_BASE_API
+GstFlowReturn gst_aggregator_finish_buffer (GstAggregator * aggregator,
GstBuffer * buffer);
-GST_EXPORT
+GST_BASE_API
void gst_aggregator_set_src_caps (GstAggregator * self,
GstCaps * caps);
-GST_EXPORT
+GST_BASE_API
void gst_aggregator_set_latency (GstAggregator * self,
GstClockTime min_latency,
GstClockTime max_latency);
-GST_EXPORT
+GST_BASE_API
GType gst_aggregator_get_type(void);
-GST_EXPORT
+GST_BASE_API
GstClockTime gst_aggregator_get_latency (GstAggregator * self);
-GST_EXPORT
+GST_BASE_API
GstBufferPool * gst_aggregator_get_buffer_pool (GstAggregator * self);
-GST_EXPORT
+GST_BASE_API
void gst_aggregator_get_allocator (GstAggregator * self,
GstAllocator ** allocator,
GstAllocationParams * params);
+GST_BASE_API
+GstClockTime gst_aggregator_simple_get_next_time (GstAggregator * self);
+
+
G_END_DECLS
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAggregator, gst_object_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAggregatorPad, gst_object_unref)
+#endif
+
#endif /* __GST_AGGREGATOR_H__ */