From f1ceaab02f3f557e23b77b14771a575788f92bb4 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Fri, 17 Apr 2015 16:18:32 +0200 Subject: [PATCH] multifilesink: streamline the file-switch code a bit Use the same functions regardless of the mode we are using --- gst/multifile/gstmultifilesink.c | 50 ++++++++++---------------------- 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/gst/multifile/gstmultifilesink.c b/gst/multifile/gstmultifilesink.c index adf4696a4a..da8f4e42a3 100644 --- a/gst/multifile/gstmultifilesink.c +++ b/gst/multifile/gstmultifilesink.c @@ -556,6 +556,8 @@ gst_multi_file_sink_write_stream_headers (GstMultiFileSink * sink) if (sink->streamheaders == NULL) return TRUE; + GST_DEBUG_OBJECT (sink, "Writing stream headers"); + /* we want to write these at the beginning */ g_assert (sink->cur_file_size == 0); @@ -583,29 +585,27 @@ gst_multi_file_sink_write_buffer (GstMultiFileSink * multifilesink, GstBuffer * buffer) { GstMapInfo map; - gchar *filename; gboolean ret; - GError *error = NULL; gboolean first_file = TRUE; gst_buffer_map (buffer, &map, GST_MAP_READ); switch (multifilesink->next_file) { case GST_MULTI_FILE_SINK_NEXT_BUFFER: - gst_multi_file_sink_ensure_max_files (multifilesink); - - filename = g_strdup_printf (multifilesink->filename, - multifilesink->index); - ret = g_file_set_contents (filename, (char *) map.data, map.size, &error); - if (!ret) - goto write_error; - - multifilesink->files = g_slist_append (multifilesink->files, filename); - multifilesink->n_files += 1; - - gst_multi_file_sink_post_message (multifilesink, buffer, filename); - multifilesink->index++; + if (multifilesink->files != NULL) + first_file = FALSE; + if (!gst_multi_file_sink_open_next_file (multifilesink)) + goto stdio_write_error; + if (first_file == FALSE) + gst_multi_file_sink_write_stream_headers (multifilesink); + GST_DEBUG_OBJECT (multifilesink, + "Writing buffer data (%" G_GSIZE_FORMAT " bytes) to new file", + map.size); + ret = fwrite (map.data, map.size, 1, multifilesink->file); + if (ret != 1) + goto stdio_write_error; + gst_multi_file_sink_close_file (multifilesink, buffer); break; case GST_MULTI_FILE_SINK_NEXT_DISCONT: if (GST_BUFFER_IS_DISCONT (buffer)) { @@ -712,26 +712,6 @@ gst_multi_file_sink_write_buffer (GstMultiFileSink * multifilesink, return GST_FLOW_OK; /* ERRORS */ -write_error: - { - switch (error->code) { - case G_FILE_ERROR_NOSPC:{ - GST_ELEMENT_ERROR (multifilesink, RESOURCE, NO_SPACE_LEFT, (NULL), - (NULL)); - break; - } - default:{ - GST_ELEMENT_ERROR (multifilesink, RESOURCE, WRITE, - ("Error while writing to file \"%s\".", filename), - ("%s", g_strerror (errno))); - } - } - g_error_free (error); - g_free (filename); - - gst_buffer_unmap (buffer, &map); - return GST_FLOW_ERROR; - } stdio_write_error: switch (errno) { case ENOSPC: