Imported existing code
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) 2004 Benjamin Otte <otte@gnome.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
#ifndef __GST_ADAPTER_H__
|
||||
#define __GST_ADAPTER_H__
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define GST_TYPE_ADAPTER \
|
||||
(gst_adapter_get_type())
|
||||
#define GST_ADAPTER(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_ADAPTER, GstAdapter))
|
||||
#define GST_ADAPTER_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_ADAPTER, GstAdapterClass))
|
||||
#define GST_ADAPTER_GET_CLASS(obj) \
|
||||
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_ADAPTER, GstAdapterClass))
|
||||
#define GST_IS_ADAPTER(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_ADAPTER))
|
||||
#define GST_IS_ADAPTER_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_ADAPTER))
|
||||
|
||||
typedef struct _GstAdapter GstAdapter;
|
||||
typedef struct _GstAdapterClass GstAdapterClass;
|
||||
|
||||
/**
|
||||
* GstAdapter:
|
||||
* @object: the parent object.
|
||||
*
|
||||
* The opaque #GstAdapter data structure.
|
||||
*/
|
||||
struct _GstAdapter {
|
||||
GObject object;
|
||||
|
||||
/*< private >*/
|
||||
GSList * buflist;
|
||||
guint size;
|
||||
guint skip;
|
||||
|
||||
/* we keep state of assembled pieces */
|
||||
guint8 * assembled_data;
|
||||
guint assembled_size;
|
||||
guint assembled_len;
|
||||
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
||||
struct _GstAdapterClass {
|
||||
GObjectClass parent_class;
|
||||
|
||||
/*< private >*/
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
||||
GstAdapter * gst_adapter_new (void);
|
||||
|
||||
void gst_adapter_clear (GstAdapter *adapter);
|
||||
void gst_adapter_push (GstAdapter *adapter, GstBuffer* buf);
|
||||
const guint8 * gst_adapter_peek (GstAdapter *adapter, guint size);
|
||||
void gst_adapter_flush (GstAdapter *adapter, guint flush);
|
||||
guint8* gst_adapter_take (GstAdapter *adapter, guint nbytes);
|
||||
GstBuffer* gst_adapter_take_buffer (GstAdapter *adapter, guint nbytes);
|
||||
guint gst_adapter_available (GstAdapter *adapter);
|
||||
guint gst_adapter_available_fast (GstAdapter *adapter);
|
||||
GType gst_adapter_get_type (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_ADAPTER_H__ */
|
||||
@@ -0,0 +1,180 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* 2000 Wim Taymans <wtay@chello.be>
|
||||
*
|
||||
* gstbasesink.h:
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __GST_BASE_SINK_H__
|
||||
#define __GST_BASE_SINK_H__
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define GST_TYPE_BASE_SINK (gst_base_sink_get_type())
|
||||
#define GST_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_SINK,GstBaseSink))
|
||||
#define GST_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),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),GST_TYPE_BASE_SINK))
|
||||
#define GST_IS_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_SINK))
|
||||
#define GST_BASE_SINK_CAST(obj) ((GstBaseSink *) (obj))
|
||||
|
||||
/**
|
||||
* GST_BASE_SINK_PAD:
|
||||
* @obj: base sink instance
|
||||
*
|
||||
* Gives the pointer to the #GstPad object of the element.
|
||||
*/
|
||||
#define GST_BASE_SINK_PAD(obj) (GST_BASE_SINK_CAST (obj)->sinkpad)
|
||||
|
||||
typedef struct _GstBaseSink GstBaseSink;
|
||||
typedef struct _GstBaseSinkClass GstBaseSinkClass;
|
||||
typedef struct _GstBaseSinkPrivate GstBaseSinkPrivate;
|
||||
|
||||
/**
|
||||
* GstBaseSink:
|
||||
* @element: the parent element.
|
||||
*
|
||||
* The opaque #GstBaseSink data structure.
|
||||
*/
|
||||
struct _GstBaseSink {
|
||||
GstElement element;
|
||||
|
||||
/*< protected >*/
|
||||
GstPad *sinkpad;
|
||||
GstActivateMode pad_mode;
|
||||
|
||||
/*< protected >*/ /* with LOCK */
|
||||
guint64 offset;
|
||||
gboolean can_activate_pull;
|
||||
gboolean can_activate_push;
|
||||
|
||||
/*< protected >*/ /* with PREROLL_LOCK */
|
||||
GQueue *preroll_queue;
|
||||
gint preroll_queue_max_len;
|
||||
gint preroll_queued;
|
||||
gint buffers_queued;
|
||||
gint events_queued;
|
||||
gboolean eos;
|
||||
gboolean eos_queued;
|
||||
gboolean need_preroll;
|
||||
gboolean have_preroll;
|
||||
gboolean playing_async;
|
||||
|
||||
/*< protected >*/ /* with STREAM_LOCK */
|
||||
gboolean have_newsegment;
|
||||
GstSegment segment;
|
||||
|
||||
/*< private >*/ /* with LOCK */
|
||||
GstClockID clock_id;
|
||||
GstClockTime end_time;
|
||||
gboolean sync;
|
||||
gboolean flushing;
|
||||
|
||||
/*< private >*/
|
||||
union {
|
||||
struct {
|
||||
/* segment used for clipping incomming buffers */
|
||||
GstSegment *clip_segment;
|
||||
/* max amount of time a buffer can be late, -1 no limit. */
|
||||
gint64 max_lateness;
|
||||
} ABI;
|
||||
gpointer _gst_reserved[GST_PADDING_LARGE - 1];
|
||||
} abidata;
|
||||
|
||||
GstBaseSinkPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* GstBaseSinkClass:
|
||||
* @get_caps: Called to get sink pad caps from the subclass
|
||||
* @set_caps: Notify subclass of changed caps
|
||||
* @buffer_alloc: Subclasses can override to perform custom buffer allocations
|
||||
* @get_times: Called to get the start and end times for synchronising
|
||||
* the passed buffer to the clock
|
||||
* @start: Start processing. Ideal for opening resources in the subclass
|
||||
* @stop: Stop processing. Subclasses should use this to close resources.
|
||||
* @unlock: Unlock any pending access to the resource. Subclasses should
|
||||
* unblock any blocked function ASAP
|
||||
* @event: Override this to handle events arriving on the sink pad
|
||||
* @preroll: Called to present the preroll buffer if desired
|
||||
* @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.
|
||||
* @async_play: Subclasses should override this when they need to perform
|
||||
* special processing when changing to the PLAYING state
|
||||
* asynchronously. Called with the OBJECT_LOCK held.
|
||||
*
|
||||
* Subclasses can override any of the available virtual methods or not, as
|
||||
* needed. At the minimum, the render method should be overridden to
|
||||
* output/present buffers.
|
||||
*/
|
||||
struct _GstBaseSinkClass {
|
||||
GstElementClass parent_class;
|
||||
|
||||
/* get caps from subclass */
|
||||
GstCaps* (*get_caps) (GstBaseSink *sink);
|
||||
/* notify subclass of new caps */
|
||||
gboolean (*set_caps) (GstBaseSink *sink, GstCaps *caps);
|
||||
|
||||
/* allocate a new buffer with given caps */
|
||||
GstFlowReturn (*buffer_alloc) (GstBaseSink *sink, guint64 offset, guint size,
|
||||
GstCaps *caps, GstBuffer **buf);
|
||||
|
||||
/* get the start and end times for syncing on this buffer */
|
||||
void (*get_times) (GstBaseSink *sink, GstBuffer *buffer,
|
||||
GstClockTime *start, GstClockTime *end);
|
||||
|
||||
/* start and stop processing, ideal for opening/closing the resource */
|
||||
gboolean (*start) (GstBaseSink *sink);
|
||||
gboolean (*stop) (GstBaseSink *sink);
|
||||
|
||||
/* unlock any pending access to the resource. subclasses should unlock
|
||||
* any function ASAP. */
|
||||
gboolean (*unlock) (GstBaseSink *sink);
|
||||
|
||||
/* notify subclass of event, preroll buffer or real buffer */
|
||||
gboolean (*event) (GstBaseSink *sink, GstEvent *event);
|
||||
GstFlowReturn (*preroll) (GstBaseSink *sink, GstBuffer *buffer);
|
||||
GstFlowReturn (*render) (GstBaseSink *sink, GstBuffer *buffer);
|
||||
|
||||
/* ABI additions */
|
||||
|
||||
/* when an ASYNC state change to PLAYING happens */ /* with LOCK */
|
||||
GstStateChangeReturn (*async_play) (GstBaseSink *sink);
|
||||
|
||||
/*< private >*/
|
||||
gpointer _gst_reserved[GST_PADDING_LARGE-1];
|
||||
};
|
||||
|
||||
GType gst_base_sink_get_type(void);
|
||||
|
||||
void gst_base_sink_set_sync (GstBaseSink *sink, gboolean sync);
|
||||
gboolean gst_base_sink_get_sync (GstBaseSink *sink);
|
||||
|
||||
void gst_base_sink_set_max_lateness (GstBaseSink *sink, gint64 max_lateness);
|
||||
gint64 gst_base_sink_get_max_lateness (GstBaseSink *sink);
|
||||
|
||||
void gst_base_sink_set_qos_enabled (GstBaseSink *sink, gboolean enabled);
|
||||
gboolean gst_base_sink_is_qos_enabled (GstBaseSink *sink);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_BASE_SINK_H__ */
|
||||
@@ -0,0 +1,215 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* 2000 Wim Taymans <wtay@chello.be>
|
||||
* 2005 Wim Taymans <wim@fluendo.com>
|
||||
*
|
||||
* gstbasesrc.h:
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __GST_BASE_SRC_H__
|
||||
#define __GST_BASE_SRC_H__
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_BASE_SRC (gst_base_src_get_type())
|
||||
#define GST_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_SRC,GstBaseSrc))
|
||||
#define GST_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_SRC,GstBaseSrcClass))
|
||||
#define GST_BASE_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_SRC, GstBaseSrcClass))
|
||||
#define GST_IS_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_SRC))
|
||||
#define GST_IS_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_SRC))
|
||||
#define GST_BASE_SRC_CAST(obj) ((GstBaseSrc *)(obj))
|
||||
|
||||
/**
|
||||
* GstBaseSrcFlags:
|
||||
* @GST_BASE_SRC_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),
|
||||
/* padding */
|
||||
GST_BASE_SRC_FLAG_LAST = (GST_ELEMENT_FLAG_LAST << 2)
|
||||
} GstBaseSrcFlags;
|
||||
|
||||
typedef struct _GstBaseSrc GstBaseSrc;
|
||||
typedef struct _GstBaseSrcClass GstBaseSrcClass;
|
||||
typedef struct _GstBaseSrcPrivate GstBaseSrcPrivate;
|
||||
|
||||
/**
|
||||
* GST_BASE_SRC_PAD:
|
||||
* @obj: base source instance
|
||||
*
|
||||
* Gives the pointer to the #GstPad object of the element.
|
||||
*/
|
||||
#define GST_BASE_SRC_PAD(obj) (GST_BASE_SRC_CAST (obj)->srcpad)
|
||||
|
||||
|
||||
/**
|
||||
* GstBaseSrc:
|
||||
* @element: the parent element.
|
||||
*
|
||||
* The opaque #GstBaseSrc data structure.
|
||||
*/
|
||||
struct _GstBaseSrc {
|
||||
GstElement element;
|
||||
|
||||
/*< protected >*/
|
||||
GstPad *srcpad;
|
||||
|
||||
/* 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) */
|
||||
GstSegment segment;
|
||||
gboolean need_newsegment;
|
||||
|
||||
guint64 offset; /* current offset in the resource, unused */
|
||||
guint64 size; /* total size of the resource, unused */
|
||||
|
||||
gint num_buffers;
|
||||
gint num_buffers_left;
|
||||
|
||||
/*< private >*/
|
||||
union {
|
||||
struct {
|
||||
/* FIXME: those fields should be moved into the private struct */
|
||||
gboolean typefind;
|
||||
gboolean running;
|
||||
GstEvent *pending_seek;
|
||||
} ABI;
|
||||
gpointer _gst_reserved[GST_PADDING_LARGE-1];
|
||||
} data;
|
||||
|
||||
GstBaseSrcPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* GstBaseSrcClass:
|
||||
* @parent_class: Element parent class
|
||||
* @get_caps: Called to get the caps to report
|
||||
* @set_caps: Notify subclass of changed output caps
|
||||
* @negotiate: Negotiated the caps with the peer.
|
||||
* @newsegment: Generate and send a new_segment event.
|
||||
* @start: Start processing. Subclasses should open resources and prepare
|
||||
* to produce data.
|
||||
* @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
|
||||
* these times.
|
||||
* @get_size: Return the total size of the resource, in the configured format.
|
||||
* @is_seekable: Check if the source can seek
|
||||
* @unlock: Unlock any pending access to the resource. Subclasses should
|
||||
* unblock any blocked function ASAP
|
||||
* @event: Override this to implement custom event handling.
|
||||
* @create: Ask the subclass to create a buffer with offset and size.
|
||||
* @do_seek: Perform seeking on the resource to the indicated segment.
|
||||
* @query: Handle a requested query.
|
||||
* @check_get_range: Check whether the source would support pull-based
|
||||
* operation if it were to be opened now. This vfunc is optional, but
|
||||
* should be implemented if possible to avoid unnecessary start/stop
|
||||
* cycles. The default implementation will open and close the resource
|
||||
* to find out whether get_range is supported, and that is usually
|
||||
* undesirable.
|
||||
*/
|
||||
struct _GstBaseSrcClass {
|
||||
GstElementClass parent_class;
|
||||
|
||||
/*< public >*/
|
||||
/* 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);
|
||||
|
||||
/* generate and send a newsegment */
|
||||
gboolean (*newsegment) (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);
|
||||
|
||||
/* additions that change padding... */
|
||||
/* notify subclasses of a seek */
|
||||
gboolean (*do_seek) (GstBaseSrc *src, GstSegment *segment);
|
||||
/* notify subclasses of a query */
|
||||
gboolean (*query) (GstBaseSrc *src, GstQuery *query);
|
||||
|
||||
/* check whether the source would support pull-based operation if
|
||||
* it were to be opened now. This vfunc is optional, but should be
|
||||
* implemented if possible to avoid unnecessary start/stop cycles.
|
||||
* The default implementation will open and close the resource to
|
||||
* find out whether get_range is supported and that is usually
|
||||
* undesirable. */
|
||||
gboolean (*check_get_range) (GstBaseSrc *src);
|
||||
|
||||
/*< private >*/
|
||||
gpointer _gst_reserved[GST_PADDING_LARGE - 3];
|
||||
};
|
||||
|
||||
GType gst_base_src_get_type (void);
|
||||
|
||||
void gst_base_src_set_live (GstBaseSrc *src, gboolean live);
|
||||
gboolean gst_base_src_is_live (GstBaseSrc *src);
|
||||
|
||||
void gst_base_src_set_format (GstBaseSrc *src, GstFormat format);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_BASE_SRC_H__ */
|
||||
@@ -0,0 +1,223 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* 2005 Wim Taymans <wim@fluendo.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __GST_BASE_TRANSFORM_H__
|
||||
#define __GST_BASE_TRANSFORM_H__
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_BASE_TRANSFORM (gst_base_transform_get_type())
|
||||
#define GST_BASE_TRANSFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_TRANSFORM,GstBaseTransform))
|
||||
#define GST_BASE_TRANSFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_TRANSFORM,GstBaseTransformClass))
|
||||
#define GST_BASE_TRANSFORM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_BASE_TRANSFORM,GstBaseTransformClass))
|
||||
#define GST_IS_BASE_TRANSFORM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_TRANSFORM))
|
||||
#define GST_IS_BASE_TRANSFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_TRANSFORM))
|
||||
/* since 0.10.4 */
|
||||
#define GST_BASE_TRANSFORM_CAST(obj) ((GstBaseTransform *)(obj))
|
||||
|
||||
/**
|
||||
* GST_BASE_TRANSFORM_SINK_NAME:
|
||||
*
|
||||
* the name of the templates for the sink pad
|
||||
*/
|
||||
#define GST_BASE_TRANSFORM_SINK_NAME "sink"
|
||||
/**
|
||||
* GST_BASE_TRANSFORM_SRC_NAME:
|
||||
*
|
||||
* the name of the templates for the source pad
|
||||
*/
|
||||
#define GST_BASE_TRANSFORM_SRC_NAME "src"
|
||||
|
||||
/**
|
||||
* GST_BASE_TRANSFORM_SRC_PAD:
|
||||
* @obj: base transform instance
|
||||
*
|
||||
* Gives the pointer to the source #GstPad object of the element.
|
||||
*
|
||||
* Since: 0.10.4
|
||||
*/
|
||||
#define GST_BASE_TRANSFORM_SRC_PAD(obj) (GST_BASE_TRANSFORM_CAST (obj)->srcpad)
|
||||
|
||||
/**
|
||||
* GST_BASE_TRANSFORM_SINK_PAD:
|
||||
* @obj: base transform instance
|
||||
*
|
||||
* Gives the pointer to the sink #GstPad object of the element.
|
||||
*
|
||||
* Since: 0.10.4
|
||||
*/
|
||||
#define GST_BASE_TRANSFORM_SINK_PAD(obj) (GST_BASE_TRANSFORM_CAST (obj)->sinkpad)
|
||||
|
||||
typedef struct _GstBaseTransform GstBaseTransform;
|
||||
typedef struct _GstBaseTransformClass GstBaseTransformClass;
|
||||
typedef struct _GstBaseTransformPrivate GstBaseTransformPrivate;
|
||||
|
||||
|
||||
/**
|
||||
* GstBaseTransform:
|
||||
* @element: the parent element.
|
||||
*
|
||||
* The opaque #GstBaseTransform data structure.
|
||||
*/
|
||||
struct _GstBaseTransform {
|
||||
GstElement element;
|
||||
|
||||
/*< protected >*/
|
||||
/* source and sink pads */
|
||||
GstPad *sinkpad;
|
||||
GstPad *srcpad;
|
||||
|
||||
/* Set by sub-class */
|
||||
gboolean passthrough;
|
||||
gboolean always_in_place;
|
||||
|
||||
GstCaps *cache_caps1;
|
||||
guint cache_caps1_size;
|
||||
GstCaps *cache_caps2;
|
||||
guint cache_caps2_size;
|
||||
gboolean have_same_caps;
|
||||
|
||||
gboolean delay_configure;
|
||||
gboolean pending_configure;
|
||||
gboolean negotiated;
|
||||
|
||||
gboolean have_newsegment;
|
||||
|
||||
/* MT-protected (with STREAM_LOCK) */
|
||||
GstSegment segment;
|
||||
|
||||
GMutex *transform_lock;
|
||||
|
||||
/*< private >*/
|
||||
GstBaseTransformPrivate *priv;
|
||||
|
||||
gpointer _gst_reserved[GST_PADDING_LARGE - 1];
|
||||
};
|
||||
|
||||
/**
|
||||
* GstBaseTransformClass:
|
||||
* @transform_caps: Optional. given the pad in this direction and the given
|
||||
* caps, what caps are allowed on the other pad in this
|
||||
* element ?
|
||||
* @fixate_caps: Optional. Given the pad in this direction and the given
|
||||
* caps, fixate the caps on the other pad.
|
||||
* @transform_size: Optional. given the size of a buffer in the given direction
|
||||
* with the given caps, calculate the size in bytes of a buffer
|
||||
* on the other pad with the given other caps.
|
||||
* The default implementation uses get_unit_size and keeps
|
||||
* the number of units the same.
|
||||
* @get_unit_size: Required if the transform is not in-place.
|
||||
* get the size in bytes of one unit for the given caps.
|
||||
* @set_caps: allows the subclass to be notified of the actual caps set.
|
||||
* @start: Optional.
|
||||
* Called when the element starts processing.
|
||||
* Allows opening external resources.
|
||||
* @stop: Optional.
|
||||
* Called when the element stops processing.
|
||||
* Allows closing external resources.
|
||||
* @transform: Required if the element does not operate in-place.
|
||||
* Transforms one incoming buffer to one outgoing buffer.
|
||||
* The function is allowed to change size/timestamp/duration
|
||||
* of the outgoing buffer.
|
||||
* @transform_ip: Required if the element operates in-place.
|
||||
* Transform the incoming buffer in-place.
|
||||
* @event: Optional.
|
||||
* Event handler on the sink pad.
|
||||
* @src_event: Optional.
|
||||
* Event handler on the source pad.
|
||||
* @passthrough_on_same_caps: If set to TRUE, passthrough mode will be
|
||||
* automatically enabled if the caps are the same.
|
||||
* @prepare_output_buffer: Optional.
|
||||
* Subclasses can override this to do their own
|
||||
* allocation of output buffers. Elements that only do
|
||||
* analysis can return a subbuffer or even just
|
||||
* increment the reference to the input buffer (if in
|
||||
* passthrough mode)
|
||||
*/
|
||||
struct _GstBaseTransformClass {
|
||||
GstElementClass parent_class;
|
||||
|
||||
/*< public >*/
|
||||
/* virtual methods for subclasses */
|
||||
|
||||
GstCaps* (*transform_caps) (GstBaseTransform *trans,
|
||||
GstPadDirection direction,
|
||||
GstCaps *caps);
|
||||
|
||||
void (*fixate_caps) (GstBaseTransform *trans,
|
||||
GstPadDirection direction, GstCaps *caps,
|
||||
GstCaps *othercaps);
|
||||
|
||||
gboolean (*transform_size) (GstBaseTransform *trans,
|
||||
GstPadDirection direction,
|
||||
GstCaps *caps, guint size,
|
||||
GstCaps *othercaps, guint *othersize);
|
||||
|
||||
gboolean (*get_unit_size) (GstBaseTransform *trans, GstCaps *caps,
|
||||
guint *size);
|
||||
|
||||
gboolean (*set_caps) (GstBaseTransform *trans, GstCaps *incaps,
|
||||
GstCaps *outcaps);
|
||||
|
||||
gboolean (*start) (GstBaseTransform *trans);
|
||||
gboolean (*stop) (GstBaseTransform *trans);
|
||||
|
||||
gboolean (*event) (GstBaseTransform *trans, GstEvent *event);
|
||||
|
||||
GstFlowReturn (*transform) (GstBaseTransform *trans, GstBuffer *inbuf,
|
||||
GstBuffer *outbuf);
|
||||
GstFlowReturn (*transform_ip) (GstBaseTransform *trans, GstBuffer *buf);
|
||||
|
||||
/* FIXME: When adjusting the padding, move these to nicer places in the class */
|
||||
gboolean passthrough_on_same_caps;
|
||||
|
||||
GstFlowReturn (*prepare_output_buffer) (GstBaseTransform * trans,
|
||||
GstBuffer *input, gint size, GstCaps *caps, GstBuffer **buf);
|
||||
|
||||
/* src event */
|
||||
gboolean (*src_event) (GstBaseTransform *trans, GstEvent *event);
|
||||
|
||||
/*< private >*/
|
||||
gpointer _gst_reserved[GST_PADDING_LARGE - 1];
|
||||
};
|
||||
|
||||
GType gst_base_transform_get_type (void);
|
||||
|
||||
void gst_base_transform_set_passthrough (GstBaseTransform *trans,
|
||||
gboolean passthrough);
|
||||
gboolean gst_base_transform_is_passthrough (GstBaseTransform *trans);
|
||||
|
||||
void gst_base_transform_set_in_place (GstBaseTransform *trans,
|
||||
gboolean in_place);
|
||||
gboolean gst_base_transform_is_in_place (GstBaseTransform *trans);
|
||||
|
||||
void gst_base_transform_update_qos (GstBaseTransform *trans,
|
||||
gdouble proportion,
|
||||
GstClockTimeDiff diff,
|
||||
GstClockTime timestamp);
|
||||
void gst_base_transform_set_qos_enabled (GstBaseTransform *trans,
|
||||
gboolean enabled);
|
||||
gboolean gst_base_transform_is_qos_enabled (GstBaseTransform *trans);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_BASE_TRANSFORM_H__ */
|
||||
@@ -0,0 +1,174 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
|
||||
*
|
||||
* gstcollect_pads.h:
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __GST_COLLECT_PADS_H__
|
||||
#define __GST_COLLECT_PADS_H__
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_COLLECT_PADS (gst_collect_pads_get_type())
|
||||
#define GST_COLLECT_PADS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_COLLECT_PADS,GstCollectPads))
|
||||
#define GST_COLLECT_PADS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_COLLECT_PADS,GstCollectPadsClass))
|
||||
#define GST_COLLECT_PADS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_COLLECT_PADS,GstCollectPadsClass))
|
||||
#define GST_IS_COLLECT_PADS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_COLLECT_PADS))
|
||||
#define GST_IS_COLLECT_PADS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_COLLECT_PADS))
|
||||
|
||||
typedef struct _GstCollectData GstCollectData;
|
||||
typedef struct _GstCollectPads GstCollectPads;
|
||||
typedef struct _GstCollectPadsClass GstCollectPadsClass;
|
||||
|
||||
/**
|
||||
* GstCollectData:
|
||||
* @collect: owner #GstCollectPads
|
||||
* @pad: #GstPad managed by this data
|
||||
* @buffer: currently queued buffer.
|
||||
* @pos: position in the buffer
|
||||
* @segment: last segment received.
|
||||
*
|
||||
* Structure used by the collect_pads.
|
||||
*/
|
||||
struct _GstCollectData
|
||||
{
|
||||
/* with LOCK of @collect */
|
||||
GstCollectPads *collect;
|
||||
GstPad *pad;
|
||||
GstBuffer *buffer;
|
||||
guint pos;
|
||||
GstSegment segment;
|
||||
|
||||
/*< private >*/
|
||||
union {
|
||||
struct {
|
||||
gboolean flushing;
|
||||
gboolean new_segment;
|
||||
gboolean eos;
|
||||
} ABI;
|
||||
/* adding + 0 to mark ABI change to be undone later */
|
||||
gpointer _gst_reserved[GST_PADDING + 0];
|
||||
} abidata;
|
||||
};
|
||||
|
||||
/**
|
||||
* GstCollectPadsFunction:
|
||||
* @pads: the #GstCollectPads that trigered the callback
|
||||
* @user_data: user data passed to gst_collect_pads_set_function()
|
||||
*
|
||||
* A function that will be called when all pads have received data.
|
||||
*
|
||||
* Returns: GST_FLOW_OK for success
|
||||
*/
|
||||
typedef GstFlowReturn (*GstCollectPadsFunction) (GstCollectPads *pads, gpointer user_data);
|
||||
|
||||
#define GST_COLLECT_PADS_GET_PAD_LOCK(pads) (((GstCollectPads *)pads)->abidata.ABI.pad_lock)
|
||||
#define GST_COLLECT_PADS_PAD_LOCK(pads) (g_mutex_lock(GST_COLLECT_PADS_GET_PAD_LOCK (pads)))
|
||||
#define GST_COLLECT_PADS_PAD_UNLOCK(pads) (g_mutex_unlock(GST_COLLECT_PADS_GET_PAD_LOCK (pads)))
|
||||
|
||||
#define GST_COLLECT_PADS_GET_COND(pads) (((GstCollectPads *)pads)->cond)
|
||||
#define GST_COLLECT_PADS_WAIT(pads) (g_cond_wait (GST_COLLECT_PADS_GET_COND (pads), GST_OBJECT_GET_LOCK (pads)))
|
||||
#define GST_COLLECT_PADS_SIGNAL(pads) (g_cond_signal (GST_COLLECT_PADS_GET_COND (pads)))
|
||||
#define GST_COLLECT_PADS_BROADCAST(pads)(g_cond_broadcast (GST_COLLECT_PADS_GET_COND (pads)))
|
||||
|
||||
/**
|
||||
* GstCollectPads:
|
||||
* @object: the #GstObject parent structure.
|
||||
* @data: #GList of #GstCollectData managed by this #GstCollectPads.
|
||||
*
|
||||
* Collectpads object.
|
||||
*/
|
||||
struct _GstCollectPads {
|
||||
GstObject object;
|
||||
|
||||
/*< public >*/ /* with LOCK */
|
||||
GSList *data; /* list of CollectData items */
|
||||
|
||||
/*< private >*/
|
||||
guint32 cookie; /* @data list cookie */
|
||||
|
||||
/* with LOCK */
|
||||
GCond *cond; /* to signal removal of data */
|
||||
|
||||
GstCollectPadsFunction func; /* function and user_data for callback */
|
||||
gpointer user_data;
|
||||
|
||||
guint numpads; /* number of pads in @data */
|
||||
guint queuedpads; /* number of pads with a buffer */
|
||||
guint eospads; /* number of pads that are EOS */
|
||||
|
||||
/* with LOCK and PAD_LOCK*/
|
||||
gboolean started;
|
||||
|
||||
/*< private >*/
|
||||
union {
|
||||
struct {
|
||||
/* since 0.10.6 */ /* with PAD_LOCK */
|
||||
GMutex *pad_lock; /* used to serialize add/remove */
|
||||
GSList *pad_list; /* updated pad list */
|
||||
guint32 pad_cookie; /* updated cookie */
|
||||
} ABI;
|
||||
/* adding + 0 to mark ABI change to be undone later */
|
||||
gpointer _gst_reserved[GST_PADDING + 0];
|
||||
} abidata;
|
||||
};
|
||||
|
||||
struct _GstCollectPadsClass {
|
||||
GstObjectClass parent_class;
|
||||
|
||||
/*< private >*/
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
||||
GType gst_collect_pads_get_type(void);
|
||||
|
||||
/* creating the object */
|
||||
GstCollectPads* gst_collect_pads_new (void);
|
||||
|
||||
/* set the callback */
|
||||
void gst_collect_pads_set_function (GstCollectPads *pads, GstCollectPadsFunction func,
|
||||
gpointer user_data);
|
||||
|
||||
/* pad management */
|
||||
GstCollectData* gst_collect_pads_add_pad (GstCollectPads *pads, GstPad *pad, guint size);
|
||||
gboolean gst_collect_pads_remove_pad (GstCollectPads *pads, GstPad *pad);
|
||||
gboolean gst_collect_pads_is_active (GstCollectPads *pads, GstPad *pad);
|
||||
|
||||
/* start/stop collection */
|
||||
GstFlowReturn gst_collect_pads_collect (GstCollectPads *pads);
|
||||
GstFlowReturn gst_collect_pads_collect_range (GstCollectPads *pads, guint64 offset, guint length);
|
||||
|
||||
void gst_collect_pads_start (GstCollectPads *pads);
|
||||
void gst_collect_pads_stop (GstCollectPads *pads);
|
||||
|
||||
/* get collected buffers */
|
||||
GstBuffer* gst_collect_pads_peek (GstCollectPads *pads, GstCollectData *data);
|
||||
GstBuffer* gst_collect_pads_pop (GstCollectPads *pads, GstCollectData *data);
|
||||
|
||||
/* get collected bytes */
|
||||
guint gst_collect_pads_available (GstCollectPads *pads);
|
||||
guint gst_collect_pads_read (GstCollectPads *pads, GstCollectData *data,
|
||||
guint8 **bytes, guint size);
|
||||
guint gst_collect_pads_flush (GstCollectPads *pads, GstCollectData *data,
|
||||
guint size);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_COLLECT_PADS_H__ */
|
||||
@@ -0,0 +1,69 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* 2000 Wim Taymans <wtay@chello.be>
|
||||
* 2005 Wim Taymans <wim@fluendo.com>
|
||||
*
|
||||
* gstpushsrc.h:
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __GST_PUSH_SRC_H__
|
||||
#define __GST_PUSH_SRC_H__
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/base/gstbasesrc.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_PUSH_SRC (gst_push_src_get_type())
|
||||
#define GST_PUSH_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PUSH_SRC,GstPushSrc))
|
||||
#define GST_PUSH_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PUSH_SRC,GstPushSrcClass))
|
||||
#define GST_PUSH_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PUSH_SRC, GstPushSrcClass))
|
||||
#define GST_IS_PUSH_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PUSH_SRC))
|
||||
#define GST_IS_PUSH_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PUSH_SRC))
|
||||
|
||||
typedef struct _GstPushSrc GstPushSrc;
|
||||
typedef struct _GstPushSrcClass GstPushSrcClass;
|
||||
|
||||
/**
|
||||
* GstPushSrc:
|
||||
* @parent: the parent base source object.
|
||||
*
|
||||
* The opaque #GstPushSrc data structure.
|
||||
*/
|
||||
struct _GstPushSrc {
|
||||
GstBaseSrc parent;
|
||||
|
||||
/*< private >*/
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
||||
struct _GstPushSrcClass {
|
||||
GstBaseSrcClass parent_class;
|
||||
|
||||
/* ask the subclass to create a buffer */
|
||||
GstFlowReturn (*create) (GstPushSrc *src, GstBuffer **buf);
|
||||
|
||||
/*< private >*/
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
||||
GType gst_push_src_get_type(void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_PUSH_SRC_H__ */
|
||||
@@ -0,0 +1,66 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* Copyright (C) 2000,2005 Wim Taymans <wim@fluendo.com>
|
||||
* Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
|
||||
*
|
||||
* gsttypefindhelper.h:
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __GST_TYPEFINDHELPER_H__
|
||||
#define __GST_TYPEFINDHELPER_H__
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
GstCaps * gst_type_find_helper (GstPad *src, guint64 size);
|
||||
|
||||
GstCaps * gst_type_find_helper_for_buffer (GstObject *obj,
|
||||
GstBuffer *buf,
|
||||
GstTypeFindProbability *prob);
|
||||
|
||||
/**
|
||||
* GstTypeFindHelperGetRangeFunction:
|
||||
* @obj: a #GstObject that will handle the getrange request
|
||||
* @offset: the offset of the range
|
||||
* @length: the length of the range
|
||||
* @buffer: a memory location to hold the result buffer
|
||||
*
|
||||
* This function will be called by gst_type_find_helper_get_range() when
|
||||
* typefinding functions request to peek at the data of a stream at certain
|
||||
* offsets. If this function returns GST_FLOW_OK, the result buffer will be
|
||||
* stored in @buffer. The contents of @buffer is invalid for any other
|
||||
* return value.
|
||||
*
|
||||
* This function is supposed to behave exactly like a #GstPadGetRangeFunction.
|
||||
*
|
||||
* Returns: GST_FLOW_OK for success
|
||||
*/
|
||||
typedef GstFlowReturn (*GstTypeFindHelperGetRangeFunction) (GstObject *obj,
|
||||
guint64 offset,
|
||||
guint length,
|
||||
GstBuffer **buffer);
|
||||
|
||||
GstCaps * gst_type_find_helper_get_range (GstObject * obj,
|
||||
GstTypeFindHelperGetRangeFunction func,
|
||||
guint64 size,
|
||||
GstTypeFindProbability *prob);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_TYPEFINDHELPER_H__ */
|
||||
Reference in New Issue
Block a user