diff options
author | Vivia Nikolaidou <vivia@ahiru.eu> | 2020-08-04 15:49:43 +0300 |
---|---|---|
committer | Vivia Nikolaidou <vivia@ahiru.eu> | 2020-08-04 17:28:39 +0300 |
commit | af9e66d7a575d8bb8c2f9dc12660c989eebe2032 (patch) | |
tree | abcc38a0c32f8d97b75cfdc9eee447fb4c85e2c7 /gst | |
parent | a27e171bfaaef979026bc15244968cca38893ddf (diff) |
imagefreeze: Wait until we have a clock
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/691>
Diffstat (limited to 'gst')
-rw-r--r-- | gst/imagefreeze/gstimagefreeze.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gst/imagefreeze/gstimagefreeze.c b/gst/imagefreeze/gstimagefreeze.c index 7a287a616..9e50bc626 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 = |