summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gst/selector/gstinputselector.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/gst/selector/gstinputselector.c b/gst/selector/gstinputselector.c
index ec1ae542..7a458b0f 100644
--- a/gst/selector/gstinputselector.c
+++ b/gst/selector/gstinputselector.c
@@ -402,16 +402,18 @@ gst_selector_pad_event (GstPad * pad, GstEvent * event)
}
case GST_EVENT_TAG:
{
- GstTagList *tags;
+ GstTagList *tags, *oldtags, *newtags;
- GST_OBJECT_LOCK (selpad);
- if (selpad->tags)
- gst_tag_list_free (selpad->tags);
gst_event_parse_tag (event, &tags);
- if (tags)
- tags = gst_tag_list_copy (tags);
- selpad->tags = tags;
- GST_DEBUG_OBJECT (pad, "received tags %" GST_PTR_FORMAT, selpad->tags);
+
+ GST_OBJECT_LOCK (selpad);
+ oldtags = selpad->tags;
+
+ newtags = gst_tag_list_merge (oldtags, tags, GST_TAG_MERGE_REPLACE);
+ selpad->tags = newtags;
+ if (oldtags)
+ gst_tag_list_free (oldtags);
+ GST_DEBUG_OBJECT (pad, "received tags %" GST_PTR_FORMAT, newtags);
GST_OBJECT_UNLOCK (selpad);
break;
}