queue2: avoid ping-pong between 0% and 100% buffering messages
authorMatthew Waters <matthew@centricular.com>
Thu, 17 May 2018 11:09:36 +0000 (21:09 +1000)
committerEdward Hervey <bilboed@bilboed.com>
Wed, 7 Nov 2018 15:04:14 +0000 (15:04 +0000)
commitc4ccff786152a70f42f13b9406e1c992fffedf7a
treea34c0735396b531a7734a4eb5d3b28d705adc5d3
parente1be0652932c6538648035caccd75618b8f836a0
queue2: avoid ping-pong between 0% and 100% buffering messages

If upstream is pushing buffers larger than our limits, only 1 buffer
is ever in the queue at a time.  Once that single buffer has left the
queue, a 0% buffering message would be posted followed immediately by a
100% buffering message when the next buffer was inserted into the queue
a very short time later.  As per the recommendations, This would result
in the application pausing for a short while causing the appearance of
a short stutter.

The first step of a solution involves not posting a buffering message if
there is still data waiting on the sink pad for insertion into the queue.
This successfully drops the 0% messages from being posted however a
message is still posted on each transition to 100% when the new buffer
arrives resulting in a string of 100% buffering messages.  We silence
these by storing the last posted buffering percentage and only posting a
new message when it is different from or last posted message.
plugins/elements/gstqueue2.c
plugins/elements/gstqueue2.h