static gboolean dvb_base_bin_uri_set_uri (GstURIHandler * handler, const gchar * uri, GError ** error) { DvbBaseBin *dvbbasebin = GST_DVB_BASE_BIN (handler); gchar *location; location = gst_uri_get_location (uri); if (location == NULL) goto no_location; if (!set_properties_for_channel (GST_ELEMENT (dvbbasebin), location)) goto set_properties_failed; /* FIXME: here is where we parse channels.conf */ g_free (location); return TRUE; /* ERRORS */ no_location: { g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI, "No details to DVB URI"); return FALSE; } set_properties_failed: { g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI, "Could not set properties from DVB URI"); g_free (location); return FALSE; } }
static gboolean dvb_base_bin_uri_set_uri (GstURIHandler * handler, const gchar * uri) { gboolean ret; gchar *protocol; DvbBaseBin *dvbbasebin = GST_DVB_BASE_BIN (handler); protocol = gst_uri_get_protocol (uri); if (strcmp (protocol, "dvb") != 0) { ret = FALSE; } else { gchar *location = gst_uri_get_location (uri); if (location != NULL) { ret = set_properties_for_channel (G_OBJECT (dvbbasebin), location); g_free (location); } else ret = FALSE; } /* here is where we parse channels.conf */ g_free (protocol); return ret; }
static gboolean dvb_base_bin_uri_set_uri (GstURIHandler * handler, const gchar * uri, GError ** error) { DvbBaseBin *dvbbasebin = GST_DVB_BASE_BIN (handler); GError *err = NULL; gchar *location; location = gst_uri_get_location (uri); if (location == NULL) goto no_location; /* FIXME: here is where we parse channels.conf */ if (!set_properties_for_channel (GST_ELEMENT (dvbbasebin), location, &err)) goto set_properties_failed; g_free (location); return TRUE; post_error_and_exit: { gst_element_message_full (GST_ELEMENT (dvbbasebin), GST_MESSAGE_ERROR, err->domain, err->code, g_strdup (err->message), NULL, __FILE__, GST_FUNCTION, __LINE__); g_propagate_error (error, err); return FALSE; } no_location: { g_set_error (&err, GST_URI_ERROR, GST_URI_ERROR_BAD_URI, "No details to DVB URI"); goto post_error_and_exit; } set_properties_failed: { g_free (location); if (!err) g_set_error (&err, GST_URI_ERROR, GST_URI_ERROR_BAD_REFERENCE, "Could not find information for channel"); goto post_error_and_exit; } }