From 57df18875761d6abe6ba88bc7290e29535396742 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 27 May 2011 13:55:31 +0200 Subject: [PATCH] caps: Add gst_caps_is_subset_structure() 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 | 1 + gst/gstcaps.c | 38 ++++++++++++++++++++++++++++++++++++++ gst/gstcaps.h | 2 ++ win32/common/libgstreamer.def | 1 + 4 files changed, 42 insertions(+) diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index 218ac4f..c29ac05 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -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 diff --git a/gst/gstcaps.c b/gst/gstcaps.c index 58a4aca..6cc6731 100644 --- a/gst/gstcaps.c +++ b/gst/gstcaps.c @@ -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 diff --git a/gst/gstcaps.h b/gst/gstcaps.h index f79939c..b7c5c0f 100644 --- a/gst/gstcaps.h +++ b/gst/gstcaps.h @@ -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, diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index 904adfc..a15e0e9 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -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 -- 2.7.4