gststructure: early out when we know a value cannot be a subset

If two values can be ordered, but are unequal, they are
necessarily distinct, thus one cannot be a subset of the other.

https://bugzilla.gnome.org/show_bug.cgi?id=662777
This commit is contained in:
Vincent Penquerc'h 2011-10-27 11:41:30 +01:00
parent 29c97fe780
commit afc80c10d1

View file

@ -3109,15 +3109,22 @@ gst_caps_structure_is_subset_field (GQuark field_id, const GValue * value,
{
GstStructure *superset = user_data;
const GValue *other;
int comparison;
if (!(other = gst_structure_id_get_value (superset, field_id)))
/* field is missing in the superset => is subset */
return TRUE;
comparison = gst_value_compare (other, value);
/* equal values are subset */
if (gst_value_compare (other, value) == GST_VALUE_EQUAL)
if (comparison == GST_VALUE_EQUAL)
return TRUE;
/* ordered, but unequal, values are not */
if (comparison != GST_VALUE_UNORDERED)
return FALSE;
/*
* 1 - [1,2] = empty
* -> !subset