All pastes #460770 Raw Edit

Mine

public text v1 · immutable
#460770 ·published 2007-04-27 08:25 UTC
rendered paste body
Index: ChangeLog
===================================================================
RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v
retrieving revision 1.3181
diff -u -p -u -p -r1.3181 ChangeLog
--- ChangeLog   27 Apr 2007 07:34:10 -0000      1.3181
+++ ChangeLog   27 Apr 2007 08:24:51 -0000
@@ -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: docs/gst/gstreamer-sections.txt
===================================================================
RCS file: /cvs/gstreamer/gstreamer/docs/gst/gstreamer-sections.txt,v
retrieving revision 1.297
diff -u -p -u -p -r1.297 gstreamer-sections.txt
--- docs/gst/gstreamer-sections.txt     20 Apr 2007 08:53:41 -0000      1.297
+++ docs/gst/gstreamer-sections.txt     27 Apr 2007 08:24:51 -0000
@@ -2069,6 +2069,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: gst/gsturi.c
===================================================================
RCS file: /cvs/gstreamer/gstreamer/gst/gsturi.c,v
retrieving revision 1.36
diff -u -p -u -p -r1.36 gsturi.c
--- gst/gsturi.c        6 Nov 2006 15:18:57 -0000       1.36
+++ gst/gsturi.c        27 Apr 2007 08:24:51 -0000
@@ -458,7 +458,7 @@ gst_uri_construct (const gchar * protoco
 typedef struct
 {
   GstURIType type;
-  gchar *protocol;
+  const gchar *protocol;
 }
 SearchEntry;
 
@@ -502,6 +502,50 @@ sort_by_rank (gconstpointer a, gconstpoi
       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 GstURIT
     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: gst/gsturi.h
===================================================================
RCS file: /cvs/gstreamer/gstreamer/gst/gsturi.h,v
retrieving revision 1.16
diff -u -p -u -p -r1.16 gsturi.h
--- gst/gsturi.h        9 Mar 2006 12:08:54 -0000       1.16
+++ gst/gsturi.h        27 Apr 2007 08:24:52 -0000
@@ -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,