| /* |
| * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de> |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public |
| * License along with this library; if not, write to the |
| * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| |
| #include <gst/check/gstcheck.h> |
| |
| #include <string.h> |
| |
| /* multiple artists are possible (unfixed) */ |
| #define UTAG GST_TAG_ARTIST |
| #define UNFIXED1 "Britney Spears" |
| #define UNFIXED2 "Evanescence" |
| #define UNFIXED3 "AC/DC" |
| #define UNFIXED4 "The Prodigy" |
| |
| /* license is fixed */ |
| #define FTAG GST_TAG_LICENSE |
| #define FIXED1 "Lesser General Public License" |
| #define FIXED2 "Microsoft End User License Agreement" |
| #define FIXED3 "Mozilla Public License" |
| #define FIXED4 "Public Domain" |
| |
| /* checks that a tag contains the given values and not more values */ |
| static void |
| check_tags (const GstTagList * list, const gchar * tag, const gchar * value, |
| ...) |
| { |
| va_list args; |
| gchar *str; |
| guint i = 0; |
| |
| va_start (args, value); |
| while (value != NULL) { |
| fail_unless (gst_tag_list_get_string_index (list, tag, i, &str)); |
| fail_unless (strcmp (value, str) == 0); |
| g_free (str); |
| |
| value = va_arg (args, gchar *); |
| i++; |
| } |
| fail_unless (i == gst_tag_list_get_tag_size (list, tag)); |
| va_end (args); |
| } |
| |
| static void |
| check_tags_empty (const GstTagList * list) |
| { |
| GST_DEBUG ("taglist: %" GST_PTR_FORMAT, list); |
| fail_unless ((list == NULL) || (gst_tag_list_is_empty (list))); |
| } |
| |
| #define NEW_LIST_FIXED(mode) \ |
| G_STMT_START { \ |
| if (list) gst_tag_list_unref (list); \ |
| list = gst_tag_list_new_empty (); \ |
| gst_tag_list_add (list, mode, FTAG, FIXED1, FTAG, FIXED2, \ |
| FTAG, FIXED3, FTAG, FIXED4, NULL); \ |
| mark_point(); \ |
| } G_STMT_END; |
| |
| #define NEW_LIST_UNFIXED(mode) \ |
| G_STMT_START { \ |
| if (list) gst_tag_list_unref (list); \ |
| list = gst_tag_list_new_empty (); \ |
| gst_tag_list_add (list, mode, UTAG, UNFIXED1, UTAG, UNFIXED2, \ |
| UTAG, UNFIXED3, UTAG, UNFIXED4, NULL); \ |
| mark_point(); \ |
| } G_STMT_END; |
| |
| #define NEW_LISTS_FIXED(mode) \ |
| G_STMT_START { \ |
| if (list) gst_tag_list_unref (list); \ |
| list = gst_tag_list_new_empty (); \ |
| gst_tag_list_add (list, GST_TAG_MERGE_APPEND, FTAG, FIXED1, \ |
| FTAG, FIXED2, NULL); \ |
| if (list2) gst_tag_list_unref (list2); \ |
| list2 = gst_tag_list_new_empty (); \ |
| gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, FTAG, FIXED3, \ |
| FTAG, FIXED4, NULL); \ |
| if (merge) gst_tag_list_unref (merge); \ |
| merge = gst_tag_list_merge (list, list2, mode); \ |
| mark_point(); \ |
| } G_STMT_END; |
| |
| #define NEW_LISTS_UNFIXED(mode) \ |
| G_STMT_START { \ |
| if (list) gst_tag_list_unref (list); \ |
| list = gst_tag_list_new_empty (); \ |
| gst_tag_list_add (list, GST_TAG_MERGE_APPEND, UTAG, UNFIXED1, \ |
| UTAG, UNFIXED2, NULL); \ |
| if (list2) gst_tag_list_unref (list2); \ |
| list2 = gst_tag_list_new_empty (); \ |
| gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, UTAG, UNFIXED3,\ |
| UTAG, UNFIXED4, NULL); \ |
| if (merge) gst_tag_list_unref (merge); \ |
| merge = gst_tag_list_merge (list, list2, mode); \ |
| mark_point(); \ |
| } G_STMT_END; |
| |
| #define NEW_LISTS_EMPTY1(mode) \ |
| G_STMT_START { \ |
| if (list) gst_tag_list_unref (list); \ |
| list = NULL; \ |
| if (list2) gst_tag_list_unref (list2); \ |
| list2 = gst_tag_list_new_empty (); \ |
| gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, FTAG, FIXED3, \ |
| FTAG, FIXED4, NULL); \ |
| if (merge) gst_tag_list_unref (merge); \ |
| merge = gst_tag_list_merge (list, list2, mode); \ |
| mark_point(); \ |
| } G_STMT_END; |
| |
| #define NEW_LISTS_EMPTY2(mode) \ |
| G_STMT_START { \ |
| if (list) gst_tag_list_unref (list); \ |
| list = gst_tag_list_new_empty (); \ |
| gst_tag_list_add (list, GST_TAG_MERGE_APPEND, FTAG, FIXED1, \ |
| FTAG, FIXED2, NULL); \ |
| if (list2) gst_tag_list_unref (list2); \ |
| list2 = NULL; \ |
| if (merge) gst_tag_list_unref (merge); \ |
| merge = gst_tag_list_merge (list, list2, mode); \ |
| mark_point(); \ |
| } G_STMT_END; |
| |
| |
| GST_START_TEST (test_basics) |
| { |
| /* make sure the assumptions work */ |
| fail_unless (gst_tag_is_fixed (FTAG)); |
| fail_unless (!gst_tag_is_fixed (UTAG)); |
| /* we check string here only */ |
| fail_unless (gst_tag_get_type (FTAG) == G_TYPE_STRING); |
| fail_unless (gst_tag_get_type (UTAG) == G_TYPE_STRING); |
| } |
| |
| GST_END_TEST |
| GST_START_TEST (test_add) |
| { |
| GstTagList *list = NULL; |
| |
| /* check additions */ |
| /* unfixed */ |
| NEW_LIST_UNFIXED (GST_TAG_MERGE_REPLACE_ALL); |
| check_tags (list, UTAG, UNFIXED4, NULL); |
| NEW_LIST_UNFIXED (GST_TAG_MERGE_REPLACE); |
| check_tags (list, UTAG, UNFIXED4, NULL); |
| NEW_LIST_UNFIXED (GST_TAG_MERGE_PREPEND); |
| check_tags (list, UTAG, UNFIXED4, UNFIXED3, UNFIXED2, UNFIXED1, NULL); |
| NEW_LIST_UNFIXED (GST_TAG_MERGE_APPEND); |
| check_tags (list, UTAG, UNFIXED1, UNFIXED2, UNFIXED3, UNFIXED4, NULL); |
| NEW_LIST_UNFIXED (GST_TAG_MERGE_KEEP); |
| check_tags (list, UTAG, UNFIXED1, NULL); |
| NEW_LIST_UNFIXED (GST_TAG_MERGE_KEEP_ALL); |
| check_tags (list, UTAG, NULL); |
| |
| /* fixed */ |
| NEW_LIST_FIXED (GST_TAG_MERGE_REPLACE_ALL); |
| check_tags (list, FTAG, FIXED4, NULL); |
| NEW_LIST_FIXED (GST_TAG_MERGE_REPLACE); |
| check_tags (list, FTAG, FIXED4, NULL); |
| NEW_LIST_FIXED (GST_TAG_MERGE_PREPEND); |
| check_tags (list, FTAG, FIXED4, NULL); |
| NEW_LIST_FIXED (GST_TAG_MERGE_APPEND); |
| check_tags (list, FTAG, FIXED1, NULL); |
| NEW_LIST_FIXED (GST_TAG_MERGE_KEEP); |
| check_tags (list, FTAG, FIXED1, NULL); |
| NEW_LIST_FIXED (GST_TAG_MERGE_KEEP_ALL); |
| check_tags (list, FTAG, NULL); |
| |
| /* clean up */ |
| if (list) |
| gst_tag_list_unref (list); |
| } |
| |
| GST_END_TEST |
| GST_START_TEST (test_merge) |
| { |
| GstTagList *list = NULL, *list2 = NULL, *merge = NULL; |
| |
| /* check merging */ |
| /* unfixed */ |
| GST_DEBUG ("unfixed"); |
| NEW_LISTS_UNFIXED (GST_TAG_MERGE_REPLACE_ALL); |
| check_tags (merge, UTAG, UNFIXED3, UNFIXED4, NULL); |
| NEW_LISTS_UNFIXED (GST_TAG_MERGE_REPLACE); |
| check_tags (merge, UTAG, UNFIXED3, UNFIXED4, NULL); |
| NEW_LISTS_UNFIXED (GST_TAG_MERGE_PREPEND); |
| check_tags (merge, UTAG, UNFIXED3, UNFIXED4, UNFIXED1, UNFIXED2, NULL); |
| NEW_LISTS_UNFIXED (GST_TAG_MERGE_APPEND); |
| check_tags (merge, UTAG, UNFIXED1, UNFIXED2, UNFIXED3, UNFIXED4, NULL); |
| NEW_LISTS_UNFIXED (GST_TAG_MERGE_KEEP); |
| check_tags (merge, UTAG, UNFIXED1, UNFIXED2, NULL); |
| NEW_LISTS_UNFIXED (GST_TAG_MERGE_KEEP_ALL); |
| check_tags (merge, UTAG, UNFIXED1, UNFIXED2, NULL); |
| |
| /* fixed */ |
| GST_DEBUG ("fixed"); |
| NEW_LISTS_FIXED (GST_TAG_MERGE_REPLACE_ALL); |
| check_tags (merge, FTAG, FIXED3, NULL); |
| NEW_LISTS_FIXED (GST_TAG_MERGE_REPLACE); |
| check_tags (merge, FTAG, FIXED3, NULL); |
| NEW_LISTS_FIXED (GST_TAG_MERGE_PREPEND); |
| check_tags (merge, FTAG, FIXED3, NULL); |
| NEW_LISTS_FIXED (GST_TAG_MERGE_APPEND); |
| check_tags (merge, FTAG, FIXED1, NULL); |
| NEW_LISTS_FIXED (GST_TAG_MERGE_KEEP); |
| check_tags (merge, FTAG, FIXED1, NULL); |
| NEW_LISTS_FIXED (GST_TAG_MERGE_KEEP_ALL); |
| check_tags (merge, FTAG, FIXED1, NULL); |
| |
| /* first list empty */ |
| GST_DEBUG ("first empty"); |
| NEW_LISTS_EMPTY1 (GST_TAG_MERGE_REPLACE_ALL); |
| check_tags (merge, FTAG, FIXED3, NULL); |
| NEW_LISTS_EMPTY1 (GST_TAG_MERGE_REPLACE); |
| check_tags (merge, FTAG, FIXED3, NULL); |
| NEW_LISTS_EMPTY1 (GST_TAG_MERGE_PREPEND); |
| check_tags (merge, FTAG, FIXED3, NULL); |
| NEW_LISTS_EMPTY1 (GST_TAG_MERGE_APPEND); |
| check_tags (merge, FTAG, FIXED3, NULL); |
| NEW_LISTS_EMPTY1 (GST_TAG_MERGE_KEEP); |
| check_tags (merge, FTAG, FIXED3, NULL); |
| NEW_LISTS_EMPTY1 (GST_TAG_MERGE_KEEP_ALL); |
| check_tags_empty (merge); |
| |
| /* second list empty */ |
| GST_DEBUG ("second empty"); |
| NEW_LISTS_EMPTY2 (GST_TAG_MERGE_REPLACE_ALL); |
| check_tags_empty (merge); |
| NEW_LISTS_EMPTY2 (GST_TAG_MERGE_REPLACE); |
| check_tags (merge, FTAG, FIXED1, NULL); |
| NEW_LISTS_EMPTY2 (GST_TAG_MERGE_PREPEND); |
| check_tags (merge, FTAG, FIXED1, NULL); |
| NEW_LISTS_EMPTY2 (GST_TAG_MERGE_APPEND); |
| check_tags (merge, FTAG, FIXED1, NULL); |
| NEW_LISTS_EMPTY2 (GST_TAG_MERGE_KEEP); |
| check_tags (merge, FTAG, FIXED1, NULL); |
| NEW_LISTS_EMPTY2 (GST_TAG_MERGE_KEEP_ALL); |
| check_tags (merge, FTAG, FIXED1, NULL); |
| |
| /* clean up */ |
| if (list) |
| gst_tag_list_unref (list); |
| if (list2) |
| gst_tag_list_unref (list2); |
| if (merge) |
| gst_tag_list_unref (merge); |
| } |
| |
| GST_END_TEST |
| GST_START_TEST (test_date_tags) |
| { |
| GstTagList *tag_list, *tag_list2; |
| GDate *date, *date2; |
| gchar *str; |
| |
| date = g_date_new_dmy (14, 10, 2005); |
| tag_list = gst_tag_list_new_empty (); |
| gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, GST_TAG_DATE, date, NULL); |
| |
| str = gst_tag_list_to_string (tag_list); |
| fail_if (str == NULL); |
| fail_if (strstr (str, "2005-10-14") == NULL); |
| |
| tag_list2 = gst_tag_list_new_from_string (str); |
| fail_if (tag_list2 == NULL); |
| fail_if (!gst_tag_list_get_date (tag_list2, GST_TAG_DATE, &date2)); |
| fail_unless (gst_tag_list_is_equal (tag_list2, tag_list)); |
| gst_tag_list_unref (tag_list2); |
| g_free (str); |
| |
| fail_if (g_date_compare (date, date2) != 0); |
| fail_if (g_date_get_day (date) != 14); |
| fail_if (g_date_get_month (date) != 10); |
| fail_if (g_date_get_year (date) != 2005); |
| fail_if (g_date_get_day (date2) != 14); |
| fail_if (g_date_get_month (date2) != 10); |
| fail_if (g_date_get_year (date2) != 2005); |
| g_date_free (date2); |
| |
| gst_tag_list_unref (tag_list); |
| g_date_free (date); |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (test_type) |
| { |
| GstTagList *taglist; |
| |
| taglist = gst_tag_list_new_empty (); |
| fail_unless (GST_IS_TAG_LIST (taglist)); |
| gst_tag_list_unref (taglist); |
| |
| /* this should be fine */ |
| fail_if (GST_IS_TAG_LIST (NULL)); |
| |
| /* check gst_tag_list_is_empty */ |
| ASSERT_CRITICAL (gst_tag_list_is_empty (NULL)); |
| taglist = gst_tag_list_new_empty (); |
| fail_unless (gst_tag_list_is_empty (taglist)); |
| gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "JD", NULL); |
| fail_if (gst_tag_list_is_empty (taglist)); |
| gst_tag_list_unref (taglist); |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (test_set_non_utf8_string) |
| { |
| GstTagList *taglist; |
| guint8 foobar[2] = { 0xff, 0x00 }; /* not UTF-8 */ |
| |
| taglist = gst_tag_list_new_empty (); |
| fail_unless (taglist != NULL); |
| |
| ASSERT_WARNING (gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, |
| GST_TAG_ARTIST, (gchar *) foobar, NULL)); |
| |
| /* That string field with a non-UTF8 string should not have been added */ |
| fail_unless (gst_tag_list_is_empty (taglist)); |
| |
| gst_tag_list_unref (taglist); |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (test_buffer_tags) |
| { |
| GstTagList *tags; |
| GstBuffer *buf1, *buf2; |
| GstSample *s1, *s2; |
| |
| tags = gst_tag_list_new_empty (); |
| |
| buf1 = gst_buffer_new_and_alloc (222); |
| s1 = gst_sample_new (buf1, NULL, NULL, NULL); |
| gst_buffer_unref (buf1); |
| |
| buf2 = gst_buffer_new_and_alloc (100); |
| s2 = gst_sample_new (buf2, NULL, NULL, NULL); |
| gst_buffer_unref (buf2); |
| |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, s1, |
| GST_TAG_PREVIEW_IMAGE, s2, NULL); |
| |
| gst_sample_unref (s1); |
| gst_sample_unref (s2); |
| s1 = s2 = NULL; |
| |
| fail_if (!gst_tag_list_get_sample (tags, GST_TAG_IMAGE, &s1)); |
| fail_unless (gst_sample_get_buffer (s1) == buf1); |
| gst_sample_unref (s1); |
| |
| fail_if (!gst_tag_list_get_sample (tags, GST_TAG_PREVIEW_IMAGE, &s2)); |
| fail_unless (gst_sample_get_buffer (s2) == buf2); |
| gst_sample_unref (s2); |
| |
| fail_if (gst_tag_list_get_sample_index (tags, GST_TAG_IMAGE, 1, &s1)); |
| fail_if (gst_tag_list_get_sample_index (tags, GST_TAG_IMAGE, 2, &s1)); |
| fail_if (gst_tag_list_get_sample_index (tags, GST_TAG_PREVIEW_IMAGE, 1, &s1)); |
| fail_if (gst_tag_list_get_sample_index (tags, GST_TAG_PREVIEW_IMAGE, 2, &s1)); |
| |
| fail_if (!gst_tag_list_get_sample_index (tags, GST_TAG_IMAGE, 0, &s1)); |
| fail_if (!gst_tag_list_get_sample_index (tags, GST_TAG_PREVIEW_IMAGE, 0, |
| &s2)); |
| buf1 = gst_sample_get_buffer (s1); |
| fail_unless_equals_int (gst_buffer_get_size (buf1), 222); |
| buf2 = gst_sample_get_buffer (s2); |
| fail_unless_equals_int (gst_buffer_get_size (buf2), 100); |
| |
| gst_sample_unref (s1); |
| gst_sample_unref (s2); |
| |
| gst_tag_list_unref (tags); |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (test_empty_tags) |
| { |
| GstTagList *tags; |
| |
| /* only get g_warnings() with git */ |
| if (GST_VERSION_NANO != 1) |
| return; |
| |
| tags = gst_tag_list_new_empty (); |
| ASSERT_WARNING (gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, |
| GST_TAG_ARTIST, NULL, NULL)); |
| ASSERT_WARNING (gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, |
| GST_TAG_ARTIST, "", NULL)); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "xyz", NULL); |
| gst_tag_list_unref (tags); |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (test_new_full) |
| { |
| GstTagList *tags; |
| gchar *artist, *title; |
| gdouble track_gain; |
| guint track_num; |
| |
| tags = gst_tag_list_new (GST_TAG_ARTIST, "Arty Ist", |
| GST_TAG_TRACK_NUMBER, 9, GST_TAG_TRACK_GAIN, 4.242, GST_TAG_TITLE, |
| "Title!", NULL); |
| |
| fail_unless (gst_tag_list_get_string (tags, GST_TAG_ARTIST, &artist)); |
| fail_unless_equals_string (artist, "Arty Ist"); |
| fail_unless (gst_tag_list_get_string (tags, GST_TAG_TITLE, &title)); |
| fail_unless_equals_string (title, "Title!"); |
| fail_unless (gst_tag_list_get_uint (tags, GST_TAG_TRACK_NUMBER, &track_num)); |
| fail_unless_equals_int (track_num, 9); |
| fail_unless (gst_tag_list_get_double (tags, GST_TAG_TRACK_GAIN, &track_gain)); |
| fail_unless_equals_float (track_gain, 4.242); |
| fail_unless (tags != NULL); |
| |
| gst_tag_list_unref (tags); |
| g_free (artist); |
| g_free (title); |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (test_merge_strings_with_comma) |
| { |
| GstTagList *tags; |
| gchar *artists = NULL; |
| |
| tags = gst_tag_list_new_empty (); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Foo", NULL); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Bar", NULL); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Yay", NULL); |
| gst_tag_list_get_string (tags, GST_TAG_ARTIST, &artists); |
| fail_unless (artists != NULL); |
| /* can't check for exact string since the comma separator is i18n-ed */ |
| fail_unless (strstr (artists, "Foo") != NULL); |
| fail_unless (strstr (artists, "Bar") != NULL); |
| fail_unless (strstr (artists, "Yay") != NULL); |
| g_free (artists); |
| gst_tag_list_unref (tags); |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (test_equal) |
| { |
| GstTagList *tags, *tags2; |
| GstSample *sample1, *sample2, *sample11; |
| GstBuffer *buf; |
| |
| tags = gst_tag_list_new_empty (); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Foo", NULL); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Bar", NULL); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Yay", NULL); |
| |
| tags2 = gst_tag_list_new_empty (); |
| fail_unless (!gst_tag_list_is_equal (tags2, tags)); |
| gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Yay", NULL); |
| fail_unless (!gst_tag_list_is_equal (tags2, tags)); |
| gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Bar", NULL); |
| fail_unless (!gst_tag_list_is_equal (tags2, tags)); |
| gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Foo", NULL); |
| fail_unless (gst_tag_list_is_equal (tags2, tags)); |
| |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_REFERENCE_LEVEL, |
| 9.87654321, NULL); |
| fail_unless (!gst_tag_list_is_equal (tags2, tags)); |
| gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_REFERENCE_LEVEL, |
| 9.87654320, NULL); |
| /* want these two double values to be equal despite minor differences */ |
| fail_unless (gst_tag_list_is_equal (tags2, tags)); |
| |
| /* want this to be unequal though, difference too large */ |
| gst_tag_list_add (tags2, GST_TAG_MERGE_REPLACE, GST_TAG_REFERENCE_LEVEL, |
| 9.87654310, NULL); |
| fail_unless (!gst_tag_list_is_equal (tags2, tags)); |
| |
| gst_tag_list_unref (tags); |
| gst_tag_list_unref (tags2); |
| |
| /* samples */ |
| buf = gst_buffer_new_wrapped (g_strdup ("test 1-2-3"), 10); |
| sample1 = gst_sample_new (buf, NULL, NULL, NULL); |
| gst_buffer_unref (buf); |
| |
| buf = gst_buffer_new_wrapped (g_strdup ("test 1-2-3"), 10); |
| sample11 = gst_sample_new (buf, NULL, NULL, NULL); |
| gst_buffer_unref (buf); |
| |
| buf = gst_buffer_new_wrapped (g_strdup ("test 2-3-4-5"), 12); |
| sample2 = gst_sample_new (buf, NULL, NULL, NULL); |
| gst_buffer_unref (buf); |
| |
| tags = gst_tag_list_new_empty (); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, sample1, NULL); |
| |
| tags2 = gst_tag_list_new_empty (); |
| fail_unless (!gst_tag_list_is_equal (tags2, tags)); |
| |
| /* sample sample, should be very equal now */ |
| gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, sample1, NULL); |
| fail_unless (gst_tag_list_is_equal (tags2, tags)); |
| gst_tag_list_unref (tags2); |
| |
| /* same buffer content, but different buffer instances, still rather equal */ |
| tags2 = gst_tag_list_new_empty (); |
| gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, sample11, NULL); |
| fail_unless (gst_tag_list_is_equal (tags2, tags)); |
| gst_tag_list_unref (tags2); |
| |
| /* different buffer content, should not be equal */ |
| tags2 = gst_tag_list_new_empty (); |
| gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, sample2, NULL); |
| fail_unless (!gst_tag_list_is_equal (tags2, tags)); |
| gst_tag_list_unref (tags2); |
| |
| gst_tag_list_unref (tags); |
| |
| gst_sample_unref (sample1); |
| gst_sample_unref (sample11); |
| gst_sample_unref (sample2); |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (test_writability) |
| { |
| GstTagList *tags, *wtags; |
| |
| tags = gst_tag_list_new_empty (); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Foo", NULL); |
| |
| /* take ref, should no longer be writable */ |
| gst_tag_list_ref (tags); |
| ASSERT_CRITICAL (gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, |
| GST_TAG_ARTIST, "Bar", NULL)); |
| |
| wtags = gst_tag_list_make_writable (tags); |
| /* should be ok now */ |
| gst_tag_list_add (wtags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Bar", NULL); |
| gst_tag_list_unref (wtags); |
| |
| /* this too, since we dropped the second ref in make_writable */ |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Bar", NULL); |
| gst_tag_list_unref (tags); |
| } |
| |
| GST_END_TEST; |
| |
| /* this tests GstSample serialisation/deserialisation, esp. with multiple |
| * samples in a tag list */ |
| GST_START_TEST (test_serialization) |
| { |
| GstTagList *tags, *tags2; |
| GstBuffer *b1, *b2; |
| GstSample *s1, *s2; |
| GstCaps *c2; |
| gchar *s; |
| |
| b1 = gst_buffer_new_allocate (NULL, 1, NULL); |
| gst_buffer_memset (b1, 0, 0xb3, -1); |
| s1 = gst_sample_new (b1, NULL, NULL, NULL); |
| gst_buffer_unref (b1); |
| |
| b2 = gst_buffer_new_allocate (NULL, 8, NULL); |
| gst_buffer_memset (b2, 0, 0x2f, -1); |
| c2 = gst_caps_new_empty_simple ("foo/bar"); |
| s2 = gst_sample_new (b2, c2, NULL, NULL); |
| gst_buffer_unref (b2); |
| gst_caps_unref (c2); |
| c2 = NULL; |
| |
| tags = gst_tag_list_new (GST_TAG_ATTACHMENT, s1, NULL); |
| gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ATTACHMENT, s2, NULL); |
| GST_INFO ("tags: %" GST_PTR_FORMAT, tags); |
| |
| s = gst_tag_list_to_string (tags); |
| GST_INFO ("taglist -> string: %s", s); |
| tags2 = gst_tag_list_new_from_string (s); |
| GST_INFO ("string -> taglist: %" GST_PTR_FORMAT, tags2); |
| fail_unless (gst_tag_list_is_equal (tags, tags2)); |
| gst_tag_list_unref (tags2); |
| g_free (s); |
| |
| gst_sample_unref (s1); |
| gst_sample_unref (s2); |
| gst_tag_list_unref (tags); |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (test_empty_taglist_serialization) |
| { |
| GstTagList *taglist, *taglist2; |
| gchar *str; |
| |
| taglist = gst_tag_list_new_empty (); |
| str = gst_tag_list_to_string (taglist); |
| taglist2 = gst_tag_list_new_from_string (str); |
| fail_if (taglist2 == NULL); |
| fail_unless (gst_tag_list_is_equal (taglist, taglist2)); |
| |
| gst_tag_list_unref (taglist); |
| gst_tag_list_unref (taglist2); |
| g_free (str); |
| } |
| |
| GST_END_TEST; |
| |
| |
| static Suite * |
| gst_tag_suite (void) |
| { |
| Suite *s = suite_create ("GstTag"); |
| TCase *tc_chain = tcase_create ("general"); |
| |
| suite_add_tcase (s, tc_chain); |
| tcase_add_test (tc_chain, test_basics); |
| tcase_add_test (tc_chain, test_add); |
| tcase_add_test (tc_chain, test_merge); |
| tcase_add_test (tc_chain, test_merge_strings_with_comma); |
| tcase_add_test (tc_chain, test_date_tags); |
| tcase_add_test (tc_chain, test_type); |
| tcase_add_test (tc_chain, test_set_non_utf8_string); |
| tcase_add_test (tc_chain, test_buffer_tags); |
| tcase_add_test (tc_chain, test_empty_tags); |
| tcase_add_test (tc_chain, test_new_full); |
| tcase_add_test (tc_chain, test_equal); |
| tcase_add_test (tc_chain, test_writability); |
| tcase_add_test (tc_chain, test_serialization); |
| tcase_add_test (tc_chain, test_empty_taglist_serialization); |
| |
| return s; |
| } |
| |
| GST_CHECK_MAIN (gst_tag); |