mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-08 04:41:31 +00:00
taglist: Avoid combinatorial explosion when merging tags
When appending/prepending tags, avoid re-creating (and copying) lists if we already have one and instead just append/prepend the GValue to the list. https://bugzilla.gnome.org/show_bug.cgi?id=702545
This commit is contained in:
parent
2f8e572887
commit
0d57bd3198
1 changed files with 12 additions and 4 deletions
|
@ -1031,12 +1031,20 @@ gst_tag_list_add_value_internal (GstTagList * tag_list, GstTagMergeMode mode,
|
|||
gst_structure_id_set_value (list, tag_quark, value);
|
||||
break;
|
||||
case GST_TAG_MERGE_PREPEND:
|
||||
gst_value_list_merge (&dest, value, value2);
|
||||
gst_structure_id_take_value (list, tag_quark, &dest);
|
||||
if (GST_VALUE_HOLDS_LIST (value2) && !GST_VALUE_HOLDS_LIST (value))
|
||||
gst_value_list_prepend_value ((GValue *) value2, value);
|
||||
else {
|
||||
gst_value_list_merge (&dest, value, value2);
|
||||
gst_structure_id_take_value (list, tag_quark, &dest);
|
||||
}
|
||||
break;
|
||||
case GST_TAG_MERGE_APPEND:
|
||||
gst_value_list_merge (&dest, value2, value);
|
||||
gst_structure_id_take_value (list, tag_quark, &dest);
|
||||
if (GST_VALUE_HOLDS_LIST (value2) && !GST_VALUE_HOLDS_LIST (value))
|
||||
gst_value_list_append_value ((GValue *) value2, value);
|
||||
else {
|
||||
gst_value_list_merge (&dest, value2, value);
|
||||
gst_structure_id_take_value (list, tag_quark, &dest);
|
||||
}
|
||||
break;
|
||||
case GST_TAG_MERGE_KEEP:
|
||||
case GST_TAG_MERGE_KEEP_ALL:
|
||||
|
|
Loading…
Reference in a new issue