2007-04-27 Sebastian Dröge <slomo@circular-chaos.org>
+ * docs/gst/gstreamer-sections.txt:
+ * gst/gsturi.c: (get_element_factories_from_uri_protocol),
+ (gst_uri_protocol_is_supported), (gst_element_make_from_uri):
+ * gst/gsturi.h:
+ API: Add gst_uri_protocol_is_supported(), which checks if an sink
+ or src that supports a given URI protocol exists.
+
+2007-04-27 Sebastian Dröge <slomo@circular-chaos.org>
+
* plugins/elements/gstfilesink.c: (gst_file_sink_uri_set_uri):
* plugins/elements/gstfilesrc.c: (gst_file_src_uri_set_uri):
Set the location to NULL if "file://" is set as URI. Otherwise
typedef struct
{
GstURIType type;
- gchar *protocol;
+ const gchar *protocol;
}
SearchEntry;
gst_plugin_feature_get_rank (first);
}
+static GList *
+get_element_factories_from_uri_protocol (const GstURIType type,
+ const gchar * protocol)
+{
+ GList *possibilities;
+ SearchEntry entry;
+
+ g_return_val_if_fail (protocol, NULL);
+
+ entry.type = type;
+ entry.protocol = protocol;
+ possibilities = gst_registry_feature_filter (gst_registry_get_default (),
+ search_by_entry, FALSE, &entry);
+
+ return possibilities;
+}
+
+/**
+ * gst_uri_protocol_is_supported:
+ * @type: Wether to check for a source or a sink
+ * @protocol: Protocol that should be checkd for.
+ *
+ * Checks if an element exists that supports the given URI protocol.
+ *
+ * Returns: TRUE
+ *
+ * Since: 0.10.13
+*/
+gboolean
+gst_uri_protocol_is_supported (const GstURIType type, const gchar * protocol)
+{
+ GList *possibilities;
+
+ g_return_val_if_fail (protocol, FALSE);
+
+ possibilities = get_element_factories_from_uri_protocol (type, protocol);
+
+ if (possibilities) {
+ g_list_free (possibilities);
+ return TRUE;
+ } else
+ return FALSE;
+}
+
/**
* gst_element_make_from_uri:
* @type: Wether to create a source or a sink
const gchar * elementname)
{
GList *possibilities, *walk;
- SearchEntry entry;
+ gchar *protocol;
GstElement *ret = NULL;
g_return_val_if_fail (GST_URI_TYPE_IS_VALID (type), NULL);
g_return_val_if_fail (gst_uri_is_valid (uri), NULL);
- entry.type = type;
- entry.protocol = gst_uri_get_protocol (uri);
- possibilities = gst_registry_feature_filter (gst_registry_get_default (),
- search_by_entry, FALSE, &entry);
- g_free (entry.protocol);
+ protocol = gst_uri_get_protocol (uri);
+ possibilities = get_element_factories_from_uri_protocol (type, protocol);
+ g_free (protocol);
if (!possibilities) {
GST_DEBUG ("No %s for URI '%s'", type == GST_URI_SINK ? "sink" : "source",
/* general URI functions */
gboolean gst_uri_protocol_is_valid (const gchar * protocol);
+gboolean gst_uri_protocol_is_supported (const GstURIType type,
+ const gchar *protocol);
gboolean gst_uri_is_valid (const gchar * uri);
gchar * gst_uri_get_protocol (const gchar * uri);
gboolean gst_uri_has_protocol (const gchar * uri,