From: <rb...@fr...> - 2005-08-09 23:35:43
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Tue Aug 09 2005 05:33:33 PDT Log message: * 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). Modified files: . : ChangeLog gst/avi : gstavidemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1766&r2=1.1767 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/avi/gstavidemux.c.diff?r1=1.140&r2=1.141 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1766 retrieving revision 1.1767 diff -u -d -r1.1766 -r1.1767 --- ChangeLog 9 Aug 2005 12:22:11 -0000 1.1766 +++ ChangeLog 9 Aug 2005 12:33:21 -0000 1.1767 @@ -1,5 +1,14 @@ 2005-08-09 Ronald S. Bultje <rb...@ro...> + * 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 <rb...@ro...> * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry): Mixing binary and logical operators is not going to work; fix position-querying in Totem. Index: gstavidemux.c RCS file: /cvs/gstreamer/gst-plugins/gst/avi/gstavidemux.c,v retrieving revision 1.140 retrieving revision 1.141 diff -u -d -r1.140 -r1.141 --- gstavidemux.c 9 Aug 2005 12:22:12 -0000 1.140 +++ gstavidemux.c 9 Aug 2005 12:33:21 -0000 1.141 @@ -59,7 +59,7 @@ 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 @@ 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 @@ */ 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_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, |