multifilesink: streamline the file-switch code a bit

Use the same functions regardless of the mode we are using
This commit is contained in:
Edward Hervey 2015-04-17 16:18:32 +02:00 committed by Edward Hervey
parent db0abbd531
commit f1ceaab02f

View file

@ -556,6 +556,8 @@ gst_multi_file_sink_write_stream_headers (GstMultiFileSink * sink)
if (sink->streamheaders == NULL) if (sink->streamheaders == NULL)
return TRUE; return TRUE;
GST_DEBUG_OBJECT (sink, "Writing stream headers");
/* we want to write these at the beginning */ /* we want to write these at the beginning */
g_assert (sink->cur_file_size == 0); g_assert (sink->cur_file_size == 0);
@ -583,29 +585,27 @@ gst_multi_file_sink_write_buffer (GstMultiFileSink * multifilesink,
GstBuffer * buffer) GstBuffer * buffer)
{ {
GstMapInfo map; GstMapInfo map;
gchar *filename;
gboolean ret; gboolean ret;
GError *error = NULL;
gboolean first_file = TRUE; gboolean first_file = TRUE;
gst_buffer_map (buffer, &map, GST_MAP_READ); gst_buffer_map (buffer, &map, GST_MAP_READ);
switch (multifilesink->next_file) { switch (multifilesink->next_file) {
case GST_MULTI_FILE_SINK_NEXT_BUFFER: case GST_MULTI_FILE_SINK_NEXT_BUFFER:
gst_multi_file_sink_ensure_max_files (multifilesink); if (multifilesink->files != NULL)
first_file = FALSE;
filename = g_strdup_printf (multifilesink->filename, if (!gst_multi_file_sink_open_next_file (multifilesink))
multifilesink->index); goto stdio_write_error;
ret = g_file_set_contents (filename, (char *) map.data, map.size, &error); if (first_file == FALSE)
if (!ret) gst_multi_file_sink_write_stream_headers (multifilesink);
goto write_error; GST_DEBUG_OBJECT (multifilesink,
"Writing buffer data (%" G_GSIZE_FORMAT " bytes) to new file",
multifilesink->files = g_slist_append (multifilesink->files, filename); map.size);
multifilesink->n_files += 1; ret = fwrite (map.data, map.size, 1, multifilesink->file);
if (ret != 1)
gst_multi_file_sink_post_message (multifilesink, buffer, filename); goto stdio_write_error;
multifilesink->index++;
gst_multi_file_sink_close_file (multifilesink, buffer);
break; break;
case GST_MULTI_FILE_SINK_NEXT_DISCONT: case GST_MULTI_FILE_SINK_NEXT_DISCONT:
if (GST_BUFFER_IS_DISCONT (buffer)) { if (GST_BUFFER_IS_DISCONT (buffer)) {
@ -712,26 +712,6 @@ gst_multi_file_sink_write_buffer (GstMultiFileSink * multifilesink,
return GST_FLOW_OK; return GST_FLOW_OK;
/* ERRORS */ /* 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: stdio_write_error:
switch (errno) { switch (errno) {
case ENOSPC: case ENOSPC: