gstreamer: gstutils: replace gst_element_factory_can_{sink,src}_caps

Stefan Kost ensonic at kemper.freedesktop.org
Wed Mar 9 05:49:20 PST 2011


Module: gstreamer
Branch: master
Commit: dbc21e01741d13d96548f42e3bd648577f69295d
URL:    http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=dbc21e01741d13d96548f42e3bd648577f69295d

Author: Thijs Vermeir <thijsvermeir at gmail.com>
Date:   Wed Jun 23 22:00:04 2010 +0200

gstutils: replace gst_element_factory_can_{sink,src}_caps

Add new functions to clarify how the caps are compared to the template caps of
the element factory. Improve the docs to point out the difference.

Deprecate: gst_element_factory_can_{src|sink}_caps
API: add gst_element_factory_can_{src|sink}_{any|all}_capps

https://bugzilla.gnome.org/show_bug.cgi?id=402141

---

 gst/gstutils.c                |  155 +++++++++++++++++++++++++++++++++--------
 gst/gstutils.h                |   10 ++-
 win32/common/libgstreamer.def |    4 +
 3 files changed, 138 insertions(+), 31 deletions(-)

diff --git a/gst/gstutils.c b/gst/gstutils.c
index 3e8ef11..f517d55 100644
--- a/gst/gstutils.c
+++ b/gst/gstutils.c
@@ -1271,18 +1271,9 @@ gst_element_state_change_return_get_name (GstStateChangeReturn state_ret)
 }
 
 
-/**
- * gst_element_factory_can_src_caps:
- * @factory: factory to query
- * @caps: the caps to check
- *
- * Checks if the factory can source the given capability.
- *
- * Returns: true if it can src the capabilities
- */
-gboolean
-gst_element_factory_can_src_caps (GstElementFactory * factory,
-    const GstCaps * caps)
+static gboolean
+gst_element_factory_can_accept_all_caps_in_direction (GstElementFactory *
+    factory, const GstCaps * caps, GstPadDirection direction)
 {
   GList *templates;
 
@@ -1294,9 +1285,9 @@ gst_element_factory_can_src_caps (GstElementFactory * factory,
   while (templates) {
     GstStaticPadTemplate *template = (GstStaticPadTemplate *) templates->data;
 
-    if (template->direction == GST_PAD_SRC) {
-      if (gst_caps_is_always_compatible (gst_static_caps_get
-              (&template->static_caps), caps))
+    if (template->direction == direction) {
+      if (gst_caps_is_always_compatible (caps,
+              gst_static_caps_get (&template->static_caps)))
         return TRUE;
     }
     templates = g_list_next (templates);
@@ -1305,18 +1296,9 @@ gst_element_factory_can_src_caps (GstElementFactory * factory,
   return FALSE;
 }
 
-/**
- * gst_element_factory_can_sink_caps:
- * @factory: factory to query
- * @caps: the caps to check
- *
- * Checks if the factory can sink the given capability.
- *
- * Returns: true if it can sink the capabilities
- */
-gboolean
-gst_element_factory_can_sink_caps (GstElementFactory * factory,
-    const GstCaps * caps)
+static gboolean
+gst_element_factory_can_accept_any_caps_in_direction (GstElementFactory *
+    factory, const GstCaps * caps, GstPadDirection direction)
 {
   GList *templates;
 
@@ -1328,8 +1310,8 @@ gst_element_factory_can_sink_caps (GstElementFactory * factory,
   while (templates) {
     GstStaticPadTemplate *template = (GstStaticPadTemplate *) templates->data;
 
-    if (template->direction == GST_PAD_SINK) {
-      if (gst_caps_is_always_compatible (caps,
+    if (template->direction == direction) {
+      if (gst_caps_can_intersect (caps,
               gst_static_caps_get (&template->static_caps)))
         return TRUE;
     }
@@ -1339,6 +1321,121 @@ gst_element_factory_can_sink_caps (GstElementFactory * factory,
   return FALSE;
 }
 
+#ifndef GST_DISABLE_DEPRECATED
+/**
+ * gst_element_factory_can_src_caps:
+ * @factory: factory to query
+ * @caps: the caps to check
+ *
+ * Checks if the factory can source the given capability.
+ *
+ * Returns: %TRUE if it can src the capabilities
+ *
+ * Deprecated: use gst_element_factory_can_src_all_caps() instead.
+ */
+gboolean
+gst_element_factory_can_src_caps (GstElementFactory * factory,
+    const GstCaps * caps)
+{
+  return gst_element_factory_can_accept_all_caps_in_direction (factory, caps,
+      GST_PAD_SRC);
+}
+
+/**
+ * gst_element_factory_can_sink_caps:
+ * @factory: factory to query
+ * @caps: the caps to check
+ *
+ * Checks if the factory can sink the given capability.
+ *
+ * Returns: %TRUE if it can sink the capabilities
+ *
+ * Deprecated: use gst_element_factory_can_sink_all_caps() instead.
+ */
+gboolean
+gst_element_factory_can_sink_caps (GstElementFactory * factory,
+    const GstCaps * caps)
+{
+  return gst_element_factory_can_accept_all_caps_in_direction (factory, caps,
+      GST_PAD_SINK);
+}
+#endif /* GST_DISABLE_DEPRECATED */
+
+/**
+ * gst_element_factory_can_sink_all_caps:
+ * @factory: factory to query
+ * @caps: the caps to check
+ *
+ * Checks if the factory can sink all possible capabilities.
+ *
+ * Returns: %TRUE if the caps are fully compatible.
+ *
+ * Since: 0.10.33
+ */
+gboolean
+gst_element_factory_can_sink_all_caps (GstElementFactory * factory,
+    const GstCaps * caps)
+{
+  return gst_element_factory_can_accept_all_caps_in_direction (factory, caps,
+      GST_PAD_SINK);
+}
+
+/**
+ * gst_element_factory_can_src_all_caps:
+ * @factory: factory to query
+ * @caps: the caps to check
+ *
+ * Checks if the factory can src all possible capabilities.
+ *
+ * Returns: %TRUE if the caps are fully compatible.
+ *
+ * Since: 0.10.33
+ */
+gboolean
+gst_element_factory_can_src_all_caps (GstElementFactory * factory,
+    const GstCaps * caps)
+{
+  return gst_element_factory_can_accept_all_caps_in_direction (factory, caps,
+      GST_PAD_SRC);
+}
+
+/**
+ * gst_element_factory_can_sink_any_caps:
+ * @factory: factory to query
+ * @caps: the caps to check
+ *
+ * Checks if the factory can sink any possible capability.
+ *
+ * Returns: %TRUE if the caps have a common subset.
+ *
+ * Since: 0.10.33
+ */
+gboolean
+gst_element_factory_can_sink_any_caps (GstElementFactory * factory,
+    const GstCaps * caps)
+{
+  return gst_element_factory_can_accept_any_caps_in_direction (factory, caps,
+      GST_PAD_SINK);
+}
+
+/**
+ * gst_element_factory_can_src_any_caps:
+ * @factory: factory to query
+ * @caps: the caps to check
+ *
+ * Checks if the factory can src any possible capability.
+ *
+ * Returns: %TRUE if the caps have a common subset.
+ *
+ * Since: 0.10.33
+ */
+gboolean
+gst_element_factory_can_src_any_caps (GstElementFactory * factory,
+    const GstCaps * caps)
+{
+  return gst_element_factory_can_accept_any_caps_in_direction (factory, caps,
+      GST_PAD_SRC);
+}
 
 /* if return val is true, *direct_child is a caller-owned ref on the direct
  * child of ancestor that is part of object's ancestry */
diff --git a/gst/gstutils.h b/gst/gstutils.h
index 1c28f1e..dd93658 100644
--- a/gst/gstutils.h
+++ b/gst/gstutils.h
@@ -1034,8 +1034,14 @@ gboolean                gst_element_seek_simple         (GstElement   *element,
                                                          gint64        seek_pos);
 
 /* util elementfactory functions */
-gboolean		gst_element_factory_can_src_caps(GstElementFactory *factory, const GstCaps *caps);
-gboolean		gst_element_factory_can_sink_caps(GstElementFactory *factory, const GstCaps *caps);
+#ifndef GST_DISABLE_DEPRECATED
+gboolean		gst_element_factory_can_src_caps    (GstElementFactory *factory, const GstCaps *caps);
+gboolean		gst_element_factory_can_sink_caps   (GstElementFactory *factory, const GstCaps *caps);
+#endif /* GST_DISABLE_DEPRECATED */
+gboolean gst_element_factory_can_sink_all_caps (GstElementFactory *factory, const GstCaps *caps);
+gboolean gst_element_factory_can_src_all_caps  (GstElementFactory *factory, const GstCaps *caps);
+gboolean gst_element_factory_can_sink_any_caps (GstElementFactory *factory, const GstCaps *caps);
+gboolean gst_element_factory_can_src_any_caps  (GstElementFactory *factory, const GstCaps *caps);
 
 /* util query functions */
 gboolean                gst_element_query_position      (GstElement *element, GstFormat *format,
diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def
index aae5e2e..1b567bb 100644
--- a/win32/common/libgstreamer.def
+++ b/win32/common/libgstreamer.def
@@ -303,6 +303,10 @@ EXPORTS
 	gst_element_create_all_pads
 	gst_element_factory_can_sink_caps
 	gst_element_factory_can_src_caps
+	gst_element_factory_can_sink_all_caps
+	gst_element_factory_can_sink_any_caps
+	gst_element_factory_can_src_all_caps
+	gst_element_factory_can_src_any_caps
 	gst_element_factory_create
 	gst_element_factory_find
 	gst_element_factory_get_author



More information about the gstreamer-commits mailing list