gstbasesink.h | gstbasesink.h | |||
---|---|---|---|---|
skipping to change at line 30 | skipping to change at line 30 | |||
* Boston, MA 02111-1307, USA. | * Boston, MA 02111-1307, USA. | |||
*/ | */ | |||
#ifndef __GST_BASE_SINK_H__ | #ifndef __GST_BASE_SINK_H__ | |||
#define __GST_BASE_SINK_H__ | #define __GST_BASE_SINK_H__ | |||
#include <gst/gst.h> | #include <gst/gst.h> | |||
G_BEGIN_DECLS | G_BEGIN_DECLS | |||
#define GST_TYPE_BASE_SINK (gst_base_sink_get_type()) | #define GST_TYPE_BASE_SINK (gst_base_sink_get_type()) | |||
#define GST_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GS | #define GST_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),G | |||
T_TYPE_BASE_SINK,GstBaseSink)) | ST_TYPE_BASE_SINK,GstBaseSink)) | |||
#define GST_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST | #define GST_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GS | |||
_TYPE_BASE_SINK,GstBaseSinkClass)) | T_TYPE_BASE_SINK,GstBaseSinkClass)) | |||
#define GST_BASE_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_SINK, GstBaseSinkClass)) | #define GST_BASE_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_SINK, GstBaseSinkClass)) | |||
#define GST_IS_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GS | #define GST_IS_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),G | |||
T_TYPE_BASE_SINK)) | ST_TYPE_BASE_SINK)) | |||
#define GST_IS_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST | #define GST_IS_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GS | |||
_TYPE_BASE_SINK)) | T_TYPE_BASE_SINK)) | |||
#define GST_BASE_SINK_CAST(obj) ((GstBaseSink *) (obj)) | #define GST_BASE_SINK_CAST(obj) ((GstBaseSink *) (obj)) | |||
/** | /** | |||
* GST_BASE_SINK_PAD: | * GST_BASE_SINK_PAD: | |||
* @obj: base sink instance | * @obj: base sink instance | |||
* | * | |||
* Gives the pointer to the #GstPad object of the element. | * Gives the pointer to the #GstPad object of the element. | |||
*/ | */ | |||
#define GST_BASE_SINK_PAD(obj) (GST_BASE_SINK_CAST (obj)->sinkpad) | #define GST_BASE_SINK_PAD(obj) (GST_BASE_SINK_CAST (obj)->sinkpad) | |||
typedef struct _GstBaseSink GstBaseSink; | typedef struct _GstBaseSink GstBaseSink; | |||
typedef struct _GstBaseSinkClass GstBaseSinkClass; | typedef struct _GstBaseSinkClass GstBaseSinkClass; | |||
typedef struct _GstBaseSinkPrivate GstBaseSinkPrivate; | typedef struct _GstBaseSinkPrivate GstBaseSinkPrivate; | |||
/** | /** | |||
* GstBaseSink: | * GstBaseSink: | |||
* @element: the parent element. | ||||
* | * | |||
* The opaque #GstBaseSink data structure. | * The opaque #GstBaseSink data structure. | |||
*/ | */ | |||
struct _GstBaseSink { | struct _GstBaseSink { | |||
GstElement element; | GstElement element; | |||
/*< protected >*/ | /*< protected >*/ | |||
GstPad *sinkpad; | GstPad *sinkpad; | |||
GstActivateMode pad_mode; | GstActivateMode pad_mode; | |||
/*< protected >*/ /* with LOCK */ | /*< protected >*/ /* with LOCK */ | |||
guint64 offset; | guint64 offset; | |||
gboolean can_activate_pull; | gboolean can_activate_pull; | |||
gboolean can_activate_push; | gboolean can_activate_push; | |||
/*< protected >*/ /* with PREROLL_LOCK */ | /*< protected >*/ /* with PREROLL_LOCK */ | |||
GQueue *preroll_queue; | GQueue *preroll_queue; | |||
gint preroll_queue_max_len; | gint preroll_queue_max_len; /* FIXME-0.11: the property is guin | |||
gint preroll_queued; | t */ | |||
gint buffers_queued; | gint preroll_queued; | |||
gint events_queued; | gint buffers_queued; | |||
gint events_queued; | ||||
gboolean eos; | gboolean eos; | |||
gboolean eos_queued; | gboolean eos_queued; | |||
gboolean need_preroll; | gboolean need_preroll; | |||
gboolean have_preroll; | gboolean have_preroll; | |||
gboolean playing_async; | gboolean playing_async; | |||
/*< protected >*/ /* with STREAM_LOCK */ | /*< protected >*/ /* with STREAM_LOCK */ | |||
gboolean have_newsegment; | gboolean have_newsegment; | |||
GstSegment segment; | GstSegment segment; | |||
/*< private >*/ /* with LOCK */ | /*< private >*/ /* with LOCK */ | |||
GstClockID clock_id; | GstClockID clock_id; | |||
GstClockTime end_time; | GstClockTime end_time; | |||
gboolean sync; | gboolean sync; | |||
gboolean flushing; | gboolean flushing; | |||
/*< private >*/ | /*< private >*/ | |||
union { | union { | |||
struct { | struct { | |||
/* segment used for clipping incoming buffers */ | /* segment used for clipping incoming buffers */ | |||
GstSegment *clip_segment; | GstSegment *clip_segment; | |||
/* max amount of time a buffer can be late, -1 no limit. */ | /* max amount of time a buffer can be late, -1 no limit. */ | |||
gint64 max_lateness; | gint64 max_lateness; | |||
gboolean running; | gboolean running; | |||
} ABI; | } ABI; | |||
gpointer _gst_reserved[GST_PADDING_LARGE - 1]; | gpointer _gst_reserved[GST_PADDING_LARGE - 1]; | |||
} abidata; | } abidata; | |||
GstBaseSinkPrivate *priv; | GstBaseSinkPrivate *priv; | |||
}; | }; | |||
/** | /** | |||
* GstBaseSinkClass: | * GstBaseSinkClass: | |||
skipping to change at line 123 | skipping to change at line 122 | |||
* @start: Start processing. Ideal for opening resources in the subclass | * @start: Start processing. Ideal for opening resources in the subclass | |||
* @stop: Stop processing. Subclasses should use this to close resources. | * @stop: Stop processing. Subclasses should use this to close resources. | |||
* @unlock: Unlock any pending access to the resource. Subclasses should | * @unlock: Unlock any pending access to the resource. Subclasses should | |||
* unblock any blocked function ASAP | * unblock any blocked function ASAP | |||
* @unlock_stop: Clear the previous unlock request. Subclasses should clear | * @unlock_stop: Clear the previous unlock request. Subclasses should clear | |||
* any state they set during unlock(), such as clearing command queues. | * any state they set during unlock(), such as clearing command queues. | |||
* @event: Override this to handle events arriving on the sink pad | * @event: Override this to handle events arriving on the sink pad | |||
* @preroll: Called to present the preroll buffer if desired | * @preroll: Called to present the preroll buffer if desired | |||
* @render: Called when a buffer should be presented or output, at the | * @render: Called when a buffer should be presented or output, at the | |||
* correct moment if the #GstBaseSink has been set to sync to the clock . | * correct moment if the #GstBaseSink has been set to sync to the clock . | |||
* @render_list: Same as @render but used whith buffer lists instead of | ||||
* buffers. Since: 0.10.24 | ||||
* @async_play: Subclasses should override this when they need to perform | * @async_play: Subclasses should override this when they need to perform | |||
* special processing when changing to the PLAYING state asynchronously . | * special processing when changing to the PLAYING state asynchronously . | |||
* Called with the OBJECT_LOCK held. | * Called with the OBJECT_LOCK held. | |||
* @activate_pull: Subclasses should override this when they can provide an | * @activate_pull: Subclasses should override this when they can provide an | |||
* alternate method of spawning a thread to drive the pipeline in pull mode. | * alternate method of spawning a thread to drive the pipeline in pull mode. | |||
* Should start or stop the pulling thread, depending on the value of t he | * Should start or stop the pulling thread, depending on the value of t he | |||
* "active" argument. Called after actually activating the sink pad in pull | * "active" argument. Called after actually activating the sink pad in pull | |||
* mode. The default implementation starts a task on the sink pad. | * mode. The default implementation starts a task on the sink pad. | |||
* @fixate: Only useful in pull mode, this vmethod will be called in respon se to | * @fixate: Only useful in pull mode, this vmethod will be called in respon se to | |||
* gst_pad_fixate_caps() being called on the sink pad. Implement if you have | * gst_pad_fixate_caps() being called on the sink pad. Implement if you have | |||
skipping to change at line 149 | skipping to change at line 150 | |||
struct _GstBaseSinkClass { | struct _GstBaseSinkClass { | |||
GstElementClass parent_class; | GstElementClass parent_class; | |||
/* get caps from subclass */ | /* get caps from subclass */ | |||
GstCaps* (*get_caps) (GstBaseSink *sink); | GstCaps* (*get_caps) (GstBaseSink *sink); | |||
/* notify subclass of new caps */ | /* notify subclass of new caps */ | |||
gboolean (*set_caps) (GstBaseSink *sink, GstCaps *caps); | gboolean (*set_caps) (GstBaseSink *sink, GstCaps *caps); | |||
/* allocate a new buffer with given caps */ | /* allocate a new buffer with given caps */ | |||
GstFlowReturn (*buffer_alloc) (GstBaseSink *sink, guint64 offset, guint s ize, | GstFlowReturn (*buffer_alloc) (GstBaseSink *sink, guint64 offset, guint s ize, | |||
GstCaps *caps, GstBuffer **buf); | GstCaps *caps, GstBuffer **buf); | |||
/* get the start and end times for syncing on this buffer */ | /* get the start and end times for syncing on this buffer */ | |||
void (*get_times) (GstBaseSink *sink, GstBuffer *buffer, | void (*get_times) (GstBaseSink *sink, GstBuffer *buffer, | |||
GstClockTime *start, GstClockTime *end); | GstClockTime *start, GstClockTime *end); | |||
/* start and stop processing, ideal for opening/closing the resource */ | /* start and stop processing, ideal for opening/closing the resource */ | |||
gboolean (*start) (GstBaseSink *sink); | gboolean (*start) (GstBaseSink *sink); | |||
gboolean (*stop) (GstBaseSink *sink); | gboolean (*stop) (GstBaseSink *sink); | |||
/* unlock any pending access to the resource. subclasses should unlock | /* unlock any pending access to the resource. subclasses should unlock | |||
* any function ASAP. */ | * any function ASAP. */ | |||
gboolean (*unlock) (GstBaseSink *sink); | gboolean (*unlock) (GstBaseSink *sink); | |||
/* notify subclass of event, preroll buffer or real buffer */ | /* notify subclass of event, preroll buffer or real buffer */ | |||
gboolean (*event) (GstBaseSink *sink, GstEvent *event); | gboolean (*event) (GstBaseSink *sink, GstEvent *event); | |||
GstFlowReturn (*preroll) (GstBaseSink *sink, GstBuffer *buffer); | GstFlowReturn (*preroll) (GstBaseSink *sink, GstBuffer *buffer); | |||
GstFlowReturn (*render) (GstBaseSink *sink, GstBuffer *buffer); | GstFlowReturn (*render) (GstBaseSink *sink, GstBuffer *buffer); | |||
/* ABI additions */ | /* ABI additions */ | |||
/* when an ASYNC state change to PLAYING happens */ /* with LOCK */ | /* when an ASYNC state change to PLAYING happens */ /* with LOCK */ | |||
GstStateChangeReturn (*async_play) (GstBaseSink *sink); | GstStateChangeReturn (*async_play) (GstBaseSink *sink); | |||
/* start or stop a pulling thread */ | /* start or stop a pulling thread */ | |||
gboolean (*activate_pull)(GstBaseSink *sink, gboolean active); | gboolean (*activate_pull)(GstBaseSink *sink, gboolean active); | |||
/* fixate sink caps during pull-mode negotiation */ | /* fixate sink caps during pull-mode negotiation */ | |||
void (*fixate) (GstBaseSink *sink, GstCaps *caps); | void (*fixate) (GstBaseSink *sink, GstCaps *caps); | |||
/* Clear a previously indicated unlock request not that unlocking is | /* Clear a previously indicated unlock request not that unlocking is | |||
* complete. Sub-classes should clear any command queue or indicator they | * complete. Sub-classes should clear any command queue or indicator they | |||
* set during unlock */ | * set during unlock */ | |||
gboolean (*unlock_stop) (GstBaseSink *sink); | gboolean (*unlock_stop) (GstBaseSink *sink); | |||
/* Render a BufferList */ | ||||
GstFlowReturn (*render_list) (GstBaseSink *sink, GstBufferList *buffer_l | ||||
ist); | ||||
/*< private >*/ | /*< private >*/ | |||
gpointer _gst_reserved[GST_PADDING_LARGE-4]; | gpointer _gst_reserved[GST_PADDING_LARGE-5]; | |||
}; | }; | |||
GType gst_base_sink_get_type(void); | GType gst_base_sink_get_type(void); | |||
GstFlowReturn gst_base_sink_do_preroll (GstBaseSink *sink, GstMiniO | GstFlowReturn gst_base_sink_do_preroll (GstBaseSink *sink, GstMini | |||
bject *obj); | Object *obj); | |||
GstFlowReturn gst_base_sink_wait_preroll (GstBaseSink *sink); | GstFlowReturn gst_base_sink_wait_preroll (GstBaseSink *sink); | |||
/* synchronizing against the clock */ | /* synchronizing against the clock */ | |||
void gst_base_sink_set_sync (GstBaseSink *sink, gboolean | void gst_base_sink_set_sync (GstBaseSink *sink, gboolea | |||
sync); | n sync); | |||
gboolean gst_base_sink_get_sync (GstBaseSink *sink); | gboolean gst_base_sink_get_sync (GstBaseSink *sink); | |||
/* dropping late buffers */ | /* dropping late buffers */ | |||
void gst_base_sink_set_max_lateness (GstBaseSink *sink, gint64 m | void gst_base_sink_set_max_lateness (GstBaseSink *sink, gint64 | |||
ax_lateness); | max_lateness); | |||
gint64 gst_base_sink_get_max_lateness (GstBaseSink *sink); | gint64 gst_base_sink_get_max_lateness (GstBaseSink *sink); | |||
/* performing QoS */ | /* performing QoS */ | |||
void gst_base_sink_set_qos_enabled (GstBaseSink *sink, gboolean | void gst_base_sink_set_qos_enabled (GstBaseSink *sink, gboolea | |||
enabled); | n enabled); | |||
gboolean gst_base_sink_is_qos_enabled (GstBaseSink *sink); | gboolean gst_base_sink_is_qos_enabled (GstBaseSink *sink); | |||
/* doing async state changes */ | /* doing async state changes */ | |||
void gst_base_sink_set_async_enabled (GstBaseSink *sink, gboolean | void gst_base_sink_set_async_enabled (GstBaseSink *sink, gboolea | |||
enabled); | n enabled); | |||
gboolean gst_base_sink_is_async_enabled (GstBaseSink *sink); | gboolean gst_base_sink_is_async_enabled (GstBaseSink *sink); | |||
/* tuning synchronisation */ | /* tuning synchronisation */ | |||
void gst_base_sink_set_ts_offset (GstBaseSink *sink, GstClock | void gst_base_sink_set_ts_offset (GstBaseSink *sink, GstCloc | |||
TimeDiff offset); | kTimeDiff offset); | |||
GstClockTimeDiff gst_base_sink_get_ts_offset (GstBaseSink *sink); | GstClockTimeDiff gst_base_sink_get_ts_offset (GstBaseSink *sink); | |||
/* last buffer */ | /* last buffer */ | |||
GstBuffer * gst_base_sink_get_last_buffer (GstBaseSink *sink); | GstBuffer * gst_base_sink_get_last_buffer (GstBaseSink *sink); | |||
void gst_base_sink_set_last_buffer_enabled (GstBaseSink *sink, g | ||||
boolean enabled); | ||||
gboolean gst_base_sink_is_last_buffer_enabled (GstBaseSink *sink); | ||||
/* latency */ | /* latency */ | |||
gboolean gst_base_sink_query_latency (GstBaseSink *sink, gboolean | gboolean gst_base_sink_query_latency (GstBaseSink *sink, gboolea | |||
*live, gboolean *upstream_live, | n *live, gboolean *upstream_live, | |||
GstClockTime *min_latency, | GstClockTime *min_latency, | |||
GstClockTime *max_latency); | GstClockTime *max_latency); | |||
GstClockTime gst_base_sink_get_latency (GstBaseSink *sink); | GstClockTime gst_base_sink_get_latency (GstBaseSink *sink); | |||
/* render delay */ | /* render delay */ | |||
void gst_base_sink_set_render_delay (GstBaseSink *sink, GstClock | void gst_base_sink_set_render_delay (GstBaseSink *sink, GstCloc | |||
Time delay); | kTime delay); | |||
GstClockTime gst_base_sink_get_render_delay (GstBaseSink *sink); | GstClockTime gst_base_sink_get_render_delay (GstBaseSink *sink); | |||
/* blocksize */ | /* blocksize */ | |||
void gst_base_sink_set_blocksize (GstBaseSink *sink, guint bl | void gst_base_sink_set_blocksize (GstBaseSink *sink, guint b | |||
ocksize); | locksize); | |||
guint gst_base_sink_get_blocksize (GstBaseSink *sink); | guint gst_base_sink_get_blocksize (GstBaseSink *sink); | |||
GstClockReturn gst_base_sink_wait_clock (GstBaseSink *sink, GstCloc kTime time, | GstClockReturn gst_base_sink_wait_clock (GstBaseSink *sink, GstCloc kTime time, | |||
GstClockTimeDiff * jitter) ; | GstClockTimeDiff * jitter) ; | |||
GstFlowReturn gst_base_sink_wait_eos (GstBaseSink *sink, GstCloc kTime time, | GstFlowReturn gst_base_sink_wait_eos (GstBaseSink *sink, GstCloc kTime time, | |||
GstClockTimeDiff *jitter); | GstClockTimeDiff *jitter); | |||
G_END_DECLS | G_END_DECLS | |||
#endif /* __GST_BASE_SINK_H__ */ | #endif /* __GST_BASE_SINK_H__ */ | |||
End of changes. 27 change blocks. | ||||
62 lines changed or deleted | 71 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |