From 7797419321f81f70de8c7c36cd44653be7544232 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 27 Nov 2007 18:45:38 +0000 Subject: [PATCH] plugins/elements/gstfilesink.c: Be a bit smarter when seeking, like, don't try to do a seek when it's not needed. Thi... Original commit message from CVS: * plugins/elements/gstfilesink.c: (gst_file_sink_event): Be a bit smarter when seeking, like, don't try to do a seek when it's not needed. This avoids errors when the file is not seekable. Fixes #499771. --- ChangeLog | 7 +++++++ plugins/elements/gstfilesink.c | 23 +++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5ad9e4bd13..15b86ee133 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-11-27 Wim Taymans + + * plugins/elements/gstfilesink.c: (gst_file_sink_event): + Be a bit smarter when seeking, like, don't try to do a seek when it's + not needed. This avoids errors when the file is not seekable. + Fixes #499771. + 2007-11-26 Stefan Kost * docs/gst/gstreamer-docs.sgml: diff --git a/plugins/elements/gstfilesink.c b/plugins/elements/gstfilesink.c index 7d248221c4..9280657507 100644 --- a/plugins/elements/gstfilesink.c +++ b/plugins/elements/gstfilesink.c @@ -384,15 +384,22 @@ gst_file_sink_event (GstBaseSink * sink, GstEvent * event) &stop, &pos); if (format == GST_FORMAT_BYTES) { - /* FIXME, the seek should be performed on the pos field, start/stop are - * just boundaries for valid bytes offsets. We should also fill the file - * with zeroes if the new position extends the current EOF (sparse streams - * and segment accumulation). */ - if (!gst_file_sink_do_seek (filesink, (guint64) start)) - goto seek_failed; + /* only try to seek and fail when we are going to a different + * position */ + if (filesink->current_pos != start) { + /* FIXME, the seek should be performed on the pos field, start/stop are + * just boundaries for valid bytes offsets. We should also fill the file + * with zeroes if the new position extends the current EOF (sparse streams + * and segment accumulation). */ + if (!gst_file_sink_do_seek (filesink, (guint64) start)) + goto seek_failed; + } else { + GST_DEBUG_OBJECT (filesink, "Ignored NEWSEGMENT, no seek needed"); + } } else { - GST_DEBUG ("Ignored NEWSEGMENT event of format %u (%s)", - (guint) format, gst_format_get_name (format)); + GST_DEBUG_OBJECT (filesink, + "Ignored NEWSEGMENT event of format %u (%s)", (guint) format, + gst_format_get_name (format)); } break; }