summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2010-11-01 11:28:28 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2010-11-01 11:28:28 +0100
commit7b0cffb079234b6f351f536af080a4095aee3736 (patch)
tree740cfe2438788e4d8278eccec955c52678e98a31
parent4384708fbae08c982a03d795e9c1b8d36e9ca0f9 (diff)
queue: try another batch version, doesn't workqueue-batch3
-rw-r--r--plugins/elements/gstqueue.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c
index 6989faf56..cec25148d 100644
--- a/plugins/elements/gstqueue.c
+++ b/plugins/elements/gstqueue.c
@@ -691,7 +691,14 @@ gst_queue_locked_enqueue_buffer (GstQueue * queue, gpointer item)
apply_buffer (queue, buffer, &queue->sink_segment, TRUE, TRUE);
g_queue_push_tail (queue->queue, item);
- GST_QUEUE_SIGNAL_ADD (queue);
+
+ if (queue->waiting_add) {
+ /* the other end is empty and is waiting for something. We only want to
+ * signal when the queue is not empty, which means that we have at least
+ * min-threshold in the queue. */
+ if (!gst_queue_is_empty (queue))
+ GST_QUEUE_SIGNAL_ADD (queue);
+ }
}
static inline void
@@ -783,7 +790,13 @@ gst_queue_locked_dequeue (GstQueue * queue, gboolean * is_buffer)
item, GST_OBJECT_NAME (queue));
item = NULL;
}
- GST_QUEUE_SIGNAL_DEL (queue);
+
+ if (queue->waiting_del) {
+ /* The other end is waiting for more space, we want to signal it when we
+ * have consumed min-threshold. */
+ if (!gst_queue_is_filled (queue))
+ GST_QUEUE_SIGNAL_DEL (queue);
+ }
return item;