multiqueue: never consider a queue that is not waiting

.. when computing the high id.

After a flush for instance, sq->srcresult is reset to OK,
yet it doesn't make sense to pick a non-existing position
id as the high id when a queue doesn't contain any items
in that situation either.

It is in any case completely OK to let the not-linked stream
get consumed without throttling at this stage, as any
first packet arriving on other single queues will get assigned
a higher position id.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1271>
This commit is contained in:
Mathieu Duponchelle 2021-09-09 20:25:25 +02:00 committed by GStreamer Marge Bot
parent 8eebe19cae
commit 33ea698ef3

View file

@ -2972,7 +2972,6 @@ compute_high_id (GstMultiQueue * mq)
GST_LOG_OBJECT (mq, "inspecting sq:%d , nextid:%d, oldid:%d, srcresult:%s", GST_LOG_OBJECT (mq, "inspecting sq:%d , nextid:%d, oldid:%d, srcresult:%s",
sq->id, sq->nextid, sq->oldid, gst_flow_get_name (sq->srcresult)); sq->id, sq->nextid, sq->oldid, gst_flow_get_name (sq->srcresult));
if (sq->srcresult == GST_FLOW_NOT_LINKED) {
/* No need to consider queues which are not waiting */ /* No need to consider queues which are not waiting */
if (sq->nextid == 0) { if (sq->nextid == 0) {
GST_LOG_OBJECT (mq, "sq:%d is not waiting - ignoring", sq->id); GST_LOG_OBJECT (mq, "sq:%d is not waiting - ignoring", sq->id);
@ -2980,6 +2979,7 @@ compute_high_id (GstMultiQueue * mq)
continue; continue;
} }
if (sq->srcresult == GST_FLOW_NOT_LINKED) {
if (sq->nextid < lowest) if (sq->nextid < lowest)
lowest = sq->nextid; lowest = sq->nextid;
} else if (!GST_PAD_IS_EOS (srcpad) && sq->srcresult != GST_FLOW_EOS) { } else if (!GST_PAD_IS_EOS (srcpad) && sq->srcresult != GST_FLOW_EOS) {