summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorAlessandro Decina <alessandro.d@gmail.com>2013-08-27 07:51:35 +0200
committerAlessandro Decina <alessandro.d@gmail.com>2013-08-27 08:00:09 +0200
commit924acf5e9243496c4d9b7897e17c87b063f9e59d (patch)
treeb824774365df78f137ecceb78d607331decb1d7a /plugins
parentb19d0518cbd5c2765a9688d6bd225a06bc95e2a2 (diff)
filesink: flush (discard data) on FLUSH_STOP
Reset the write position to 0 and truncate the file on FLUSH_STOP.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/elements/gstfilesink.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/plugins/elements/gstfilesink.c b/plugins/elements/gstfilesink.c
index 6700b13df..b59d72fc6 100644
--- a/plugins/elements/gstfilesink.c
+++ b/plugins/elements/gstfilesink.c
@@ -56,6 +56,8 @@
#define lseek _lseeki64
#undef off_t
#define off_t guint64
+#undef ftruncate
+#define ftruncate _chsize
#ifdef _MSC_VER /* Check if we are using MSVC, fileno is deprecated in favour */
#define fileno _fileno /* of _fileno */
#endif
@@ -242,6 +244,7 @@ gst_file_sink_init (GstFileSink * filesink)
{
filesink->filename = NULL;
filesink->file = NULL;
+ filesink->current_pos = 0;
filesink->buffer_mode = DEFAULT_BUFFER_MODE;
filesink->buffer_size = DEFAULT_BUFFER_SIZE;
filesink->buffer = NULL;
@@ -584,6 +587,12 @@ gst_file_sink_event (GstBaseSink * sink, GstEvent * event)
}
break;
}
+ case GST_EVENT_FLUSH_STOP:
+ if (filesink->current_pos != 0 && filesink->seekable) {
+ gst_file_sink_do_seek (filesink, 0);
+ ftruncate (fileno (filesink->file), 0);
+ }
+ break;
case GST_EVENT_EOS:
if (fflush (filesink->file))
goto flush_failed;