From 39b932042bfbff91006675a8366afe7789c985a1 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 6 Feb 2014 13:42:30 +0100 Subject: demux_lavf: clear metadata on update, instead of merging it Assume a metadata update is a full update. Clear the previous metadata, so that tags which existed only in the previous metadata are removed. --- demux/demux.c | 6 ++++++ demux/demux.h | 1 + demux/demux_lavf.c | 1 + 3 files changed, 8 insertions(+) (limited to 'demux') diff --git a/demux/demux.c b/demux/demux.c index ceaa9db79c..63a1c16690 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -713,6 +713,12 @@ char *mp_tags_get_bstr(struct mp_tags *tags, bstr key) return NULL; } +void mp_tags_clear(struct mp_tags *tags) +{ + *tags = (struct mp_tags){0}; + talloc_free_children(tags); +} + int demux_info_add(demuxer_t *demuxer, const char *opt, const char *param) { return demux_info_add_bstr(demuxer, bstr0(opt), bstr0(param)); diff --git a/demux/demux.h b/demux/demux.h index 2c8211e246..928a5e7d3e 100644 --- a/demux/demux.h +++ b/demux/demux.h @@ -304,6 +304,7 @@ void mp_tags_set_str(struct mp_tags *tags, const char *key, const char *value); void mp_tags_set_bstr(struct mp_tags *tags, bstr key, bstr value); char *mp_tags_get_str(struct mp_tags *tags, const char *key); char *mp_tags_get_bstr(struct mp_tags *tags, bstr key); +void mp_tags_clear(struct mp_tags *tags); bool demux_matroska_uid_cmp(struct matroska_segment_uid *a, struct matroska_segment_uid *b); diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index c92e4850b2..ee78575de6 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -528,6 +528,7 @@ static void update_metadata(demuxer_t *demuxer, AVPacket *pkt) AVDictionary *dict = NULL; av_packet_unpack_dictionary(md, md_size, &dict); if (dict) { + mp_tags_clear(demuxer->metadata); add_metadata(demuxer, dict); av_dict_free(&dict); } -- cgit v1.2.3