summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <mlureau@flumotion.com>2009-09-30 17:16:30 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2010-11-19 19:21:36 +0100
commit401fb0a09b766107a8a27d1663ec1d4beb99a49b (patch)
treed3545926fe25e8feb4735f80ee2d9abe2b0792d0
parent055a1a3b0a18da45e3b24f5e928aed88af60a96c (diff)
qtmux: truncate buffer file after each send
-rw-r--r--gst/qtmux/gstqtmux.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/gst/qtmux/gstqtmux.c b/gst/qtmux/gstqtmux.c
index 377871cc8..83ac60c08 100644
--- a/gst/qtmux/gstqtmux.c
+++ b/gst/qtmux/gstqtmux.c
@@ -1063,6 +1063,22 @@ write_error:
}
}
+static gboolean
+gst_qt_mux_seek_to_beginning (FILE * f)
+{
+#ifdef HAVE_FSEEKO
+ if (fseeko (f, (off_t) 0, SEEK_SET) != 0)
+ return FALSE;
+#elif defined (G_OS_UNIX) || defined (G_OS_WIN32)
+ if (lseek (fileno (f), (off_t) 0, SEEK_SET) == (off_t) - 1)
+ return FALSE;
+#else
+ if (fseek (f, (long) 0, SEEK_SET) != 0)
+ return FALSE;
+#endif
+ return TRUE;
+}
+
static GstFlowReturn
gst_qt_mux_send_buffered_data (GstQTMux * qtmux, guint64 * offset)
{
@@ -1072,17 +1088,8 @@ gst_qt_mux_send_buffered_data (GstQTMux * qtmux, guint64 * offset)
if (fflush (qtmux->fast_start_file))
goto flush_failed;
-#ifdef HAVE_FSEEKO
- if (fseeko (qtmux->fast_start_file, (off_t) 0, SEEK_SET) != 0)
- goto seek_failed;
-#elif defined (G_OS_UNIX) || defined (G_OS_WIN32)
- if (lseek (fileno (qtmux->fast_start_file), (off_t) 0,
- SEEK_SET) == (off_t) - 1)
- goto seek_failed;
-#else
- if (fseek (qtmux->fast_start_file, (long) 0, SEEK_SET) != 0)
+ if (!gst_qt_mux_seek_to_beginning (qtmux->fast_start_file))
goto seek_failed;
-#endif
/* hm, this could all take a really really long time,
* but there may not be another way to get moov atom first
@@ -1105,6 +1112,11 @@ gst_qt_mux_send_buffered_data (GstQTMux * qtmux, guint64 * offset)
if (buf)
gst_buffer_unref (buf);
+ if (ftruncate (fileno (qtmux->fast_start_file), 0))
+ goto seek_failed;
+ if (!gst_qt_mux_seek_to_beginning (qtmux->fast_start_file))
+ goto seek_failed;
+
return ret;
/* ERRORS */