GstBaseSrc

GstBaseSrc — Base class for getrange based source elements

Synopsis


#include <gst/base/gstbasesrc.h>


            GstBaseSrc;
            GstBaseSrcClass;
enum        GstBaseSrcFlags;
gboolean    gst_base_src_is_live            (GstBaseSrc *src);
void        gst_base_src_set_live           (GstBaseSrc *src,
                                             gboolean live);
#define     GST_BASE_SRC_PAD                (obj)


Object Hierarchy


  GObject
   +----GstObject
         +----GstElement
               +----GstBaseSrc
                     +----GstFakeSrc
                     +----GstFileSrc
                     +----GstPushSrc

Properties


  "blocksize"            gulong                : Read / Write
  "num-buffers"          gint                  : Read / Write

Description

This class is mostly useful for elements that do byte based access to a random access resource, like files. If random access is not possible, the live-mode should be set to TRUE.

  • one sinkpad

  • handles state changes

  • does flushing

  • preroll with optional preview

  • pull/push mode

  • EOS handling

Details

GstBaseSrc

typedef struct {
  /* available to subclass implementations */
  /* MT-protected (with LIVE_LOCK) */
  GMutex	*live_lock;
  GCond		*live_cond;
  gboolean	 is_live;
  gboolean	 live_running;

  /* MT-protected (with LOCK) */
  gint		 blocksize;	/* size of buffers when operating push based */
  gboolean	 can_activate_push;	/* some scheduling properties */
  GstActivateMode pad_mode;
  gboolean       seekable;
  gboolean       random_access;

  GstClockID     clock_id;	/* for syncing */
  GstClockTime   end_time;

  /* MT-protected (with STREAM_LOCK) */
  gint64	 segment_start;	/* start and end positions for seeking */
  gint64	 segment_end;
  gboolean	 segment_loop;
  gboolean 	 need_discont;

  guint64	 offset;	/* current offset in the resource */
  guint64        size;		/* total size of the resource */

  gint           num_buffers;
  gint           num_buffers_left;
} GstBaseSrc;


GstBaseSrcClass

typedef struct {
  GstElementClass parent_class;

  /* virtual methods for subclasses */

  /* get caps from subclass */
  GstCaps*      (*get_caps)     (GstBaseSrc *src);
  /* notify the subclass of new caps */
  gboolean      (*set_caps)     (GstBaseSrc *src, GstCaps *caps);

  /* decide on caps */
  gboolean      (*negotiate)    (GstBaseSrc *src);

  /* start and stop processing, ideal for opening/closing the resource */
  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. */
  void          (*get_times)    (GstBaseSrc *src, GstBuffer *buffer,
                                 GstClockTime *start, GstClockTime *end);

  /* get the total size of the resource in bytes */
  gboolean      (*get_size)     (GstBaseSrc *src, guint64 *size);

  /* check if the resource is seekable */
  gboolean      (*is_seekable)  (GstBaseSrc *src);
  /* unlock any pending access to the resource. subclasses should unlock
   * any function ASAP. */
  gboolean      (*unlock)       (GstBaseSrc *src);

  /* notify subclasses of an event */
  gboolean      (*event)        (GstBaseSrc *src, GstEvent *event);

  /* ask the subclass to create a buffer with offset and size */
  GstFlowReturn (*create)       (GstBaseSrc *src, guint64 offset, guint size,
		                 GstBuffer **buf);
} GstBaseSrcClass;


enum GstBaseSrcFlags

typedef enum {
  GST_BASE_SRC_STARTED           = GST_ELEMENT_FLAG_LAST,

  GST_BASE_SRC_FLAG_LAST         = GST_ELEMENT_FLAG_LAST + 2
} GstBaseSrcFlags;


gst_base_src_is_live ()

gboolean    gst_base_src_is_live            (GstBaseSrc *src);

Check if an element is in live mode.

src : base source instance
Returns : TRUE if element is in live mode.

gst_base_src_set_live ()

void        gst_base_src_set_live           (GstBaseSrc *src,
                                             gboolean live);

If the element listens to a live source, the livemode should be set to TRUE. This declares that this source can't seek.

src : base source instance
live : new live-mode

GST_BASE_SRC_PAD()

#define GST_BASE_SRC_PAD(obj)                 (GST_BASE_SRC (obj)->srcpad)

obj : base source instance

Properties

The "blocksize" property

  "blocksize"            gulong                : Read / Write

Size in bytes to read per buffer.

Allowed values: >= 1


The "num-buffers" property

  "num-buffers"          gint                  : Read / Write

Number of buffers to output before sending EOS.

Allowed values: >= -1

Default value: -1

See Also

GstBaseTransformc, GstBaseSink