From 4e0b2dc8321138940caaa4efcb104795f060482a Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Tue, 9 Feb 2010 15:51:18 +0100 Subject: [PATCH] multiqueue: Don't stop threads on UNEXPECTED and forward flow returns. When a downstream element returns GST_FLOW_UNEXPECTED we want to: * let the dataqueue task running * forward the flow return upstream. This allows upstream elements to push EOS, and have that EOS event come downstream. Fixes #609274 --- plugins/elements/gstmultiqueue.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c index 0b8439c..6a11431 100644 --- a/plugins/elements/gstmultiqueue.c +++ b/plugins/elements/gstmultiqueue.c @@ -1101,7 +1101,8 @@ gst_multi_queue_loop (GstPad * pad) result = gst_single_queue_push_one (mq, sq, object); sq->srcresult = result; - if (result != GST_FLOW_OK && result != GST_FLOW_NOT_LINKED) + if (result != GST_FLOW_OK && result != GST_FLOW_NOT_LINKED + && result != GST_FLOW_UNEXPECTED) goto out_flushing; GST_LOG_OBJECT (mq, "AFTER PUSHING sq->srcresult: %s", @@ -1148,7 +1149,6 @@ gst_multi_queue_chain (GstPad * pad, GstBuffer * buffer) GstSingleQueue *sq; GstMultiQueue *mq; GstMultiQueueItem *item; - GstFlowReturn ret = GST_FLOW_OK; guint32 curid; GstClockTime timestamp, duration; @@ -1174,14 +1174,13 @@ gst_multi_queue_chain (GstPad * pad, GstBuffer * buffer) apply_buffer (mq, sq, timestamp, duration, &sq->sink_segment); done: - return ret; + return sq->srcresult; /* ERRORS */ flushing: { - ret = sq->srcresult; GST_LOG_OBJECT (mq, "SingleQueue %d : exit because task paused, reason: %s", - sq->id, gst_flow_get_name (ret)); + sq->id, gst_flow_get_name (sq->srcresult)); gst_multi_queue_item_destroy (item); goto done; } -- 2.7.4