[gst-cvs] gstreamer: win32: fix seeking in large files

Sebastian Dröge slomo at kemper.freedesktop.org
Thu Oct 29 03:41:59 PDT 2009


Module: gstreamer
Branch: master
Commit: 4843c0947b8bd261fa40bfc96397bc61810719a9
URL:    http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=4843c0947b8bd261fa40bfc96397bc61810719a9

Author: LRN <lrn1986 at gmail dot com>
Date:   Fri Mar 20 14:17:19 2009 +0100

win32: fix seeking in large files

Fix Seeking in large files by using the 64-bit seek functions.
Fixes #576019

---

 gst/playback/gstqueue2.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/gst/playback/gstqueue2.c b/gst/playback/gstqueue2.c
index d9550d0..6c9c900 100644
--- a/gst/playback/gstqueue2.c
+++ b/gst/playback/gstqueue2.c
@@ -57,6 +57,14 @@
 #include <gst/gst.h>
 #include <gst/gst-i18n-plugin.h>
 
+#ifdef G_OS_WIN32
+#include <io.h>                 /* lseek, open, close, read */
+#undef lseek
+#define lseek _lseeki64
+#undef off_t
+#define off_t guint64
+#endif
+
 static const GstElementDetails gst_queue_details = GST_ELEMENT_DETAILS ("Queue",
     "Generic",
     "Simple data queue",
@@ -827,7 +835,13 @@ gst_queue_write_buffer_to_file (GstQueue * queue, GstBuffer * buffer)
   guint8 *data;
   int ret;
 
+#ifdef HAVE_FSEEKO
+  fseeko (queue->temp_file, (off_t) queue->writing_pos, SEEK_SET);
+#elif defined (G_OS_UNIX) || defined (G_OS_WIN32)
+  lseek (fileno (queue->temp_file), (off_t) queue->writing_pos, SEEK_SET);
+#else
   fseek (queue->temp_file, queue->writing_pos, SEEK_SET);
+#endif
 
   data = GST_BUFFER_DATA (buffer);
   size = GST_BUFFER_SIZE (buffer);
@@ -872,7 +886,7 @@ gst_queue_create_read (GstQueue * queue, guint64 offset, guint length,
 #ifdef HAVE_FSEEKO
   if (fseeko (queue->temp_file, (off_t) offset, SEEK_SET) != 0)
     goto seek_failed;
-#elif defined (G_OS_UNIX)
+#elif defined (G_OS_UNIX) || defined (G_OS_WIN32)
   if (lseek (fileno (queue->temp_file), (off_t) offset,
           SEEK_SET) == (off_t) - 1)
     goto seek_failed;





More information about the Gstreamer-commits mailing list