summaryrefslogtreecommitdiff
path: root/examples/seeking/seek.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/seeking/seek.c')
-rw-r--r--examples/seeking/seek.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/examples/seeking/seek.c b/examples/seeking/seek.c
index 8a2b5083b..a1d29b107 100644
--- a/examples/seeking/seek.c
+++ b/examples/seeking/seek.c
@@ -17,6 +17,7 @@ static gboolean elem_seek = FALSE;
static gboolean verbose = FALSE;
static guint update_id;
+static gulong changed_id;
//#define SOURCE "gnomevfssrc"
#define SOURCE "filesrc"
@@ -847,16 +848,7 @@ update_scale (gpointer data)
}
static gboolean
-start_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
-{
- gst_element_set_state (pipeline, GST_STATE_PAUSED);
- gtk_timeout_remove (update_id);
-
- return FALSE;
-}
-
-static gboolean
-stop_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
+do_seek (GtkWidget * widget, gpointer user_data)
{
gint64 real = gtk_range_get_value (GTK_RANGE (widget)) * duration / 100;
gboolean res;
@@ -896,6 +888,28 @@ stop_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
}
}
+ GST_PIPELINE (pipeline)->stream_time = real;
+
+ return FALSE;
+}
+
+static gboolean
+start_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
+{
+ gst_element_set_state (pipeline, GST_STATE_PAUSED);
+ gtk_timeout_remove (update_id);
+
+ changed_id = gtk_signal_connect (GTK_OBJECT (hscale),
+ "value_changed", G_CALLBACK (do_seek), pipeline);
+
+ return FALSE;
+}
+
+static gboolean
+stop_seek (GtkWidget * widget, gpointer user_data)
+{
+ g_signal_handler_disconnect (GTK_OBJECT (hscale), changed_id);
+
gst_element_set_state (pipeline, GST_STATE_PLAYING);
update_id =
gtk_timeout_add (UPDATE_INTERVAL, (GtkFunction) update_scale, pipeline);