API: Add gst_uri_protocol_is_supported(), which checks if an sink or src that support...
authorSebastian Dröge <slomo@circular-chaos.org>
Fri, 27 Apr 2007 08:30:59 +0000 (08:30 +0000)
committerSebastian Dröge <slomo@circular-chaos.org>
Fri, 27 Apr 2007 08:30:59 +0000 (08:30 +0000)
Original commit message from CVS:
* 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.

ChangeLog
docs/gst/gstreamer-sections.txt
gst/gsturi.c
gst/gsturi.h

index 9aad6ed..4a8b8f5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 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
index 096bb9a..5ce8dff 100644 (file)
@@ -2070,6 +2070,7 @@ GstURIHandlerInterface
 GstURIType
 GST_URI_TYPE_IS_VALID
 gst_uri_protocol_is_valid
+gst_uri_protocol_is_supported
 gst_uri_is_valid
 gst_uri_has_protocol
 gst_uri_get_protocol
index 0f3dd58..85e7cac 100644 (file)
@@ -458,7 +458,7 @@ gst_uri_construct (const gchar * protocol, const gchar * location)
 typedef struct
 {
   GstURIType type;
-  gchar *protocol;
+  const gchar *protocol;
 }
 SearchEntry;
 
@@ -502,6 +502,50 @@ sort_by_rank (gconstpointer a, gconstpointer b)
       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
@@ -517,17 +561,15 @@ gst_element_make_from_uri (const GstURIType type, const gchar * uri,
     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",
index 82bae5d..a3256a5 100644 (file)
@@ -113,6 +113,8 @@ struct _GstURIHandlerInterface {
 /* 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,