Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}