static gboolean gst_gio_src_start (GstBaseSrc * base_src) { GstGioSrc *src = GST_GIO_SRC (base_src); GFile *file; GError *err = NULL; GInputStream *stream; GCancellable *cancel = GST_GIO_BASE_SRC (src)->cancel; if (src->location == NULL) { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL), ("No location given")); return FALSE; } file = g_file_new_for_uri (src->location); if (file == NULL) { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL), ("Malformed URI or protocol not supported (%s)", src->location)); return FALSE; } stream = G_INPUT_STREAM (g_file_read (file, cancel, &err)); g_object_unref (file); if (stream == NULL && !gst_gio_error (src, "g_file_read", &err, NULL)) { if (GST_GIO_ERROR_MATCHES (err, NOT_FOUND)) { GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, (NULL), ("Could not open location %s for reading: %s", src->location, err->message)); } else { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL), ("Could not open location %s for reading: %s", src->location, err->message)); } g_clear_error (&err); return FALSE; } else if (stream == NULL) { return FALSE; } gst_gio_base_src_set_stream (GST_GIO_BASE_SRC (src), stream); GST_DEBUG_OBJECT (src, "opened location %s", src->location); return GST_BASE_SRC_CLASS (parent_class)->start (base_src); }
static gboolean gst_gio_src_start (GstBaseSrc * base_src) { GstGioSrc *src = GST_GIO_SRC (base_src); GError *err = NULL; GInputStream *stream; GCancellable *cancel = GST_GIO_BASE_SRC (src)->cancel; gchar *uri = NULL; if (src->file == NULL) { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL), ("No location or GFile given")); return FALSE; } uri = g_file_get_uri (src->file); if (!uri) uri = g_strdup ("(null)"); stream = G_INPUT_STREAM (g_file_read (src->file, cancel, &err)); if (stream == NULL && !gst_gio_error (src, "g_file_read", &err, NULL)) { if (GST_GIO_ERROR_MATCHES (err, NOT_FOUND)) { GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, (NULL), ("Could not open location %s for reading: %s", uri, err->message)); } else { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL), ("Could not open location %s for reading: %s", uri, err->message)); } g_free (uri); g_clear_error (&err); return FALSE; } else if (stream == NULL) { g_free (uri); return FALSE; } gst_gio_base_src_set_stream (GST_GIO_BASE_SRC (src), stream); GST_DEBUG_OBJECT (src, "opened location %s", uri); g_free (uri); return GST_BASE_SRC_CLASS (parent_class)->start (base_src); }