diff options
author | Stefan Kost <ensonic@users.sf.net> | 2010-08-24 11:26:52 +0300 |
---|---|---|
committer | Stefan Kost <ensonic@users.sf.net> | 2010-09-06 10:24:06 +0300 |
commit | 10776e474d206f25bb56acae25022565f8b13e2d (patch) | |
tree | 9898912768b84b7837b4f7dd14a35b9b9bb77b62 /gst/debugutils/fpsdisplaysink.c | |
parent | 9a03a43696f56d9feee07999cbe7ba8aab155eac (diff) | |
download | gstreamer-plugins-bad-10776e474d206f25bb56acae25022565f8b13e2d.tar.gz |
fpsdisplaysink: don't add a g_mainloop dependency
Just update the fps-message from the probe handler.
Diffstat (limited to 'gst/debugutils/fpsdisplaysink.c')
-rw-r--r-- | gst/debugutils/fpsdisplaysink.c | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/gst/debugutils/fpsdisplaysink.c b/gst/debugutils/fpsdisplaysink.c index bde8ac98e..ba5649b86 100644 --- a/gst/debugutils/fpsdisplaysink.c +++ b/gst/debugutils/fpsdisplaysink.c @@ -222,11 +222,13 @@ on_video_sink_data_flow (GstPad * pad, GstMiniObject * mini_obj, self->frames_dropped++; } - if (G_UNLIKELY (!self->timeout_id)) { - self->last_ts = self->start_ts = gst_util_get_timestamp (); - self->timeout_id = - g_timeout_add (self->fps_update_interval, display_current_fps, - (gpointer) self); + ts = gst_util_get_timestamp (); + if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (self->start_ts))) { + self->last_ts = self->start_ts = ts; + } + if (GST_CLOCK_DIFF (self->interval_ts, ts) > self->fps_update_interval) { + display_current_fps (self); + self->interval_ts = ts; } } } @@ -311,7 +313,7 @@ fps_display_sink_init (GstFPSDisplaySink * self, self->sync = FALSE; self->signal_measurements = DEFAULT_SIGNAL_FPS_MEASUREMENTS; self->use_text_overlay = TRUE; - self->fps_update_interval = DEFAULT_FPS_UPDATE_INTERVAL_MS; + self->fps_update_interval = GST_MSECOND * DEFAULT_FPS_UPDATE_INTERVAL_MS; self->video_sink = NULL; self->max_fps = -1; self->min_fps = -1; @@ -403,6 +405,9 @@ fps_display_sink_start (GstFPSDisplaySink * self) self->max_fps = -1; self->min_fps = -1; + /* init time stamps */ + self->last_ts = self->start_ts = self->interval_ts = GST_CLOCK_TIME_NONE; + GST_DEBUG_OBJECT (self, "Use text-overlay? %d", self->use_text_overlay); if (self->use_text_overlay) { @@ -436,21 +441,11 @@ no_text_overlay: } gst_ghost_pad_set_target (GST_GHOST_PAD (self->ghost_pad), target_pad); gst_object_unref (target_pad); - - /* Set a timeout for the fps display */ - GST_DEBUG_OBJECT (self, "setting a timeout with a %dms interval", - self->fps_update_interval); } static void fps_display_sink_stop (GstFPSDisplaySink * self) { - /* remove the timeout */ - if (self->timeout_id) { - g_source_remove (self->timeout_id); - self->timeout_id = 0; - } - if (self->text_overlay) { gst_element_unlink (self->text_overlay, self->video_sink); gst_bin_remove (GST_BIN (self), self->text_overlay); @@ -516,7 +511,8 @@ fps_display_sink_set_property (GObject * object, guint prop_id, update_video_sink (self, (GstElement *) g_value_get_object (value)); break; case ARG_FPS_UPDATE_INTERVAL: - self->fps_update_interval = g_value_get_int (value); + self->fps_update_interval = + GST_MSECOND * (GstClockTime) g_value_get_int (value); break; case ARG_SIGNAL_FPS_MEASUREMENTS: self->signal_measurements = g_value_get_boolean (value); @@ -544,7 +540,7 @@ fps_display_sink_get_property (GObject * object, guint prop_id, g_value_set_object (value, self->video_sink); break; case ARG_FPS_UPDATE_INTERVAL: - g_value_set_int (value, self->fps_update_interval); + g_value_set_int (value, (gint) (self->fps_update_interval / GST_MSECOND)); break; case ARG_MAX_FPS: g_value_set_double (value, self->max_fps); |