mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
gst/gsttagsetter.c: Merging an empty list with another list in KEEP_ALL mode should yield an empty list as result and...
Original commit message from CVS: 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.
This commit is contained in:
parent
7323fccbcc
commit
9530644a17
3 changed files with 120 additions and 2 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2008-04-13 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
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>
|
2008-04-13 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
Patch by: Rene Stadler <mail at renestadler de>
|
Patch by: Rene Stadler <mail at renestadler de>
|
||||||
|
|
|
@ -173,8 +173,9 @@ gst_tag_setter_merge_tags (GstTagSetter * setter, const GstTagList * list,
|
||||||
g_return_if_fail (GST_IS_TAG_LIST (list));
|
g_return_if_fail (GST_IS_TAG_LIST (list));
|
||||||
|
|
||||||
data = gst_tag_setter_get_data (setter);
|
data = gst_tag_setter_get_data (setter);
|
||||||
if (!data->list) {
|
if (data->list == NULL) {
|
||||||
data->list = gst_tag_list_copy (list);
|
if (mode != GST_TAG_MERGE_KEEP_ALL)
|
||||||
|
data->list = gst_tag_list_copy (list);
|
||||||
} else {
|
} else {
|
||||||
gst_tag_list_insert (data->list, list, mode);
|
gst_tag_list_insert (data->list, list, mode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,11 +70,26 @@ tag_setter_list_length (GstTagSetter * setter)
|
||||||
{
|
{
|
||||||
guint len = 0;
|
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),
|
gst_tag_list_foreach (gst_tag_setter_get_tag_list (setter),
|
||||||
(GstTagForeachFunc) tag_list_foreach, &len);
|
(GstTagForeachFunc) tag_list_foreach, &len);
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static guint
|
||||||
|
tag_list_length (const GstTagList * tag_list)
|
||||||
|
{
|
||||||
|
guint len = 0;
|
||||||
|
|
||||||
|
if (tag_list == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
gst_tag_list_foreach (tag_list, (GstTagForeachFunc) tag_list_foreach, &len);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
#define assert_tag_setter_list_length(setter,len) \
|
#define assert_tag_setter_list_length(setter,len) \
|
||||||
fail_unless_equals_int (tag_setter_list_length(setter), len);
|
fail_unless_equals_int (tag_setter_list_length(setter), len);
|
||||||
|
|
||||||
|
@ -117,6 +132,95 @@ GST_START_TEST (test_merge)
|
||||||
g_object_unref (enc);
|
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_END_TEST
|
||||||
|
GST_START_TEST (test_merge_modes_skip_empty)
|
||||||
|
{
|
||||||
|
GstTagMergeMode mode;
|
||||||
|
|
||||||
|
for (mode = GST_TAG_MERGE_REPLACE_ALL; mode < GST_TAG_MERGE_COUNT; mode++) {
|
||||||
|
gint i;
|
||||||
|
|
||||||
|
for (i = 0; i < 2; 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 ();
|
||||||
|
|
||||||
|
if (i == 1) {
|
||||||
|
gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST,
|
||||||
|
"artist2", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
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_END_TEST static Suite *
|
GST_END_TEST static Suite *
|
||||||
gst_tag_setter_suite (void)
|
gst_tag_setter_suite (void)
|
||||||
{
|
{
|
||||||
|
@ -125,6 +229,8 @@ gst_tag_setter_suite (void)
|
||||||
|
|
||||||
suite_add_tcase (s, tc_chain);
|
suite_add_tcase (s, tc_chain);
|
||||||
tcase_add_test (tc_chain, test_merge);
|
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;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue