From 139e82bd8b898defc6b9aab346f55195cb462463 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Tue, 9 Aug 2005 12:33:21 +0000 Subject: gst/avi/gstavidemux.c: Fix seeking (or, well, fix threading issue where a variable was set before a lock was taken an... Original commit message from CVS: * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event), (gst_avi_demux_handle_seek): Fix seeking (or, well, fix threading issue where a variable was set before a lock was taken and was already unset before that same lock was taken and was thus no longer in existance when it actually had to be used). --- ChangeLog | 9 +++++++++ gst/avi/gstavidemux.c | 10 +++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 541aefb2..0ad1d401 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-08-09 Ronald S. Bultje + + * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event), + (gst_avi_demux_handle_seek): + Fix seeking (or, well, fix threading issue where a variable was + set before a lock was taken and was already unset before that + same lock was taken and was thus no longer in existance when it + actually had to be used). + 2005-08-09 Ronald S. Bultje * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry): diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index b37d0d73..fcf28c34 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -59,7 +59,7 @@ static gboolean gst_avi_demux_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value, GstFormat * dest_format, gint64 * dest_value); -static gboolean gst_avi_demux_handle_seek (GstAviDemux * avi); +static gboolean gst_avi_demux_handle_seek (GstAviDemux * avi, guint64 time); static void gst_avi_demux_loop (GstPad * pad); static gboolean gst_avi_demux_sink_activate (GstPad * sinkpad); static gboolean gst_avi_demux_sink_activate_pull (GstPad * sinkpad, @@ -516,7 +516,7 @@ gst_avi_demux_handle_src_event (GstPad * pad, GstEvent * event) avi->seek_flush = flags & GST_SEEK_FLAG_FLUSH; avi->seek_entry = entry->index_nr; GST_DEBUG_OBJECT (avi, "Will seek to entry %d", avi->seek_entry); - res = gst_avi_demux_handle_seek (avi); + res = gst_avi_demux_handle_seek (avi, real->ts); } else { GST_DEBUG_OBJECT (avi, "no index entry found for format=%d value=%" G_GINT64_FORMAT, format, desired_offset); @@ -1942,7 +1942,7 @@ done: */ static gboolean -gst_avi_demux_handle_seek (GstAviDemux * avi) +gst_avi_demux_handle_seek (GstAviDemux * avi, guint64 time) { /* FIXME: if we seek in an openDML file, we will have multiple * primary levels. Seeking in between those will cause havoc. */ @@ -1953,13 +1953,13 @@ gst_avi_demux_handle_seek (GstAviDemux * avi) GST_STREAM_LOCK (avi->sinkpad); + avi->last_seek = time; avi->current_entry = avi->seek_entry; avi->seek_event = gst_event_new_newsegment (1.0, - GST_FORMAT_TIME, avi->last_seek, + GST_FORMAT_TIME, time, (gint64) (((gfloat) avi->stream[0].strh->scale) * avi->stream[0].strh->length / avi->stream[0].strh->rate) * GST_SECOND, 0); - gst_avi_demux_send_event (avi, gst_event_new_flush_stop ()); gst_pad_start_task (avi->sinkpad, (GstTaskFunction) gst_avi_demux_loop, -- cgit