diff options
author | Philippe Renon <philippe_renon@yahoo.fr> | 2017-09-15 15:04:02 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2017-09-15 17:28:12 +0300 |
commit | 085f875a249ba73cf24e42c72ba811ab461efa6d (patch) | |
tree | 57960da92c07e347584e8e906f6136f65932b017 /gst-libs/gst/player | |
parent | 9fce29497da5ebee5d333911a94b7c18ab0410bf (diff) | |
download | gstreamer-plugins-bad-085f875a249ba73cf24e42c72ba811ab461efa6d.tar.gz |
player: introduce helper method to remove seek source
this incidentally fixes a missing g_source_destroy() call in _main()
https://bugzilla.gnome.org/show_bug.cgi?id=787727
Diffstat (limited to 'gst-libs/gst/player')
-rw-r--r-- | gst-libs/gst/player/gstplayer.c | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/gst-libs/gst/player/gstplayer.c b/gst-libs/gst/player/gstplayer.c index 03e14a45f..2b8541b27 100644 --- a/gst-libs/gst/player/gstplayer.c +++ b/gst-libs/gst/player/gstplayer.c @@ -269,6 +269,8 @@ static void *get_from_tags (GstPlayer * self, GstPlayerMediaInfo * media_info, void *(*func) (GstTagList *)); static void *get_cover_sample (GstTagList * tags); +static void remove_seek_source (GstPlayer * self); + static void gst_player_init (GstPlayer * self) { @@ -1087,11 +1089,7 @@ emit_error (GstPlayer * self, GError * err) } self->seek_pending = FALSE; - if (self->seek_source) { - g_source_destroy (self->seek_source); - g_source_unref (self->seek_source); - self->seek_source = NULL; - } + remove_seek_source (self); self->seek_position = GST_CLOCK_TIME_NONE; self->last_seek_time = GST_CLOCK_TIME_NONE; g_mutex_unlock (&self->lock); @@ -1643,11 +1641,7 @@ state_changed_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg, if (!self->media_info->seekable) { GST_DEBUG_OBJECT (self, "Media is not seekable"); - if (self->seek_source) { - g_source_destroy (self->seek_source); - g_source_unref (self->seek_source); - self->seek_source = NULL; - } + remove_seek_source (self); self->seek_position = GST_CLOCK_TIME_NONE; self->last_seek_time = GST_CLOCK_TIME_NONE; } else if (self->seek_source) { @@ -2989,9 +2983,7 @@ gst_player_main (gpointer data) self->media_info = NULL; } - if (self->seek_source) - g_source_unref (self->seek_source); - self->seek_source = NULL; + remove_seek_source (self); g_mutex_unlock (&self->lock); g_main_context_pop_thread_default (self->context); @@ -3236,11 +3228,7 @@ gst_player_stop_internal (GstPlayer * self, gboolean transient) self->global_tags = NULL; } self->seek_pending = FALSE; - if (self->seek_source) { - g_source_destroy (self->seek_source); - g_source_unref (self->seek_source); - self->seek_source = NULL; - } + remove_seek_source (self); self->seek_position = GST_CLOCK_TIME_NONE; self->last_seek_time = GST_CLOCK_TIME_NONE; self->rate = 1.0; @@ -3303,11 +3291,7 @@ gst_player_seek_internal_locked (GstPlayer * self) GstSeekFlags flags = 0; gboolean accurate = FALSE; - if (self->seek_source) { - g_source_destroy (self->seek_source); - g_source_unref (self->seek_source); - self->seek_source = NULL; - } + remove_seek_source (self); /* Only seek in PAUSED */ if (self->current_state < GST_STATE_PAUSED) { @@ -3471,6 +3455,17 @@ gst_player_seek (GstPlayer * self, GstClockTime position) g_mutex_unlock (&self->lock); } +static void +remove_seek_source (GstPlayer * self) +{ + if (!self->seek_source) + return; + + g_source_destroy (self->seek_source); + g_source_unref (self->seek_source); + self->seek_source = NULL; +} + /** * gst_player_get_uri: * @player: #GstPlayer instance |