From: Thibault Saunier Date: Fri, 13 Mar 2020 19:41:52 +0000 (-0300) Subject: value: Handle NULL caps for comparisons X-Git-Tag: 1.19.3~973 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a1aebe73d545cae4d499d12c70fee25f46f7cc90;p=platform%2Fupstream%2Fgstreamer.git value: Handle NULL caps for comparisons Having a NULL caps in a GValue is legal and we should handle it properly for comparisons. --- diff --git a/gst/gstvalue.c b/gst/gstvalue.c index 30f5b77a2f..cdbd7eff64 100644 --- a/gst/gstvalue.c +++ b/gst/gstvalue.c @@ -2087,6 +2087,12 @@ gst_value_compare_caps (const GValue * value1, const GValue * value2) GstCaps *caps1 = GST_CAPS (gst_value_get_caps (value1)); GstCaps *caps2 = GST_CAPS (gst_value_get_caps (value2)); + if (caps1 == caps2) + return GST_VALUE_EQUAL; + + if (!caps1 || !caps2) + return GST_VALUE_UNORDERED; + if (gst_caps_is_equal (caps1, caps2)) return GST_VALUE_EQUAL; return GST_VALUE_UNORDERED; diff --git a/tests/check/gst/gstvalue.c b/tests/check/gst/gstvalue.c index eb1634d4f3..adbcc2e4b4 100644 --- a/tests/check/gst/gstvalue.c +++ b/tests/check/gst/gstvalue.c @@ -2720,6 +2720,31 @@ GST_START_TEST (test_serialize_deserialize_value_array) GST_END_TEST; +GST_START_TEST (test_compare_caps) +{ + GValue value = { 0 } + , value2 = { + 0}; + + g_value_init (&value, GST_TYPE_CAPS); + g_value_init (&value2, GST_TYPE_CAPS); + g_value_take_boxed (&value, NULL); + g_value_take_boxed (&value2, NULL); + + fail_unless_equals_int (gst_value_compare (&value, &value2), GST_VALUE_EQUAL); + + g_value_take_boxed (&value, gst_caps_new_empty_simple ("something")); + + fail_unless_equals_int (gst_value_compare (&value, &value2), + GST_VALUE_UNORDERED); + + g_value_unset (&value); + g_value_unset (&value2); + +} + +GST_END_TEST; + GST_START_TEST (test_serialize_deserialize_caps) { GValue value = { 0 } @@ -3510,6 +3535,7 @@ gst_value_suite (void) tcase_add_test (tc_chain, test_date_time); tcase_add_test (tc_chain, test_fraction_range); tcase_add_test (tc_chain, test_serialize_deserialize_caps); + tcase_add_test (tc_chain, test_compare_caps); tcase_add_test (tc_chain, test_int_range); tcase_add_test (tc_chain, test_int64_range); tcase_add_test (tc_chain, test_serialize_int64_range);