diff --git a/ChangeLog b/ChangeLog index 3742589e22..38ecc972bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-10-12 Wim Taymans + + * gst/elements/gstfilesink.c: (gst_file_sink_do_seek), + (gst_file_sink_event), (gst_file_sink_render): + Flush before seeking. + 2005-10-12 Andy Wingo * gst/gst.c (gst_init_check): Ignore unknown options, as has diff --git a/gst/elements/gstfilesink.c b/gst/elements/gstfilesink.c index ac30d41c85..6715258829 100644 --- a/gst/elements/gstfilesink.c +++ b/gst/elements/gstfilesink.c @@ -305,16 +305,31 @@ gst_file_sink_do_seek (GstFileSink * filesink, guint64 new_offset) GST_DEBUG_OBJECT (filesink, "Seeking to offset %" G_GUINT64_FORMAT, new_offset); + if (fflush (filesink->file)) + goto flush_failed; + #ifdef G_OS_UNIX if (lseek (fileno (filesink->file), (off_t) new_offset, - SEEK_SET) != (off_t) - 1) - return; + SEEK_SET) == (off_t) - 1) + goto seek_failed; #else - if (fseek (filesink->file, (long) new_offset, SEEK_SET) == 0) - return; + if (fseek (filesink->file, (long) new_offset, SEEK_SET) != 0) + goto seek_failed; #endif - GST_DEBUG_OBJECT (filesink, "Seeking failed: %s", g_strerror (errno)); + return; + + /* ERRORS */ +flush_failed: + { + GST_DEBUG_OBJECT (filesink, "Flush failed: %s", g_strerror (errno)); + return; + } +seek_failed: + { + GST_DEBUG_OBJECT (filesink, "Seeking failed: %s", g_strerror (errno)); + return; + } } /* handle events (search) */ diff --git a/plugins/elements/gstfilesink.c b/plugins/elements/gstfilesink.c index ac30d41c85..6715258829 100644 --- a/plugins/elements/gstfilesink.c +++ b/plugins/elements/gstfilesink.c @@ -305,16 +305,31 @@ gst_file_sink_do_seek (GstFileSink * filesink, guint64 new_offset) GST_DEBUG_OBJECT (filesink, "Seeking to offset %" G_GUINT64_FORMAT, new_offset); + if (fflush (filesink->file)) + goto flush_failed; + #ifdef G_OS_UNIX if (lseek (fileno (filesink->file), (off_t) new_offset, - SEEK_SET) != (off_t) - 1) - return; + SEEK_SET) == (off_t) - 1) + goto seek_failed; #else - if (fseek (filesink->file, (long) new_offset, SEEK_SET) == 0) - return; + if (fseek (filesink->file, (long) new_offset, SEEK_SET) != 0) + goto seek_failed; #endif - GST_DEBUG_OBJECT (filesink, "Seeking failed: %s", g_strerror (errno)); + return; + + /* ERRORS */ +flush_failed: + { + GST_DEBUG_OBJECT (filesink, "Flush failed: %s", g_strerror (errno)); + return; + } +seek_failed: + { + GST_DEBUG_OBJECT (filesink, "Seeking failed: %s", g_strerror (errno)); + return; + } } /* handle events (search) */