multifilesink: streamline the file-switch code a bit
authorEdward Hervey <edward@centricular.com>
Fri, 17 Apr 2015 14:18:32 +0000 (16:18 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Wed, 20 May 2015 13:50:07 +0000 (15:50 +0200)
Use the same functions regardless of the mode we are using

gst/multifile/gstmultifilesink.c

index adf4696..da8f4e4 100644 (file)
@@ -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: