📄 gstvalue.c
字号:
/* Value for tests */ g_value_init (&cmp, GST_TYPE_FRACTION); /* fraction <-> fraction */ g_value_init (&src1, GST_TYPE_FRACTION); gst_value_set_fraction (&src1, 10, 1); g_value_init (&src2, GST_TYPE_FRACTION); gst_value_set_fraction (&src2, 20, 1); gst_value_set_fraction (&src1, 10, 1); /* subtract as in sets, result is 10 */ ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == TRUE); fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL); g_value_unset (&dest); /* same values, yields empty set */ ret = gst_value_subtract (&dest, &src1, &src1); fail_unless (ret == FALSE); g_value_unset (&src1); g_value_unset (&src2); /* fraction <-> fraction_range */ /* would yield an empty set */ g_value_init (&src1, GST_TYPE_FRACTION); gst_value_set_fraction (&src1, 10, 1); g_value_init (&src2, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src2, 0, 1, 20, 1); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == FALSE); /* and the other way around, we cannot create open ranges * so the result is the range again */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE); gst_value_set_fraction (&cmp, 0, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest), &cmp) == GST_VALUE_EQUAL); gst_value_set_fraction (&cmp, 20, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest), &cmp) == GST_VALUE_EQUAL); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* border case 1, empty set */ g_value_init (&src1, GST_TYPE_FRACTION); gst_value_set_fraction (&src1, 10, 1); g_value_init (&src2, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src2, 10, 1, 20, 1); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == FALSE); /* and the other way around, should keep same range as * we don't have open ranges. */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE); gst_value_set_fraction (&cmp, 10, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest), &cmp) == GST_VALUE_EQUAL); gst_value_set_fraction (&cmp, 20, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest), &cmp) == GST_VALUE_EQUAL); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* case 2, valid set */ g_value_init (&src1, GST_TYPE_FRACTION); gst_value_set_fraction (&src1, 0, 1); g_value_init (&src2, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src2, 10, 1, 20, 1); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_FRACTION (&dest) == TRUE); fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL); g_value_unset (&dest); /* and the other way around, should keep the range. */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE); fail_unless (gst_value_compare (&dest, &src2) == GST_VALUE_EQUAL); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* fraction_range <-> fraction_range */ /* same range, empty set */ g_value_init (&src1, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src1, 10, 2, 20, 2); g_value_init (&src2, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src2, 10, 2, 20, 2); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == FALSE); ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == FALSE); g_value_unset (&src1); g_value_unset (&src2); /* non overlapping ranges */ g_value_init (&src1, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src1, 10, 2, 10, 1); g_value_init (&src2, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src2, 30, 2, 40, 2); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE); gst_value_set_fraction (&cmp, 5, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest), &cmp) == GST_VALUE_EQUAL); gst_value_set_fraction (&cmp, 10, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest), &cmp) == GST_VALUE_EQUAL); g_value_unset (&dest); /* the other way */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE); gst_value_set_fraction (&cmp, 15, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest), &cmp) == GST_VALUE_EQUAL); gst_value_set_fraction (&cmp, 20, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest), &cmp) == GST_VALUE_EQUAL); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* completely overlapping ranges */ g_value_init (&src1, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src1, 10, 1, 20, 1); g_value_init (&src2, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src2, 10, 1, 30, 1); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == FALSE); /* the other way */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE); gst_value_set_fraction (&cmp, 20, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest), &cmp) == GST_VALUE_EQUAL); gst_value_set_fraction (&cmp, 30, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest), &cmp) == GST_VALUE_EQUAL); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* partially overlapping ranges */ g_value_init (&src1, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src1, 10, 1, 20, 1); g_value_init (&src2, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src2, 15, 1, 30, 1); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE); gst_value_set_fraction (&cmp, 10, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest), &cmp) == GST_VALUE_EQUAL); gst_value_set_fraction (&cmp, 15, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest), &cmp) == GST_VALUE_EQUAL); g_value_unset (&dest); /* the other way */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE); gst_value_set_fraction (&cmp, 20, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest), &cmp) == GST_VALUE_EQUAL); gst_value_set_fraction (&cmp, 30, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest), &cmp) == GST_VALUE_EQUAL); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* create a hole { double_range, double_range } */ g_value_init (&src1, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src1, 10, 1, 30, 1); g_value_init (&src2, GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range_full (&src2, 15, 1, 20, 1); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_LIST (&dest) == TRUE); /* 1st list entry */ tmp = gst_value_list_get_value (&dest, 0); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (tmp) == TRUE); gst_value_set_fraction (&cmp, 10, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_min (tmp), &cmp) == GST_VALUE_EQUAL); gst_value_set_fraction (&cmp, 15, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_max (tmp), &cmp) == GST_VALUE_EQUAL); /* 2nd list entry */ tmp = gst_value_list_get_value (&dest, 1); fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (tmp) == TRUE); gst_value_set_fraction (&cmp, 20, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_min (tmp), &cmp) == GST_VALUE_EQUAL); gst_value_set_fraction (&cmp, 30, 1); fail_unless (gst_value_compare (gst_value_get_fraction_range_max (tmp), &cmp) == GST_VALUE_EQUAL); g_value_unset (&dest); /* the other way */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == FALSE); g_value_unset (&src1); g_value_unset (&src2); g_value_unset (&cmp);}GST_END_TEST;GST_START_TEST (test_date){ GstStructure *s; GDate *date, *date2; gchar *str; date = g_date_new_dmy (22, 9, 2005); s = gst_structure_new ("media/x-type", "SOME_DATE_TAG", GST_TYPE_DATE, date, NULL); fail_unless (gst_structure_has_field_typed (s, "SOME_DATE_TAG", GST_TYPE_DATE)); fail_unless (gst_structure_get_date (s, "SOME_DATE_TAG", &date2)); fail_unless (date2 != NULL); fail_unless (g_date_valid (date2)); fail_unless (g_date_compare (date, date2) == 0); g_date_free (date); g_date_free (date2); date = NULL; date2 = NULL; str = gst_structure_to_string (s); gst_structure_free (s); s = NULL; fail_unless (g_str_equal (str, "media/x-type, SOME_DATE_TAG=(GstDate)2005-09-22;")); s = gst_structure_from_string (str, NULL); g_free (str); str = NULL; fail_unless (s != NULL); fail_unless (gst_structure_has_name (s, "media/x-type")); fail_unless (gst_structure_has_field_typed (s, "SOME_DATE_TAG", GST_TYPE_DATE)); fail_unless (gst_structure_get_date (s, "SOME_DATE_TAG", &date)); fail_unless (date != NULL); fail_unless (g_date_valid (date)); fail_unless (g_date_get_day (date) == 22); fail_unless (g_date_get_month (date) == 9); fail_unless (g_date_get_year (date) == 2005); g_date_free (date); date = NULL; str = gst_structure_to_string (s); gst_structure_free (s); s = NULL; fail_unless (g_str_equal (str, "media/x-type, SOME_DATE_TAG=(GstDate)2005-09-22;")); g_free (str); str = NULL;}GST_END_TEST;GST_START_TEST (test_fraction_range){ GValue range = { 0, }; GValue start = { 0, }, end = { 0,}; GValue src = { 0, }, dest = { 0,}; GValue range2 = { 0, }; g_value_init (&range, GST_TYPE_FRACTION_RANGE); g_value_init (&range2, GST_TYPE_FRACTION_RANGE); g_value_init (&start, GST_TYPE_FRACTION); g_value_init (&end, GST_TYPE_FRACTION); g_value_init (&src, GST_TYPE_FRACTION); gst_value_set_fraction (&src, 1, 2); /* Check that a intersection of fraction & range = fraction */ gst_value_set_fraction (&start, 1, 4); gst_value_set_fraction (&end, 2, 3); gst_value_set_fraction_range (&range, &start, &end); fail_unless (gst_value_intersect (&dest, &src, &range) == TRUE); fail_unless (G_VALUE_TYPE (&dest) == GST_TYPE_FRACTION); fail_unless (gst_value_compare (&dest, &src) == GST_VALUE_EQUAL); /* Check that a intersection selects the overlapping range */ gst_value_set_fraction (&start, 1, 3); gst_value_set_fraction (&end, 2, 3); gst_value_set_fraction_range (&range2, &start, &end); g_value_unset (&dest); fail_unless (gst_value_intersect (&dest, &range, &range2) == TRUE); fail_unless (G_VALUE_TYPE (&dest) == GST_TYPE_FRACTION_RANGE); gst_value_set_fraction_range (&range2, &start, &end); fail_unless (gst_value_compare (&dest, &range2) == GST_VALUE_EQUAL); /* Check that non intersection ranges don't intersect */ gst_value_set_fraction (&start, 4, 2); gst_value_set_fraction (&end, 5, 2); gst_value_set_fraction_range (&range2, &start, &end); g_value_unset (&dest); fail_unless (gst_value_intersect (&dest, &range, &range2) == FALSE); g_value_unset (&start); g_value_unset (&end); g_value_unset (&range); g_value_unset (&range2); g_value_unset (&src);}GST_END_TEST;GST_START_TEST (test_serialize_deserialize_format_enum){ GstStructure *s, *s2; GstFormat foobar_fmt; gchar *str, *str2, *end = NULL; /* make sure custom formats are serialised properly as well */ foobar_fmt = gst_format_register ("foobar", "GST_FORMAT_FOOBAR"); fail_unless (foobar_fmt != GST_FORMAT_UNDEFINED); s = gst_structure_new ("foo/bar", "format1", GST_TYPE_FORMAT, GST_FORMAT_BYTES, "format2", GST_TYPE_FORMAT, GST_FORMAT_TIME, "format3", GST_TYPE_FORMAT, GST_FORMAT_DEFAULT, "format4", GST_TYPE_FORMAT, foobar_fmt, NULL); str = gst_structure_to_string (s); GST_LOG ("Got structure string '%s'", GST_STR_NULL (str)); fail_unless (str != NULL); fail_unless (strstr (str, "TIME") != NULL); fail_unless (strstr (str, "BYTE") != NULL); fail_unless (strstr (str, "DEFAULT") != NULL); fail_unless (strstr (str, "FOOBAR") != NULL); s2 = gst_structure_from_string (str, &end); fail_unless (s2 != NULL); str2 = gst_structure_to_string (s2); fail_unless (str2 != NULL); fail_unless (g_str_equal (str, str2)); g_free (str); g_free (str2); gst_structure_free (s); gst_structure_free (s2);}GST_END_TEST;Suite *gst_value_suite (void){ Suite *s = suite_create ("GstValue"); TCase *tc_chain = tcase_create ("general"); suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_deserialize_buffer); tcase_add_test (tc_chain, test_serialize_buffer); tcase_add_test (tc_chain, test_deserialize_gint); tcase_add_test (tc_chain, test_deserialize_gint_failures); tcase_add_test (tc_chain, test_deserialize_guint); tcase_add_test (tc_chain, test_deserialize_guint_failures); tcase_add_test (tc_chain, test_deserialize_gint64); tcase_add_test (tc_chain, test_deserialize_gstfraction); tcase_add_test (tc_chain, test_serialize_flags); tcase_add_test (tc_chain, test_deserialize_flags); tcase_add_test (tc_chain, test_serialize_deserialize_format_enum); tcase_add_test (tc_chain, test_string); tcase_add_test (tc_chain, test_deserialize_string); tcase_add_test (tc_chain, test_value_compare); tcase_add_test (tc_chain, test_value_intersect); tcase_add_test (tc_chain, test_value_subtract_int); tcase_add_test (tc_chain, test_value_subtract_double); tcase_add_test (tc_chain, test_value_subtract_fraction); tcase_add_test (tc_chain, test_value_subtract_fraction_range); tcase_add_test (tc_chain, test_date); tcase_add_test (tc_chain, test_fraction_range); return s;}GST_CHECK_MAIN (gst_value);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -