summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorEdward Hervey <bilboed@bilboed.com>2010-02-09 15:51:18 +0100
committerEdward Hervey <bilboed@bilboed.com>2010-02-09 16:15:18 +0100
commit4e0b2dc8321138940caaa4efcb104795f060482a (patch)
treec815c7419ad38139181e426855ac8ec8db79f86c /plugins
parent9cc47f8cbaee097818b3a82b23c1d3b5af387b91 (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.c9
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;
}