⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gstvalue.c

📁 gnash 在pc和嵌入式下开发需要的源码
💻 C
📖 第 1 页 / 共 4 页
字号:
  /* 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 + -