gst/elements/gstfilesink.c: Flush before seeking.
authorWim Taymans <wim.taymans@gmail.com>
Wed, 12 Oct 2005 16:03:39 +0000 (16:03 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Wed, 12 Oct 2005 16:03:39 +0000 (16:03 +0000)
Original commit message from CVS:
* gst/elements/gstfilesink.c: (gst_file_sink_do_seek),
(gst_file_sink_event), (gst_file_sink_render):
Flush before seeking.

ChangeLog
gst/elements/gstfilesink.c
plugins/elements/gstfilesink.c

index 3742589..38ecc97 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-12  Wim Taymans  <wim@fluendo.com>
+
+       * 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  <wingo@pobox.com>
 
        * gst/gst.c (gst_init_check): Ignore unknown options, as has
index ac30d41..6715258 100644 (file)
@@ -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) */
index ac30d41..6715258 100644 (file)
@@ -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) */