diff options
author | Edward Hervey <bilboed@bilboed.com> | 2010-02-09 15:51:18 +0100 |
---|---|---|
committer | Edward Hervey <bilboed@bilboed.com> | 2010-02-09 16:15:18 +0100 |
commit | 4e0b2dc8321138940caaa4efcb104795f060482a (patch) | |
tree | c815c7419ad38139181e426855ac8ec8db79f86c /plugins | |
parent | 9cc47f8cbaee097818b3a82b23c1d3b5af387b91 (diff) |
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
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/elements/gstmultiqueue.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c index 0b8439cc1a..6a11431252 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; } |