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-16 11:10:05 +0300 |
commit | 9617a68d2203ddd9aeb0532d40635a8459a31101 (patch) | |
tree | 40ef5fd8c5c91ef07354c0a1722debd1a5a70086 | |
parent | 2b8edd9c0f23e1aedc68fd2271931bce707d2ac4 (diff) | |
download | gstreamer-plugins-bad-9617a68d2203ddd9aeb0532d40635a8459a31101.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
-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 38eb27a81..1c29026a4 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); @@ -3240,11 +3232,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; @@ -3307,11 +3295,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) { @@ -3475,6 +3459,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 |