mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 04:31:06 +00:00
multiqueue: handle UNEXPECTED flowreturn better
When we receive an UNEXPECTED flowreturn from downstream, we must not shutdown the pushing thread because upstream will at some point push an EOS that we still need to push further downstream. To achieve this, convert the UNEXPECTED return value to OK. Add a fixme so that we implement the right logic to propagate the flowreturn upstream at some point. Also clean up the unit test a little. Fixes #608136
This commit is contained in:
parent
69e23983a4
commit
fbdf4dceda
2 changed files with 9 additions and 2 deletions
|
@ -917,6 +917,13 @@ gst_single_queue_push_one (GstMultiQueue * mq, GstSingleQueue * sq,
|
||||||
gst_pad_set_caps (sq->srcpad, caps);
|
gst_pad_set_caps (sq->srcpad, caps);
|
||||||
|
|
||||||
result = gst_pad_push (sq->srcpad, buffer);
|
result = gst_pad_push (sq->srcpad, buffer);
|
||||||
|
|
||||||
|
if (result == GST_FLOW_UNEXPECTED) {
|
||||||
|
GST_LOG_OBJECT (mq, "got UNEXPECTED from downstream");
|
||||||
|
/* FIXME, dequeue items until we see EOS or NEWSEGMENT. If the queue is
|
||||||
|
* empty, set a flag so that we pass unexpected upstream. */
|
||||||
|
result = GST_FLOW_OK;
|
||||||
|
}
|
||||||
} else if (GST_IS_EVENT (object)) {
|
} else if (GST_IS_EVENT (object)) {
|
||||||
GstEvent *event;
|
GstEvent *event;
|
||||||
|
|
||||||
|
|
|
@ -479,13 +479,13 @@ run_output_order_test (gint n_linked)
|
||||||
|
|
||||||
/* Wait while the buffers are processed */
|
/* Wait while the buffers are processed */
|
||||||
g_mutex_lock (mutex);
|
g_mutex_lock (mutex);
|
||||||
while (eos_seen < 5) {
|
while (eos_seen < NPADS) {
|
||||||
g_cond_wait (cond, mutex);
|
g_cond_wait (cond, mutex);
|
||||||
}
|
}
|
||||||
g_mutex_unlock (mutex);
|
g_mutex_unlock (mutex);
|
||||||
|
|
||||||
/* Clean up */
|
/* Clean up */
|
||||||
for (i = 0; i < 5; i++) {
|
for (i = 0; i < NPADS; i++) {
|
||||||
GstPad *mq_input = gst_pad_get_peer (inputpads[i]);
|
GstPad *mq_input = gst_pad_get_peer (inputpads[i]);
|
||||||
|
|
||||||
gst_pad_unlink (inputpads[i], mq_input);
|
gst_pad_unlink (inputpads[i], mq_input);
|
||||||
|
|
Loading…
Reference in a new issue