fpsdisplaysink: Log final statistics on stop

Add a final message to the debug log that lists the min, max and average framerates when state of fpsdisplaysink transisions to NULL.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3988>
This commit is contained in:
Colin Kinloch 2023-02-17 17:29:32 +00:00 committed by GStreamer Marge Bot
parent 573eecac30
commit 56cc2132da

View file

@ -363,6 +363,9 @@ display_current_fps (gpointer data)
time_diff = (gdouble) (current_ts - self->last_ts) / GST_SECOND;
time_elapsed = (gdouble) (current_ts - self->start_ts) / GST_SECOND;
if (G_UNLIKELY (time_diff <= 0 && time_elapsed <= 0))
return TRUE;
rr = (gdouble) (frames_rendered - self->last_frames_rendered) / time_diff;
dr = (gdouble) (frames_dropped - self->last_frames_dropped) / time_diff;
@ -476,6 +479,22 @@ no_text_overlay:
static void
fps_display_sink_stop (GstFPSDisplaySink * self)
{
gchar *fps_message;
gdouble time_elapsed, average_fps;
time_elapsed = (gdouble) (self->last_ts - self->start_ts) / GST_SECOND;
if (G_LIKELY (time_elapsed > 0))
average_fps = (gdouble) self->frames_rendered / time_elapsed;
else
average_fps = 0;
/* print the max and minimum fps values */
fps_message =
g_strdup_printf ("Max-fps: %0.2f, Min-fps: %0.2f, Average-fps: %0.2f",
self->max_fps, self->min_fps, average_fps);
GST_DEBUG_OBJECT (self, "%s", fps_message);
if (self->text_overlay) {
gst_element_unlink (self->text_overlay, self->video_sink);
gst_bin_remove (GST_BIN (self), self->text_overlay);
@ -484,17 +503,13 @@ fps_display_sink_stop (GstFPSDisplaySink * self)
}
if (!self->silent) {
gchar *str;
/* print the max and minimum fps values */
str =
g_strdup_printf ("Max-fps: %0.2f, Min-fps: %0.2f", self->max_fps,
self->min_fps);
GST_OBJECT_LOCK (self);
g_free (self->last_message);
self->last_message = str;
self->last_message = fps_message;
GST_OBJECT_UNLOCK (self);
g_object_notify_by_pspec ((GObject *) self, pspec_last_message);
} else {
g_free (fps_message);
}
GST_OBJECT_LOCK (self);