[Bug 746808] Queue with min-threshold stalls dynamic pipeline

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Fri Apr 3 06:58:34 PDT 2015


https://bugzilla.gnome.org/show_bug.cgi?id=746808

--- Comment #4 from Vincent Penquerc'h <vincent.penquerch at collabora.co.uk> ---
What seems to be happening is that an allocation query is sent from the source
after the second sink is plugged, and is pushed onto the queue's, er, queue.

Normally, the queue's thread will push whatever's in the queue's queue if
possible. If the first item is not a buffer or buffer list (for instance, if it
is an allocation query), it will be sent. However, in this case, the allocation
query is at the end of the queue's queue, which happens not to be its head too
as there's close to 3 seconds' worth of buffers waiting there. One more buffer
incoming would cause the queue to push again, but it's now waiting for the
allocation query to be answered from upstream, which it won't since the push
thread isn't pushing.

I can't clear the queue, as it would drop those three seconds. Maybe I could
slip the allocation query in front of the queue, which would work I think, but
I'm not sure how best to select which set of events/queries to prepend instead
of append. In general, we want to keep ordering between buffers and events.
Worse, gst/gstquery.h shows the allocation query to be serialized.

Another possibility would be to temporarily disregard the min-threshold when an
allocation query (and maybe a set of other events/queries) is received, until
this query (or other event/query) has been pushed by the queue's thread. This
would seem to be like a good compromise, but (1) might upset whatever caused
min-threshold to be used (unfluid playback ?), and (2) would also need to
choose which set of events/queries would cause this temporary override.

Any gst maintainer with an opinion on this ?

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list