mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-31 03:29:50 +00:00
multifilesink: streamline the file-switch code a bit
Use the same functions regardless of the mode we are using
This commit is contained in:
parent
db0abbd531
commit
f1ceaab02f
1 changed files with 15 additions and 35 deletions
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue