caps: Add gst_caps_is_subset_structure()
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 27 May 2011 11:55:31 +0000 (13:55 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 27 May 2011 11:55:31 +0000 (13:55 +0200)
API: gst_caps_is_subset_structure()

This allows to check if a structure is a subset of given
caps without allocating a new caps instance for it.

docs/gst/gstreamer-sections.txt
gst/gstcaps.c
gst/gstcaps.h
win32/common/libgstreamer.def

index 218ac4f..c29ac05 100644 (file)
@@ -323,6 +323,7 @@ gst_caps_is_equal
 gst_caps_is_equal_fixed
 gst_caps_is_always_compatible
 gst_caps_is_subset
+gst_caps_is_subset_structure
 gst_caps_can_intersect
 gst_caps_intersect
 gst_caps_intersect_full
index 58a4aca..6cc6731 100644 (file)
@@ -1107,6 +1107,44 @@ gst_caps_is_subset (const GstCaps * subset, const GstCaps * superset)
 }
 
 /**
+ * gst_caps_is_subset_structure:
+ * @caps: a #GstCaps
+ * @structure: a potential #GstStructure subset of @caps
+ *
+ * Checks if @structure is a subset of @caps. See gst_caps_is_subset()
+ * for more information.
+ *
+ * Returns: %TRUE if @structure is a subset of @caps
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_caps_is_subset_structure (const GstCaps * caps,
+    const GstStructure * structure)
+{
+  GstStructure *s;
+  gint i;
+
+  g_return_val_if_fail (caps != NULL, FALSE);
+  g_return_val_if_fail (structure != NULL, FALSE);
+
+  if (CAPS_IS_ANY (caps))
+    return TRUE;
+  if (CAPS_IS_EMPTY (caps))
+    return FALSE;
+
+  for (i = caps->structs->len - 1; i >= 0; i--) {
+    s = gst_caps_get_structure_unchecked (caps, i);
+    if (gst_structure_is_subset (structure, s)) {
+      /* If we found a superset return TRUE */
+      return TRUE;
+    }
+  }
+
+  return FALSE;
+}
+
+/**
  * gst_caps_is_equal:
  * @caps1: a #GstCaps
  * @caps2: another #GstCaps
index f79939c..b7c5c0f 100644 (file)
@@ -258,6 +258,8 @@ gboolean          gst_caps_is_always_compatible    (const GstCaps *caps1,
                                                     const GstCaps *caps2);
 gboolean          gst_caps_is_subset              (const GstCaps *subset,
                                                    const GstCaps *superset);
+gboolean          gst_caps_is_subset_structure     (const GstCaps *caps,
+                                                    const GstStructure *structure);
 gboolean          gst_caps_is_equal               (const GstCaps *caps1,
                                                    const GstCaps *caps2);
 gboolean          gst_caps_is_equal_fixed          (const GstCaps *caps1,
index 904adfc..a15e0e9 100644 (file)
@@ -172,6 +172,7 @@ EXPORTS
        gst_caps_is_equal_fixed
        gst_caps_is_fixed
        gst_caps_is_subset
+       gst_caps_is_subset_structure
        gst_caps_load_thyself
        gst_caps_make_writable
        gst_caps_merge