From af9e66d7a575d8bb8c2f9dc12660c989eebe2032 Mon Sep 17 00:00:00 2001 From: Vivia Nikolaidou Date: Tue, 4 Aug 2020 15:49:43 +0300 Subject: [PATCH] imagefreeze: Wait until we have a clock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise it can happen that it tries to get the clock in PAUSED state in live mode, which does not exist. Thanks to Sebastian Dröge for helping debugging. Fixes #775 Part-of: --- gst/imagefreeze/gstimagefreeze.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gst/imagefreeze/gstimagefreeze.c b/gst/imagefreeze/gstimagefreeze.c index 7a287a616f..9e50bc6265 100644 --- a/gst/imagefreeze/gstimagefreeze.c +++ b/gst/imagefreeze/gstimagefreeze.c @@ -962,19 +962,24 @@ gst_image_freeze_src_loop (GstPad * pad) GstClockReturn clock_ret; GstClock *clock; + clock = gst_element_get_clock (GST_ELEMENT (self)); + /* Wait until the element went to PLAYING or flushing */ - while (self->blocked && !self->flushing) + while ((!clock || self->blocked) && !self->flushing) { g_cond_wait (&self->blocked_cond, &self->lock); + gst_clear_object (&clock); + clock = gst_element_get_clock (GST_ELEMENT (self)); + } if (self->flushing) { g_mutex_unlock (&self->lock); gst_buffer_unref (buffer); flow_ret = GST_FLOW_FLUSHING; + gst_clear_object (&clock); goto pause_task; } /* Wait on the clock until the time for our current frame is reached */ - clock = gst_element_get_clock (GST_ELEMENT (self)); base_time = gst_element_get_base_time (GST_ELEMENT (self)); if (self->fps_n != 0) { clock_time =