Blame libs/gst/base/gstdataqueue.h

Packit f546b1
/* GStreamer
Packit f546b1
 * Copyright (C) 2006 Edward Hervey <edward@fluendo.com>
Packit f546b1
 *
Packit f546b1
 * gstdataqueue.h:
Packit f546b1
 *
Packit f546b1
 * This library is free software; you can redistribute it and/or
Packit f546b1
 * modify it under the terms of the GNU Library General Public
Packit f546b1
 * License as published by the Free Software Foundation; either
Packit f546b1
 * version 2 of the License, or (at your option) any later version.
Packit f546b1
 *
Packit f546b1
 * This library is distributed in the hope that it will be useful,
Packit f546b1
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit f546b1
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit f546b1
 * Library General Public License for more details.
Packit f546b1
 *
Packit f546b1
 * You should have received a copy of the GNU Library General Public
Packit f546b1
 * License along with this library; if not, write to the
Packit f546b1
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
Packit f546b1
 * Boston, MA 02110-1301, USA.
Packit f546b1
 */
Packit f546b1
Packit f546b1
Packit f546b1
#ifndef __GST_DATA_QUEUE_H__
Packit f546b1
#define __GST_DATA_QUEUE_H__
Packit f546b1
Packit f546b1
#include <gst/gst.h>
Packit f546b1
#include <gst/base/base-prelude.h>
Packit f546b1
Packit f546b1
G_BEGIN_DECLS
Packit f546b1
#define GST_TYPE_DATA_QUEUE \
Packit f546b1
  (gst_data_queue_get_type())
Packit f546b1
#define GST_DATA_QUEUE(obj) \
Packit f546b1
  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DATA_QUEUE,GstDataQueue))
Packit f546b1
#define GST_DATA_QUEUE_CLASS(klass) \
Packit f546b1
  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DATA_QUEUE,GstDataQueueClass))
Packit f546b1
#define GST_IS_DATA_QUEUE(obj) \
Packit f546b1
  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DATA_QUEUE))
Packit f546b1
#define GST_IS_DATA_QUEUE_CLASS(klass) \
Packit f546b1
  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DATA_QUEUE))
Packit f546b1
Packit f546b1
typedef struct _GstDataQueue GstDataQueue;
Packit f546b1
typedef struct _GstDataQueueClass GstDataQueueClass;
Packit f546b1
typedef struct _GstDataQueueSize GstDataQueueSize;
Packit f546b1
typedef struct _GstDataQueueItem GstDataQueueItem;
Packit f546b1
typedef struct _GstDataQueuePrivate GstDataQueuePrivate;
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GstDataQueueItem: (skip)
Packit f546b1
 * @object: the #GstMiniObject to queue.
Packit f546b1
 * @size: the size in bytes of the miniobject.
Packit f546b1
 * @duration: the duration in #GstClockTime of the miniobject. Can not be
Packit f546b1
 * %GST_CLOCK_TIME_NONE.
Packit f546b1
 * @visible: %TRUE if @object should be considered as a visible object.
Packit f546b1
 * @destroy: The #GDestroyNotify function to use to free the #GstDataQueueItem.
Packit f546b1
 * This function should also drop the reference to @object the owner of the
Packit f546b1
 * #GstDataQueueItem is assumed to hold.
Packit f546b1
 *
Packit f546b1
 * Structure used by #GstDataQueue. You can supply a different structure, as
Packit f546b1
 * long as the top of the structure is identical to this structure.
Packit f546b1
 */
Packit f546b1
Packit f546b1
struct _GstDataQueueItem
Packit f546b1
{
Packit f546b1
  GstMiniObject *object;
Packit f546b1
  guint size;
Packit f546b1
  guint64 duration;
Packit f546b1
  gboolean visible;
Packit f546b1
Packit f546b1
  /* user supplied destroy function */
Packit f546b1
  GDestroyNotify destroy;
Packit f546b1
Packit f546b1
  /* < private > */
Packit f546b1
  gpointer _gst_reserved[GST_PADDING];
Packit f546b1
};
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GstDataQueueSize: (skip)
Packit f546b1
 * @visible: number of buffers
Packit f546b1
 * @bytes: number of bytes
Packit f546b1
 * @time: amount of time
Packit f546b1
 *
Packit f546b1
 * Structure describing the size of a queue.
Packit f546b1
 */
Packit f546b1
struct _GstDataQueueSize
Packit f546b1
{
Packit f546b1
  guint visible;
Packit f546b1
  guint bytes;
Packit f546b1
  guint64 time;
Packit f546b1
};
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GstDataQueueCheckFullFunction: (skip)
Packit f546b1
 * @queue: a #GstDataQueue.
Packit f546b1
 * @visible: The number of visible items currently in the queue.
Packit f546b1
 * @bytes: The amount of bytes currently in the queue.
Packit f546b1
 * @time: The accumulated duration of the items currently in the queue.
Packit f546b1
 * @checkdata: The #gpointer registered when the #GstDataQueue was created.
Packit f546b1
 *
Packit f546b1
 * The prototype of the function used to inform the queue that it should be
Packit f546b1
 * considered as full.
Packit f546b1
 *
Packit f546b1
 * Returns: %TRUE if the queue should be considered full.
Packit f546b1
 */
Packit f546b1
typedef gboolean (*GstDataQueueCheckFullFunction) (GstDataQueue * queue,
Packit f546b1
    guint visible, guint bytes, guint64 time, gpointer checkdata);
Packit f546b1
Packit f546b1
typedef void (*GstDataQueueFullCallback) (GstDataQueue * queue, gpointer checkdata);
Packit f546b1
typedef void (*GstDataQueueEmptyCallback) (GstDataQueue * queue, gpointer checkdata);
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GstDataQueue:
Packit f546b1
 * @object: the parent structure
Packit f546b1
 *
Packit f546b1
 * Opaque #GstDataQueue structure.
Packit f546b1
 */
Packit f546b1
struct _GstDataQueue
Packit f546b1
{
Packit f546b1
  GObject object;
Packit f546b1
Packit f546b1
  /*< private >*/
Packit f546b1
  GstDataQueuePrivate *priv;
Packit f546b1
  gpointer _gst_reserved[GST_PADDING];
Packit f546b1
};
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GstDataQueueClass:
Packit f546b1
 */
Packit f546b1
struct _GstDataQueueClass
Packit f546b1
{
Packit f546b1
  GObjectClass parent_class;
Packit f546b1
Packit f546b1
  /* signals */
Packit f546b1
  void (*empty) (GstDataQueue * queue);
Packit f546b1
  void (*full) (GstDataQueue * queue);
Packit f546b1
Packit f546b1
  gpointer _gst_reserved[GST_PADDING];
Packit f546b1
};
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
GType          gst_data_queue_get_type (void);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
GstDataQueue * gst_data_queue_new            (GstDataQueueCheckFullFunction checkfull,
Packit f546b1
					      GstDataQueueFullCallback fullcallback,
Packit f546b1
					      GstDataQueueEmptyCallback emptycallback,
Packit f546b1
					      gpointer checkdata) G_GNUC_MALLOC;
Packit f546b1
GST_BASE_API
Packit f546b1
gboolean       gst_data_queue_push           (GstDataQueue * queue, GstDataQueueItem * item);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
gboolean       gst_data_queue_push_force     (GstDataQueue * queue, GstDataQueueItem * item);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
gboolean       gst_data_queue_pop            (GstDataQueue * queue, GstDataQueueItem ** item);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
gboolean       gst_data_queue_peek           (GstDataQueue * queue, GstDataQueueItem ** item);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
void           gst_data_queue_flush          (GstDataQueue * queue);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
void           gst_data_queue_set_flushing   (GstDataQueue * queue, gboolean flushing);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
gboolean       gst_data_queue_drop_head      (GstDataQueue * queue, GType type);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
gboolean       gst_data_queue_is_full        (GstDataQueue * queue);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
gboolean       gst_data_queue_is_empty       (GstDataQueue * queue);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
void           gst_data_queue_get_level      (GstDataQueue * queue, GstDataQueueSize *level);
Packit f546b1
Packit f546b1
GST_BASE_API
Packit f546b1
void           gst_data_queue_limits_changed (GstDataQueue * queue);
Packit f546b1
Packit f546b1
#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
Packit f546b1
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDataQueue, gst_object_unref)
Packit f546b1
#endif
Packit f546b1
Packit f546b1
G_END_DECLS
Packit f546b1
Packit f546b1
#endif /* __GST_DATA_QUEUE_H__ */