diff options
author | Benjamin Otte <otte.benjamin@googlemail.com> | 2021-03-29 15:41:55 +0000 |
---|---|---|
committer | Benjamin Otte <otte.benjamin@googlemail.com> | 2021-03-29 15:41:55 +0000 |
commit | 6569a877d828d0c31b4349373b8363b2fe480456 (patch) | |
tree | 2001c2ce279c344b2538b28380d736e5f1ac80f9 | |
parent | b21fba117f2f2b1d6cf7eaf24ea4118948b809d9 (diff) | |
parent | 38fff37daec3c8ec679717c93650fed2a5999bde (diff) | |
download | gtk+-6569a877d828d0c31b4349373b8363b2fe480456.tar.gz |
Merge branch 'wip/otte/for-master' into 'master'
Wip/otte/for master
Closes #3810
See merge request GNOME/gtk!3366
-rw-r--r-- | gtk/gtkmediastream.c | 6 | ||||
-rw-r--r-- | modules/media/gtkgstmediafile.c | 27 |
2 files changed, 25 insertions, 8 deletions
diff --git a/gtk/gtkmediastream.c b/gtk/gtkmediastream.c index 8635b6bb4c..1b3d1c1115 100644 --- a/gtk/gtkmediastream.c +++ b/gtk/gtkmediastream.c @@ -1263,6 +1263,8 @@ gtk_media_stream_error_valist (GtkMediaStream *self, * * It is up to implementations to call this at the frequency * they deem appropriate. + * + * The media stream must be prepared when this function is called. */ void gtk_media_stream_update (GtkMediaStream *self, @@ -1271,6 +1273,7 @@ gtk_media_stream_update (GtkMediaStream *self, GtkMediaStreamPrivate *priv = gtk_media_stream_get_instance_private (self); g_return_if_fail (GTK_IS_MEDIA_STREAM (self)); + g_return_if_fail (gtk_media_stream_is_prepared (self)); g_object_freeze_notify (G_OBJECT (self)); @@ -1301,6 +1304,8 @@ gtk_media_stream_update (GtkMediaStream *self, * * This is a hint only, calls to GtkMediaStream.play() * may still happen. + * + * The media stream must be prepared when this function is called. */ void gtk_media_stream_ended (GtkMediaStream *self) @@ -1308,6 +1313,7 @@ gtk_media_stream_ended (GtkMediaStream *self) GtkMediaStreamPrivate *priv = gtk_media_stream_get_instance_private (self); g_return_if_fail (GTK_IS_MEDIA_STREAM (self)); + g_return_if_fail (gtk_media_stream_is_prepared (self)); g_return_if_fail (!gtk_media_stream_get_ended (self)); g_object_freeze_notify (G_OBJECT (self)); 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,10 +127,26 @@ g_io_module_query (void) } static void +gtk_gst_media_file_ensure_prepared (GtkGstMediaFile *self, + gint64 duration) +{ + if (gtk_media_stream_is_prepared (GTK_MEDIA_STREAM (self))) + return; + + gtk_media_stream_prepared (GTK_MEDIA_STREAM (self), + TRUE, + TRUE, + TRUE, + 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)); } @@ -139,14 +155,7 @@ gtk_gst_media_file_duration_changed_cb (GstPlayer *player, GstClockTime duration, GtkGstMediaFile *self) { - if (gtk_media_stream_is_prepared (GTK_MEDIA_STREAM (self))) - return; - - gtk_media_stream_prepared (GTK_MEDIA_STREAM (self), - TRUE, - TRUE, - TRUE, - FROM_GST_TIME (duration)); + 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; |