mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
queue: Fix handling of min-threshold and serialized queries
Only consider the queue empty if the minimum thresholds are not reached and data is at the queue head. Otherwise we would block forever on serialized queries. This also makes sending of serialized events, like caps, happen faster and potentially improves negotiation performance. Fixes bug #679458.
This commit is contained in:
parent
f6e8786be8
commit
af73f3fc02
1 changed files with 10 additions and 0 deletions
|
@ -821,9 +821,19 @@ out_flushing:
|
|||
static gboolean
|
||||
gst_queue_is_empty (GstQueue * queue)
|
||||
{
|
||||
GstMiniObject *head;
|
||||
|
||||
if (queue->queue->length == 0)
|
||||
return TRUE;
|
||||
|
||||
/* Only consider the queue empty if the minimum thresholds
|
||||
* are not reached and data is at the queue head. Otherwise
|
||||
* we would block forever on serialized queries.
|
||||
*/
|
||||
head = queue->queue->array[queue->queue->head];
|
||||
if (!GST_IS_BUFFER (head) && !GST_IS_BUFFER_LIST (head))
|
||||
return FALSE;
|
||||
|
||||
/* It is possible that a max size is reached before all min thresholds are.
|
||||
* Therefore, only consider it empty if it is not filled. */
|
||||
return ((queue->min_threshold.buffers > 0 &&
|
||||
|
|
Loading…
Reference in a new issue