summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorVivia Nikolaidou <vivia@ahiru.eu>2020-08-04 15:49:43 +0300
committerVivia Nikolaidou <vivia@ahiru.eu>2020-08-04 17:28:39 +0300
commitaf9e66d7a575d8bb8c2f9dc12660c989eebe2032 (patch)
treeabcc38a0c32f8d97b75cfdc9eee447fb4c85e2c7 /gst
parenta27e171bfaaef979026bc15244968cca38893ddf (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.c9
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 =