+2007-11-27 Wim Taymans <wim.taymans@gmail.com>
+
+ * 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 <ensonic@users.sf.net>
* docs/gst/gstreamer-docs.sgml:
&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;
}