diff options
author | Marc-André Lureau <mlureau@flumotion.com> | 2009-09-30 17:16:30 +0200 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2010-11-19 19:21:36 +0100 |
commit | 401fb0a09b766107a8a27d1663ec1d4beb99a49b (patch) | |
tree | d3545926fe25e8feb4735f80ee2d9abe2b0792d0 | |
parent | 055a1a3b0a18da45e3b24f5e928aed88af60a96c (diff) |
qtmux: truncate buffer file after each send
-rw-r--r-- | gst/qtmux/gstqtmux.c | 32 |
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 */ |