#define __GST_QUEUE_H__
#include <gst/gst.h>
+#include "gstqueuearray.h"
G_BEGIN_DECLS
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_QUEUE))
#define GST_IS_QUEUE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))
-
-enum {
- GST_QUEUE_NO_LEAK = 0,
- GST_QUEUE_LEAK_UPSTREAM = 1,
- GST_QUEUE_LEAK_DOWNSTREAM = 2
-};
+#define GST_QUEUE_CAST(obj) \
+ ((GstQueue *)(obj))
typedef struct _GstQueue GstQueue;
typedef struct _GstQueueSize GstQueueSize;
+typedef enum _GstQueueLeaky GstQueueLeaky;
typedef struct _GstQueueClass GstQueueClass;
/**
+ * GstQueueLeaky:
+ * @GST_QUEUE_NO_LEAK: Not Leaky
+ * @GST_QUEUE_LEAK_UPSTREAM: Leaky on upstream (new buffers)
+ * @GST_QUEUE_LEAK_DOWNSTREAM: Leaky on downstream (old buffers)
+ *
+ * Buffer dropping scheme to avoid the queue to block when full.
+ */
+enum _GstQueueLeaky {
+ GST_QUEUE_NO_LEAK = 0,
+ GST_QUEUE_LEAK_UPSTREAM = 1,
+ GST_QUEUE_LEAK_DOWNSTREAM = 2
+};
+
+/*
* GstQueueSize:
* @buffers: number of buffers
* @bytes: number of bytes
gboolean eos;
/* the queue of data we're keeping our grubby hands on */
- GQueue *queue;
+ GstQueueArray queue;
GstQueueSize
cur_level, /* currently in the queue */
/* whether we leak data, and at which end */
gint leaky;
- GMutex *qlock; /* lock for queue (vs object lock) */
- GCond *item_add; /* signals buffers now available for reading */
- GCond *item_del; /* signals space now available for writing */
+ GMutex qlock; /* lock for queue (vs object lock) */
+ gboolean waiting_add;
+ GCond item_add; /* signals buffers now available for reading */
+ gboolean waiting_del;
+ GCond item_del; /* signals space now available for writing */
gboolean head_needs_discont, tail_needs_discont;
gboolean push_newsegment;
+
+ gboolean silent; /* don't emit signals */
+
+ /* whether the first new segment has been applied to src */
+ gboolean newseg_applied_to_src;
+
+ gboolean last_query;
};
struct _GstQueueClass {
void (*pushing) (GstQueue *queue);
};
-GType gst_queue_get_type (void);
+G_GNUC_INTERNAL GType gst_queue_get_type (void);
G_END_DECLS