mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-09 05:38:58 +00:00
ext/gnomevfs/gstgnomevfssink.*: see #412648.
Original commit message from CVS: Patch by: Mark Nauwelaerts <manauw at skynet be> * 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.
This commit is contained in:
parent
1273d02f4b
commit
b274e57bff
3 changed files with 21 additions and 9 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2007-05-22 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
Patch by: Mark Nauwelaerts <manauw at skynet be>
|
||||||
|
|
||||||
|
* 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 <tim at centricular dot net>
|
2007-05-22 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
* ext/cdparanoia/gstcdparanoiasrc.c:
|
* ext/cdparanoia/gstcdparanoiasrc.c:
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* 2000 Wim Taymans <wtay@chello.be>
|
* 2000 Wim Taymans <wtay@chello.be>
|
||||||
* 2001 Bastien Nocera <hadess@hadess.net>
|
* 2001 Bastien Nocera <hadess@hadess.net>
|
||||||
* 2003 Colin Walters <walters@verbum.org>
|
* 2003 Colin Walters <walters@verbum.org>
|
||||||
* 2005 Tim-Philipp M??ller <tim centricular net>
|
* 2005 Tim-Philipp Müller <tim centricular net>
|
||||||
*
|
*
|
||||||
* gstgnomevfssink.c:
|
* gstgnomevfssink.c:
|
||||||
*
|
*
|
||||||
|
@ -242,7 +242,7 @@ gst_gnome_vfs_sink_init (GstGnomeVFSSink * sink, GstGnomeVFSSinkClass * klass)
|
||||||
sink->uri_name = NULL;
|
sink->uri_name = NULL;
|
||||||
sink->handle = NULL;
|
sink->handle = NULL;
|
||||||
sink->own_handle = FALSE;
|
sink->own_handle = FALSE;
|
||||||
sink->data_written = 0;
|
sink->current_pos = 0;
|
||||||
|
|
||||||
GST_BASE_SINK (sink)->sync = FALSE;
|
GST_BASE_SINK (sink)->sync = FALSE;
|
||||||
}
|
}
|
||||||
|
@ -398,7 +398,7 @@ gst_gnome_vfs_sink_open_file (GstGnomeVFSSink * sink)
|
||||||
sink->own_handle = FALSE;
|
sink->own_handle = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
sink->data_written = 0;
|
sink->current_pos = 0;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -474,6 +474,8 @@ gst_gnome_vfs_sink_handle_event (GstBaseSink * basesink, GstEvent * event)
|
||||||
if (res != GNOME_VFS_OK) {
|
if (res != GNOME_VFS_OK) {
|
||||||
GST_ERROR_OBJECT (sink, "Failed to seek to offset %"
|
GST_ERROR_OBJECT (sink, "Failed to seek to offset %"
|
||||||
G_GINT64_FORMAT ": %s", offset, gnome_vfs_result_to_string (res));
|
G_GINT64_FORMAT ": %s", offset, gnome_vfs_result_to_string (res));
|
||||||
|
} else {
|
||||||
|
sink->current_pos = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -505,7 +507,7 @@ gst_gnome_vfs_sink_query (GstPad * pad, GstQuery * query)
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case GST_FORMAT_DEFAULT:
|
case GST_FORMAT_DEFAULT:
|
||||||
case GST_FORMAT_BYTES:
|
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;
|
return TRUE;
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -527,13 +529,12 @@ gst_gnome_vfs_sink_render (GstBaseSink * basesink, GstBuffer * buf)
|
||||||
GstGnomeVFSSink *sink;
|
GstGnomeVFSSink *sink;
|
||||||
GnomeVFSResult result;
|
GnomeVFSResult result;
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
guint64 back_pending = 0;
|
|
||||||
|
|
||||||
sink = GST_GNOME_VFS_SINK (basesink);
|
sink = GST_GNOME_VFS_SINK (basesink);
|
||||||
|
|
||||||
if (gnome_vfs_tell (sink->handle, &cur_pos) == GNOME_VFS_OK) {
|
if (gnome_vfs_tell (sink->handle, &cur_pos) == GNOME_VFS_OK) {
|
||||||
if (cur_pos < sink->data_written)
|
/* bring up to date with current position for proper reporting */
|
||||||
back_pending = sink->data_written - cur_pos;
|
sink->current_pos = cur_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = gnome_vfs_write (sink->handle, GST_BUFFER_DATA (buf),
|
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);
|
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;
|
ret = GST_FLOW_OK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,7 +65,7 @@ struct _GstGnomeVFSSink
|
||||||
/* whether we opened the handle ourselves */
|
/* whether we opened the handle ourselves */
|
||||||
gboolean own_handle;
|
gboolean own_handle;
|
||||||
|
|
||||||
guint64 data_written;
|
guint64 current_pos;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstGnomeVFSSinkClass
|
struct _GstGnomeVFSSinkClass
|
||||||
|
|
Loading…
Reference in a new issue