diff options
author | Alessandro Decina <alessandro.d@gmail.com> | 2013-08-27 07:51:35 +0200 |
---|---|---|
committer | Alessandro Decina <alessandro.d@gmail.com> | 2013-08-27 08:00:09 +0200 |
commit | 924acf5e9243496c4d9b7897e17c87b063f9e59d (patch) | |
tree | b824774365df78f137ecceb78d607331decb1d7a /plugins | |
parent | b19d0518cbd5c2765a9688d6bd225a06bc95e2a2 (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.c | 9 |
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; |