From 06be1f8b52eb486b3fe0936f935eec9ea12339ef Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 29 Mar 2021 17:03:33 +0200 Subject: [PATCH] gstmedia: Ensure we prepare files without duration In particular this fixes playback of images. Fixes #3810 --- modules/media/gtkgstmediafile.c | 35 ++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/modules/media/gtkgstmediafile.c b/modules/media/gtkgstmediafile.c index 6382f3b10a..7edc682e9c 100644 --- a/modules/media/gtkgstmediafile.c +++ b/modules/media/gtkgstmediafile.c @@ -127,17 +127,8 @@ g_io_module_query (void) } static void -gtk_gst_media_file_position_updated_cb (GstPlayer *player, - GstClockTime time, - GtkGstMediaFile *self) -{ - gtk_media_stream_update (GTK_MEDIA_STREAM (self), FROM_GST_TIME (time)); -} - -static void -gtk_gst_media_file_duration_changed_cb (GstPlayer *player, - GstClockTime duration, - GtkGstMediaFile *self) +gtk_gst_media_file_ensure_prepared (GtkGstMediaFile *self, + gint64 duration) { if (gtk_media_stream_is_prepared (GTK_MEDIA_STREAM (self))) return; @@ -146,7 +137,25 @@ gtk_gst_media_file_duration_changed_cb (GstPlayer *player, TRUE, TRUE, TRUE, - FROM_GST_TIME (duration)); + duration); +} + +static void +gtk_gst_media_file_position_updated_cb (GstPlayer *player, + GstClockTime time, + GtkGstMediaFile *self) +{ + gtk_gst_media_file_ensure_prepared (self, 0); + + gtk_media_stream_update (GTK_MEDIA_STREAM (self), FROM_GST_TIME (time)); +} + +static void +gtk_gst_media_file_duration_changed_cb (GstPlayer *player, + GstClockTime duration, + GtkGstMediaFile *self) +{ + gtk_gst_media_file_ensure_prepared (self, FROM_GST_TIME (duration)); } static void @@ -176,6 +185,8 @@ static void gtk_gst_media_file_end_of_stream_cb (GstPlayer *player, GtkGstMediaFile *self) { + gtk_gst_media_file_ensure_prepared (self, 0); + if (gtk_media_stream_get_ended (GTK_MEDIA_STREAM (self))) return;