summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-02-06 13:42:30 +0100
committerwm4 <wm4@nowhere>2014-02-06 13:42:30 +0100
commit39b932042bfbff91006675a8366afe7789c985a1 (patch)
tree7d750abbcbd7cc8bc5bec91eb288d89f76778d28 /demux
parenteb1ec14b67462c6a1420e2fa67b8213cad83b297 (diff)
downloadmpv-39b932042bfbff91006675a8366afe7789c985a1.tar.bz2
mpv-39b932042bfbff91006675a8366afe7789c985a1.tar.xz
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.
Diffstat (limited to 'demux')
-rw-r--r--demux/demux.c6
-rw-r--r--demux/demux.h1
-rw-r--r--demux/demux_lavf.c1
3 files changed, 8 insertions, 0 deletions
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);
}