aggregator: Assert if the sink/src pad type that is to be used is not a GstAggregator...
[platform/upstream/gstreamer.git] / libs / gst / base / gstbasesrc.h
index dd15432..b782bbe 100644 (file)
  *
  * You should have received a copy of the GNU Library General Public
  * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
  */
 
 #ifndef __GST_BASE_SRC_H__
 #define __GST_BASE_SRC_H__
 
 #include <gst/gst.h>
+#include <gst/base/base-prelude.h>
 
 G_BEGIN_DECLS
 
@@ -100,7 +101,10 @@ struct _GstBaseSrc {
   gint           num_buffers;
   gint           num_buffers_left;
 
-  gboolean       typefind;
+#ifndef GST_REMOVE_DEPRECATED
+  gboolean       typefind;      /* unused */
+#endif
+
   gboolean       running;
   GstEvent      *pending_seek;
 
@@ -127,31 +131,34 @@ struct _GstBaseSrc {
  * @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
  *    these times.
- * @get_size: Return the total size of the resource, in the configured format.
+ * @get_size: Return the total size of the resource, in the format set by
+ *     gst_base_src_set_format().
  * @is_seekable: Check if the source can seek
- * @prepare_seek_segment: Prepare the GstSegment that will be passed to the
- *   do_seek vmethod for executing a seek request. Sub-classes should override
- *   this if they support seeking in formats other than the configured native
- *   format. By default, it tries to convert the seek arguments to the
- *   configured native format and prepare a segment in that format.
- *   Since: 0.10.13
+ * @prepare_seek_segment: Prepare the #GstSegment that will be passed to the
+ *   #GstBaseSrcClass.do_seek() vmethod for executing a seek
+ *   request. Sub-classes should override this if they support seeking in
+ *   formats other than the configured native format. By default, it tries to
+ *   convert the seek arguments to the configured native format and prepare a
+ *   segment in that format.
  * @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
+ * @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_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.
+ *    future #GstBaseSrcClass.create() function call should also return
+ *    GST_FLOW_FLUSHING until the #GstBaseSrcClass.unlock_stop() function has
+ *    been called.
+ * @unlock_stop: Clear the previous unlock request. Subclasses should clear any
+ *    state they set during #GstBaseSrcClass.unlock(), such as clearing command
+ *    queues.
  * @query: Handle a requested query.
  * @event: Override this to implement custom event handling.
- * @create: Ask the subclass to create a buffer with offset and size.
- *   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_EOS signifies that the
- *   end of stream is reached. The default implementation will call @alloc and
- *   then call @fill.
+ * @create: Ask the subclass to create a buffer with offset and size.  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_EOS signifies that the end of
+ *   stream is reached. The default implementation will call
+ *   #GstBaseSrcClass.alloc() and then call #GstBaseSrcClass.fill().
  * @alloc: Ask the subclass to allocate a buffer with for offset and size. The
  *   default implementation will create a new buffer from the negotiated allocator.
  * @fill: Ask the subclass to fill the buffer with data for offset and size. The
@@ -183,12 +190,19 @@ struct _GstBaseSrcClass {
   gboolean      (*start)        (GstBaseSrc *src);
   gboolean      (*stop)         (GstBaseSrc *src);
 
-  /* given a buffer, return start and stop time when it should be pushed
-   * out. The base class will sync on the clock using these times. */
+  /**
+   * GstBaseSrcClass::get_times:
+   * @start: (out):
+   * @end: (out):
+   *
+   * Given @buffer, return @start and @end time when it should be pushed
+   * out. The base class will sync on the clock using these times.
+   */
   void          (*get_times)    (GstBaseSrc *src, GstBuffer *buffer,
                                  GstClockTime *start, GstClockTime *end);
 
-  /* get the total size of the resource in bytes */
+  /* get the total size of the resource in the format set by
+   * gst_base_src_set_format() */
   gboolean      (*get_size)     (GstBaseSrc *src, guint64 *size);
 
   /* check if the resource is seekable */
@@ -213,8 +227,13 @@ struct _GstBaseSrcClass {
   /* notify subclasses of an event */
   gboolean      (*event)        (GstBaseSrc *src, GstEvent *event);
 
-  /* ask the subclass to create a buffer with offset and size, the default
-   * implementation will call alloc and fill. */
+  /**
+   * GstBaseSrcClass::create:
+   * @buf: (out):
+   *
+   * Ask the subclass to create a buffer with @offset and @size, the default
+   * implementation will call alloc and fill.
+   */
   GstFlowReturn (*create)       (GstBaseSrc *src, guint64 offset, guint size,
                                  GstBuffer **buf);
   /* ask the subclass to allocate an output buffer. The default implementation
@@ -229,37 +248,77 @@ struct _GstBaseSrcClass {
   gpointer       _gst_reserved[GST_PADDING_LARGE];
 };
 
-GType gst_base_src_get_type (void);
+GST_BASE_API
+GType           gst_base_src_get_type (void);
 
+GST_BASE_API
 GstFlowReturn   gst_base_src_wait_playing     (GstBaseSrc *src);
 
+GST_BASE_API
 void            gst_base_src_set_live         (GstBaseSrc *src, gboolean live);
+
+GST_BASE_API
 gboolean        gst_base_src_is_live          (GstBaseSrc *src);
 
+GST_BASE_API
 void            gst_base_src_set_format       (GstBaseSrc *src, GstFormat format);
 
+GST_BASE_API
 void            gst_base_src_set_dynamic_size (GstBaseSrc * src, gboolean dynamic);
 
+GST_BASE_API
+void            gst_base_src_set_automatic_eos (GstBaseSrc * src, gboolean automatic_eos);
+
+GST_BASE_API
 void            gst_base_src_set_async        (GstBaseSrc *src, gboolean async);
+
+GST_BASE_API
 gboolean        gst_base_src_is_async         (GstBaseSrc *src);
 
+GST_BASE_API
 void            gst_base_src_start_complete   (GstBaseSrc * basesrc, GstFlowReturn ret);
+
+GST_BASE_API
 GstFlowReturn   gst_base_src_start_wait       (GstBaseSrc * basesrc);
 
+GST_BASE_API
 gboolean        gst_base_src_query_latency    (GstBaseSrc *src, gboolean * live,
                                                GstClockTime * min_latency,
                                                GstClockTime * max_latency);
-
+GST_BASE_API
 void            gst_base_src_set_blocksize    (GstBaseSrc *src, guint blocksize);
+
+GST_BASE_API
 guint           gst_base_src_get_blocksize    (GstBaseSrc *src);
 
+GST_BASE_API
 void            gst_base_src_set_do_timestamp (GstBaseSrc *src, gboolean timestamp);
+
+GST_BASE_API
 gboolean        gst_base_src_get_do_timestamp (GstBaseSrc *src);
 
-gboolean        gst_base_src_new_seamless_segment (GstBaseSrc *src, gint64 start, gint64 stop, gint64 position);
+GST_BASE_API
+gboolean        gst_base_src_new_seamless_segment (GstBaseSrc *src, gint64 start, gint64 stop, gint64 time);
 
+GST_BASE_API
 gboolean        gst_base_src_set_caps         (GstBaseSrc *src, GstCaps *caps);
 
+GST_BASE_API
+GstBufferPool * gst_base_src_get_buffer_pool  (GstBaseSrc *src);
+
+GST_BASE_API
+void            gst_base_src_get_allocator    (GstBaseSrc *src,
+                                               GstAllocator **allocator,
+                                               GstAllocationParams *params);
+
+GST_BASE_API
+void            gst_base_src_submit_buffer_list (GstBaseSrc    * src,
+                                                 GstBufferList * buffer_list);
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstBaseSrc, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_BASE_SRC_H__ */