From b274e57bff2f6f13c34166913dea8c418c3462e4 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Tue, 22 May 2007 15:30:26 +0000 Subject: [PATCH] ext/gnomevfs/gstgnomevfssink.*: see #412648. Original commit message from CVS: Patch by: Mark Nauwelaerts * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_init), (gst_gnome_vfs_sink_open_file), (gst_gnome_vfs_sink_handle_event), (gst_gnome_vfs_sink_query), (gst_gnome_vfs_sink_render): * ext/gnomevfs/gstgnomevfssink.h: Fix position reporting, especially after a seek (from upstream), see #412648. --- ChangeLog | 11 +++++++++++ ext/gnomevfs/gstgnomevfssink.c | 17 +++++++++-------- ext/gnomevfs/gstgnomevfssink.h | 2 +- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5c5a7c2..74548d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2007-05-22 Tim-Philipp Müller + Patch by: Mark Nauwelaerts + + * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_init), + (gst_gnome_vfs_sink_open_file), (gst_gnome_vfs_sink_handle_event), + (gst_gnome_vfs_sink_query), (gst_gnome_vfs_sink_render): + * ext/gnomevfs/gstgnomevfssink.h: + Fix position reporting, especially after a seek (from upstream), + see #412648. + +2007-05-22 Tim-Philipp Müller + * ext/cdparanoia/gstcdparanoiasrc.c: Repair umlaut. diff --git a/ext/gnomevfs/gstgnomevfssink.c b/ext/gnomevfs/gstgnomevfssink.c index b454d86..2b04b95 100644 --- a/ext/gnomevfs/gstgnomevfssink.c +++ b/ext/gnomevfs/gstgnomevfssink.c @@ -3,7 +3,7 @@ * 2000 Wim Taymans * 2001 Bastien Nocera * 2003 Colin Walters - * 2005 Tim-Philipp M??ller + * 2005 Tim-Philipp Müller * * gstgnomevfssink.c: * @@ -242,7 +242,7 @@ gst_gnome_vfs_sink_init (GstGnomeVFSSink * sink, GstGnomeVFSSinkClass * klass) sink->uri_name = NULL; sink->handle = NULL; sink->own_handle = FALSE; - sink->data_written = 0; + sink->current_pos = 0; GST_BASE_SINK (sink)->sync = FALSE; } @@ -398,7 +398,7 @@ gst_gnome_vfs_sink_open_file (GstGnomeVFSSink * sink) sink->own_handle = FALSE; } - sink->data_written = 0; + sink->current_pos = 0; return TRUE; } @@ -474,6 +474,8 @@ gst_gnome_vfs_sink_handle_event (GstBaseSink * basesink, GstEvent * event) if (res != GNOME_VFS_OK) { GST_ERROR_OBJECT (sink, "Failed to seek to offset %" G_GINT64_FORMAT ": %s", offset, gnome_vfs_result_to_string (res)); + } else { + sink->current_pos = offset; } break; @@ -505,7 +507,7 @@ gst_gnome_vfs_sink_query (GstPad * pad, GstQuery * query) switch (format) { case GST_FORMAT_DEFAULT: case GST_FORMAT_BYTES: - gst_query_set_position (query, GST_FORMAT_BYTES, sink->data_written); + gst_query_set_position (query, GST_FORMAT_BYTES, sink->current_pos); return TRUE; default: return FALSE; @@ -527,13 +529,12 @@ gst_gnome_vfs_sink_render (GstBaseSink * basesink, GstBuffer * buf) GstGnomeVFSSink *sink; GnomeVFSResult result; GstFlowReturn ret; - guint64 back_pending = 0; sink = GST_GNOME_VFS_SINK (basesink); if (gnome_vfs_tell (sink->handle, &cur_pos) == GNOME_VFS_OK) { - if (cur_pos < sink->data_written) - back_pending = sink->data_written - cur_pos; + /* bring up to date with current position for proper reporting */ + sink->current_pos = cur_pos; } result = gnome_vfs_write (sink->handle, GST_BUFFER_DATA (buf), @@ -551,7 +552,7 @@ gst_gnome_vfs_sink_render (GstBaseSink * basesink, GstBuffer * buf) GST_BUFFER_SIZE (buf), written); } - sink->data_written += GST_BUFFER_SIZE (buf) - back_pending; + sink->current_pos += GST_BUFFER_SIZE (buf); ret = GST_FLOW_OK; break; } diff --git a/ext/gnomevfs/gstgnomevfssink.h b/ext/gnomevfs/gstgnomevfssink.h index 1900c2e..409add9 100644 --- a/ext/gnomevfs/gstgnomevfssink.h +++ b/ext/gnomevfs/gstgnomevfssink.h @@ -65,7 +65,7 @@ struct _GstGnomeVFSSink /* whether we opened the handle ourselves */ gboolean own_handle; - guint64 data_written; + guint64 current_pos; }; struct _GstGnomeVFSSinkClass -- 2.7.4