diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2010-11-01 11:28:28 +0100 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2010-11-01 11:28:28 +0100 |
commit | 7b0cffb079234b6f351f536af080a4095aee3736 (patch) | |
tree | 740cfe2438788e4d8278eccec955c52678e98a31 | |
parent | 4384708fbae08c982a03d795e9c1b8d36e9ca0f9 (diff) |
queue: try another batch version, doesn't workqueue-batch3
-rw-r--r-- | plugins/elements/gstqueue.c | 17 |
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; |