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; GstStructure *superset = user_data;
const GValue *other; const GValue *other;
int comparison;
if (!(other = gst_structure_id_get_value (superset, field_id))) if (!(other = gst_structure_id_get_value (superset, field_id)))
/* field is missing in the superset => is subset */ /* field is missing in the superset => is subset */
return TRUE; return TRUE;
comparison = gst_value_compare (other, value);
/* equal values are subset */ /* equal values are subset */
if (gst_value_compare (other, value) == GST_VALUE_EQUAL) if (comparison == GST_VALUE_EQUAL)
return TRUE; return TRUE;
/* ordered, but unequal, values are not */
if (comparison != GST_VALUE_UNORDERED)
return FALSE;
/* /*
* 1 - [1,2] = empty * 1 - [1,2] = empty
* -> !subset * -> !subset