diff options
Diffstat (limited to 'libs/gst/base/gstbasesrc.h')
-rw-r--r-- | libs/gst/base/gstbasesrc.h | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/libs/gst/base/gstbasesrc.h b/libs/gst/base/gstbasesrc.h index 0624096..dd15432 100644 --- a/libs/gst/base/gstbasesrc.h +++ b/libs/gst/base/gstbasesrc.h @@ -38,17 +38,22 @@ G_BEGIN_DECLS /** * GstBaseSrcFlags: - * @GST_BASE_SRC_STARTED: has source been started + * @GST_BASE_SRC_FLAG_STARTING: has source is starting + * @GST_BASE_SRC_FLAG_STARTED: has source been started * @GST_BASE_SRC_FLAG_LAST: offset to define more flags * * The #GstElement flags that a basesrc element may have. */ typedef enum { - GST_BASE_SRC_STARTED = (GST_ELEMENT_FLAG_LAST << 0), + GST_BASE_SRC_FLAG_STARTING = (GST_ELEMENT_FLAG_LAST << 0), + GST_BASE_SRC_FLAG_STARTED = (GST_ELEMENT_FLAG_LAST << 1), /* padding */ - GST_BASE_SRC_FLAG_LAST = (GST_ELEMENT_FLAG_LAST << 2) + GST_BASE_SRC_FLAG_LAST = (GST_ELEMENT_FLAG_LAST << 6) } GstBaseSrcFlags; +#define GST_BASE_SRC_IS_STARTING(obj) GST_OBJECT_FLAG_IS_SET ((obj), GST_BASE_SRC_FLAG_STARTING) +#define GST_BASE_SRC_IS_STARTED(obj) GST_OBJECT_FLAG_IS_SET ((obj), GST_BASE_SRC_FLAG_STARTED) + typedef struct _GstBaseSrc GstBaseSrc; typedef struct _GstBaseSrcClass GstBaseSrcClass; typedef struct _GstBaseSrcPrivate GstBaseSrcPrivate; @@ -75,8 +80,8 @@ struct _GstBaseSrc { /* available to subclass implementations */ /* MT-protected (with LIVE_LOCK) */ - GMutex *live_lock; - GCond *live_cond; + GMutex live_lock; + GCond live_cond; gboolean is_live; gboolean live_running; @@ -115,7 +120,9 @@ struct _GstBaseSrc { * @set_caps: Notify subclass of changed output caps * @decide_allocation: configure the allocation query * @start: Start processing. Subclasses should open resources and prepare - * to produce data. + * to produce data. Implementation should call gst_base_src_start_complete() + * when the operation completes, either from the current thread or any other + * thread that finishes the start operation asynchronously. * @stop: Stop processing. Subclasses should use this to close resources. * @get_times: Given a buffer, return the start and stop time when it * should be pushed out. The base class will sync on the clock using @@ -131,8 +138,8 @@ struct _GstBaseSrc { * @do_seek: Perform seeking on the resource to the indicated segment. * @unlock: Unlock any pending access to the resource. Subclasses should * unblock any blocked function ASAP. In particular, any create() function in - * progress should be unblocked and should return GST_FLOW_WRONG_STATE. Any - * future @create<!-- -->() function call should also return GST_FLOW_WRONG_STATE + * progress should be unblocked and should return GST_FLOW_FLUSHING. Any + * future @create<!-- -->() function call should also return GST_FLOW_FLUSHING * until the @unlock_stop<!-- -->() function has been called. * @unlock_stop: Clear the previous unlock request. Subclasses should clear * any state they set during unlock(), such as clearing command queues. @@ -142,7 +149,7 @@ struct _GstBaseSrc { * When the subclass returns GST_FLOW_OK, it MUST return a buffer of the * requested size unless fewer bytes are available because an EOS condition * is near. No buffer should be returned when the return value is different - * from GST_FLOW_OK. A return value of GST_FLOW_UNEXPECTED signifies that the + * from GST_FLOW_OK. A return value of GST_FLOW_EOS signifies that the * end of stream is reached. The default implementation will call @alloc and * then call @fill. * @alloc: Ask the subclass to allocate a buffer with for offset and size. The @@ -165,7 +172,7 @@ struct _GstBaseSrcClass { /* decide on caps */ gboolean (*negotiate) (GstBaseSrc *src); /* called if, in negotiation, caps need fixating */ - void (*fixate) (GstBaseSrc *src, GstCaps *caps); + GstCaps * (*fixate) (GstBaseSrc *src, GstCaps *caps); /* notify the subclass of new caps */ gboolean (*set_caps) (GstBaseSrc *src, GstCaps *caps); @@ -233,6 +240,12 @@ void gst_base_src_set_format (GstBaseSrc *src, GstFormat format void gst_base_src_set_dynamic_size (GstBaseSrc * src, gboolean dynamic); +void gst_base_src_set_async (GstBaseSrc *src, gboolean async); +gboolean gst_base_src_is_async (GstBaseSrc *src); + +void gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret); +GstFlowReturn gst_base_src_start_wait (GstBaseSrc * basesrc); + gboolean gst_base_src_query_latency (GstBaseSrc *src, gboolean * live, GstClockTime * min_latency, GstClockTime * max_latency); |