tests/examples/seek/seek.c: Fix various seeking bugs (Slider was not updating when doing a non flushing seek, Reverse...

Original commit message from CVS:
2007-02-27  Julien MOUTTE  <julien@moutte.net>

* tests/examples/seek/seek.c: (do_seek), (set_update_scale),
(msg_segment_done): Fix various seeking bugs (Slider was not
updating when doing a non flushing seek, Reverse playback
on segment seek was wrong).
This commit is contained in:
Julien Moutte 2007-02-27 18:45:37 +00:00
parent 749d720436
commit 354c07de8b
2 changed files with 21 additions and 12 deletions

View file

@ -1,3 +1,10 @@
2007-02-27 Julien MOUTTE <julien@moutte.net>
* tests/examples/seek/seek.c: (do_seek), (set_update_scale),
(msg_segment_done): Fix various seeking bugs (Slider was not
updating when doing a non flushing seek, Reverse playback
on segment seek was wrong).
2007-02-26 Wim Taymans <wim@fluendo.com>
* tests/examples/seek/seek.c: (stop_seek):

View file

@ -1044,6 +1044,8 @@ update_scale (gpointer data)
static void do_seek (GtkWidget * widget);
static void set_update_scale (gboolean active);
static gboolean
end_scrub (GtkWidget * widget)
{
@ -1113,21 +1115,24 @@ do_seek (GtkWidget * widget)
if (rate >= 0) {
s_event = gst_event_new_seek (rate,
GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, real, GST_SEEK_TYPE_SET, -1);
GST_DEBUG ("seek with rate %lf to %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT,
rate, GST_TIME_ARGS (real), GST_TIME_ARGS (duration));
} else {
s_event = gst_event_new_seek (rate,
GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
GST_SEEK_TYPE_SET, real);
GST_DEBUG ("seek with rate %lf to %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT,
rate, GST_TIME_ARGS (0), GST_TIME_ARGS (real));
}
GST_DEBUG ("seek with rate %lf to %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT,
rate, GST_TIME_ARGS (real), GST_TIME_ARGS (duration));
res = send_event (s_event);
if (res) {
if (flush_seek) {
gst_pipeline_set_new_stream_time (GST_PIPELINE (pipeline), 0);
gst_element_get_state (GST_ELEMENT (pipeline), NULL, NULL, SEEK_TIMEOUT);
} else {
set_update_scale (TRUE);
}
} else
g_print ("seek failed\n");
@ -1159,6 +1164,9 @@ seek_cb (GtkWidget * widget)
static void
set_update_scale (gboolean active)
{
GST_DEBUG ("update scale is %d", active);
if (active) {
if (update_id == 0) {
update_id =
@ -1445,15 +1453,9 @@ msg_segment_done (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
if (flush_seek)
flags |= GST_SEEK_FLAG_FLUSH;
if (rate >= 0) {
s_event = gst_event_new_seek (rate,
GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
GST_SEEK_TYPE_SET, duration);
} else {
s_event = gst_event_new_seek (rate,
GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, duration,
GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0));
}
s_event = gst_event_new_seek (rate,
GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
GST_SEEK_TYPE_SET, duration);
GST_DEBUG ("restart loop with rate %lf to 0 / %" GST_TIME_FORMAT,
rate, GST_TIME_ARGS (duration));