summaryrefslogtreecommitdiffstats
path: root/ext/taglib
diff options
context:
space:
mode:
authorJames Doc Livingston <doclivingston@gmail.com>2006-05-18 12:46:08 +0000
committerTim-Philipp Müller <tim@centricular.net>2006-05-18 12:46:08 +0000
commitcb3848d2452a483d9e633faade6f52d4a9815b70 (patch)
tree06686c8f777b67521109645aba9f87618d21c5b3 /ext/taglib
parent5ab4a7dd42a3229850cb251e8e2c5bd37204e5d4 (diff)
ext/taglib/gsttaglibmux.c: Merge event tags and tag setter tags correctly (#339918). Also, don't leak taglist in case...
Original commit message from CVS: Patch by: James "Doc" Livingston <doclivingston gmail com> * ext/taglib/gsttaglibmux.c: (gst_tag_lib_mux_render_tag): Merge event tags and tag setter tags correctly (#339918). Also, don't leak taglist in case of an error.
Diffstat (limited to 'ext/taglib')
-rw-r--r--ext/taglib/gsttaglibmux.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/ext/taglib/gsttaglibmux.c b/ext/taglib/gsttaglibmux.c
index 5224e6c1..f3321d32 100644
--- a/ext/taglib/gsttaglibmux.c
+++ b/ext/taglib/gsttaglibmux.c
@@ -134,28 +134,23 @@ static GstBuffer *
gst_tag_lib_mux_render_tag (GstTagLibMux * mux)
{
GstTagLibMuxClass *klass;
+ GstTagMergeMode merge_mode;
+ GstTagSetter *tagsetter;
GstBuffer *buffer;
- GstTagSetter *tagsetter = GST_TAG_SETTER (mux);
const GstTagList *tagsetter_tags;
GstTagList *taglist;
GstEvent *event;
- if (mux->event_tags != NULL) {
- taglist = gst_tag_list_copy (mux->event_tags);
- } else {
- taglist = gst_tag_list_new ();
- }
+ tagsetter = GST_TAG_SETTER (mux);
tagsetter_tags = gst_tag_setter_get_tag_list (tagsetter);
- if (tagsetter_tags) {
- GstTagMergeMode merge_mode;
-
- merge_mode = gst_tag_setter_get_tag_merge_mode (tagsetter);
- GST_LOG_OBJECT (mux, "merging tags, merge mode = %d", merge_mode);
- GST_LOG_OBJECT (mux, "event tags: %" GST_PTR_FORMAT, taglist);
- GST_LOG_OBJECT (mux, "set tags: %" GST_PTR_FORMAT, tagsetter_tags);
- gst_tag_list_insert (taglist, tagsetter_tags, merge_mode);
- }
+ merge_mode = gst_tag_setter_get_tag_merge_mode (tagsetter);
+
+ GST_LOG_OBJECT (mux, "merging tags, merge mode = %d", merge_mode);
+ GST_LOG_OBJECT (mux, "event tags: %" GST_PTR_FORMAT, mux->event_tags);
+ GST_LOG_OBJECT (mux, "set tags: %" GST_PTR_FORMAT, tagsetter_tags);
+
+ taglist = gst_tag_list_merge (tagsetter_tags, mux->event_tags, merge_mode);
GST_LOG_OBJECT (mux, "final tags: %" GST_PTR_FORMAT, taglist);
@@ -189,12 +184,14 @@ gst_tag_lib_mux_render_tag (GstTagLibMux * mux)
no_vfunc:
{
GST_ERROR_OBJECT (mux, "Subclass does not implement render_tag vfunc!");
+ gst_tag_list_free (taglist);
return NULL;
}
render_error:
{
GST_ERROR_OBJECT (mux, "Failed to render tag");
+ gst_tag_list_free (taglist);
return NULL;
}
}