From: <tp...@ke...> - 2008-04-13 19:58:52
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: tpm Date: Sun Apr 13 2008 19:58:58 UTC Log message: Patch by: Rene Stadler <mail at renestadler de> * gst/gsttagsetter.c: (gst_tag_setter_merge_tags): Merging an empty list with another list in KEEP_ALL mode should yield an empty list as result and not the second list (#512578). * tests/check/gst/gsttagsetter.c: Add unit test for tag merge modes and the aforementioned bug. Modified files: . : ChangeLog gst : gsttagsetter.c tests/check/gst : gsttagsetter.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.3772&r2=1.3773 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gsttagsetter.c.diff?r1=1.23&r2=1.24 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/tests/check/gst/gsttagsetter.c.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.3772 retrieving revision 1.3773 diff -u -d -r1.3772 -r1.3773 --- ChangeLog 13 Apr 2008 18:50:03 -0000 1.3772 +++ ChangeLog 13 Apr 2008 19:58:41 -0000 1.3773 @@ -2,6 +2,17 @@ Patch by: Rene Stadler <mail at renestadler de> + * gst/gsttagsetter.c: (gst_tag_setter_merge_tags): + Merging an empty list with another list in KEEP_ALL mode should + yield an empty list as result and not the second list (#512578). + + * tests/check/gst/gsttagsetter.c: + Add unit test for tag merge modes and the aforementioned bug. +2008-04-13 Tim-Philipp Müller <tim at centricular dot net> + Patch by: Rene Stadler <mail at renestadler de> * gst/gsttaglist.h: Fix description to match the order in the table (#512577). Index: gsttagsetter.c RCS file: /cvs/gstreamer/gstreamer/gst/gsttagsetter.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- gsttagsetter.c 18 Jan 2007 12:00:23 -0000 1.23 +++ gsttagsetter.c 13 Apr 2008 19:58:43 -0000 1.24 @@ -173,8 +173,9 @@ g_return_if_fail (GST_IS_TAG_LIST (list)); data = gst_tag_setter_get_data (setter); - if (!data->list) { - data->list = gst_tag_list_copy (list); + if (data->list == NULL) { + if (mode != GST_TAG_MERGE_KEEP_ALL) + data->list = gst_tag_list_copy (list); } else { gst_tag_list_insert (data->list, list, mode); } RCS file: /cvs/gstreamer/gstreamer/tests/check/gst/gsttagsetter.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gsttagsetter.c 12 Jan 2007 10:53:54 -0000 1.1 +++ gsttagsetter.c 13 Apr 2008 19:58:43 -0000 1.2 @@ -70,11 +70,26 @@ { guint len = 0; + if (gst_tag_setter_get_tag_list (setter) == NULL) + return 0; gst_tag_list_foreach (gst_tag_setter_get_tag_list (setter), (GstTagForeachFunc) tag_list_foreach, &len); return len; } +static guint +tag_list_length (const GstTagList * tag_list) +{ + guint len = 0; + if (tag_list == NULL) + gst_tag_list_foreach (tag_list, (GstTagForeachFunc) tag_list_foreach, &len); + return len; +} #define assert_tag_setter_list_length(setter,len) \ fail_unless_equals_int (tag_setter_list_length(setter), len); @@ -117,6 +132,95 @@ g_object_unref (enc); +GST_END_TEST +GST_START_TEST (test_merge_modes) + GstTagMergeMode mode; + for (mode = GST_TAG_MERGE_REPLACE_ALL; mode < GST_TAG_MERGE_COUNT; mode++) { + gint i; + for (i = 0; i < 4; i++) { + GstElement *enc; + GstTagSetter *setter; + GstTagList *list1, *list2, *merged; + enc = g_object_new (GST_TYPE_DUMMY_ENC, NULL); + fail_unless (enc != NULL); + setter = GST_TAG_SETTER (enc); + list1 = gst_tag_list_new (); + list2 = gst_tag_list_new (); + /* i = 0: - - + * i = 1: list1 - + * i = 2: - list2 + * i = 3: list1 list2 */ + if (i % 2 == 1) { + gst_tag_list_add (list1, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, + "artist1", NULL); + } + if (i > 1) { + gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, + "artist2", NULL); + gst_tag_setter_merge_tags (setter, list1, GST_TAG_MERGE_APPEND); + gst_tag_setter_merge_tags (setter, list2, mode); + merged = gst_tag_list_merge (list1, list2, mode); + fail_unless_equals_int (tag_list_length (gst_tag_setter_get_tag_list + (setter)), tag_list_length (merged)); + gst_tag_list_free (list1); + gst_tag_list_free (list2); + gst_tag_list_free (merged); + gst_object_unref (enc); + } + } +GST_START_TEST (test_merge_modes_skip_empty) + for (i = 0; i < 2; i++) { + if (i == 1) { GST_END_TEST static Suite * gst_tag_setter_suite (void) @@ -125,6 +229,8 @@ suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_merge); + tcase_add_test (tc_chain, test_merge_modes); + tcase_add_test (tc_chain, test_merge_modes_skip_empty); return s; |