From 0accb7f700a737646fe3460442cfcfec377ece14 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 21 Jul 2015 00:17:28 -0300 Subject: [PATCH] concat: dot not reset pad states too early Resetting the flushing state of the pads at the end of the PAUSED_TO_READY transition will make pads handle serialized queries again which will wait for non-active pads and might cause deadlocks when stopping the pipeline. Move the reset to the READY_TO_PAUSED instead. https://bugzilla.gnome.org/show_bug.cgi?id=752623 --- plugins/elements/gstconcat.c | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/plugins/elements/gstconcat.c b/plugins/elements/gstconcat.c index 41e93f789b..5397c8e483 100644 --- a/plugins/elements/gstconcat.c +++ b/plugins/elements/gstconcat.c @@ -797,9 +797,21 @@ gst_concat_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED:{ + GstIterator *iter = gst_element_iterate_sink_pads (element); + GstIteratorResult res; + self->format = GST_FORMAT_UNDEFINED; self->current_start_offset = 0; self->last_stop = GST_CLOCK_TIME_NONE; + + do { + res = gst_iterator_foreach (iter, reset_pad, NULL); + } while (res == GST_ITERATOR_RESYNC); + + gst_iterator_free (iter); + + if (res == GST_ITERATOR_ERROR) + return GST_STATE_CHANGE_FAILURE; break; } case GST_STATE_CHANGE_PAUSED_TO_READY:{ @@ -825,28 +837,6 @@ gst_concat_change_state (GstElement * element, GstStateChange transition) } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); - if (ret == GST_STATE_CHANGE_FAILURE) - return ret; - - switch (transition) { - case GST_STATE_CHANGE_PAUSED_TO_READY:{ - GstIterator *iter = gst_element_iterate_sink_pads (element); - GstIteratorResult res; - - do { - res = gst_iterator_foreach (iter, reset_pad, NULL); - } while (res == GST_ITERATOR_RESYNC); - - gst_iterator_free (iter); - - if (res == GST_ITERATOR_ERROR) - return GST_STATE_CHANGE_FAILURE; - - break; - } - default: - break; - } return ret; }