From e9faf63d2eed43b7e6b643be4e6080b1fe153df8 Mon Sep 17 00:00:00 2001 From: Vivia Nikolaidou Date: Thu, 16 Mar 2023 12:38:23 +0200 Subject: [PATCH] inputselector: Wake up streaming thread before PLAYING_TO_PAUSED transition Also take object lock before iterating the pads. https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1772 Part-of: --- .../gstreamer/plugins/elements/gstinputselector.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/subprojects/gstreamer/plugins/elements/gstinputselector.c b/subprojects/gstreamer/plugins/elements/gstinputselector.c index b55b42bc0a..50a564947d 100644 --- a/subprojects/gstreamer/plugins/elements/gstinputselector.c +++ b/subprojects/gstreamer/plugins/elements/gstinputselector.c @@ -2045,6 +2045,10 @@ gst_input_selector_change_state (GstElement * element, case GST_STATE_CHANGE_PLAYING_TO_PAUSED:{ GList *walk; + GST_INPUT_SELECTOR_LOCK (self); + self->playing = FALSE; + GST_INPUT_SELECTOR_BROADCAST (self); + GST_OBJECT_LOCK (self); for (walk = GST_ELEMENT_CAST (self)->sinkpads; walk; walk = g_list_next (walk)) { GstSelectorPad *selpad = GST_SELECTOR_PAD_CAST (walk->data); @@ -2053,6 +2057,8 @@ gst_input_selector_change_state (GstElement * element, gst_clock_id_unschedule (selpad->clock_id); } } + GST_OBJECT_UNLOCK (self); + GST_INPUT_SELECTOR_UNLOCK (self); break; } default: @@ -2065,10 +2071,6 @@ gst_input_selector_change_state (GstElement * element, case GST_STATE_CHANGE_PAUSED_TO_READY: gst_input_selector_reset (self); break; - case GST_STATE_CHANGE_PLAYING_TO_PAUSED: - GST_INPUT_SELECTOR_LOCK (self); - self->playing = FALSE; - GST_INPUT_SELECTOR_UNLOCK (self); default: break; }