summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Renon <philippe_renon@yahoo.fr>2017-09-15 15:04:02 +0200
committerSebastian Dröge <sebastian@centricular.com>2017-09-16 11:10:05 +0300
commit9617a68d2203ddd9aeb0532d40635a8459a31101 (patch)
tree40ef5fd8c5c91ef07354c0a1722debd1a5a70086
parent2b8edd9c0f23e1aedc68fd2271931bce707d2ac4 (diff)
downloadgstreamer-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.c41
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