summaryrefslogtreecommitdiffstats
path: root/demux/demux.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux.c')
-rw-r--r--demux/demux.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 92a68d260e..b13225e642 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -651,31 +651,22 @@ char *demux_info_get(demuxer_t *demuxer, const char *opt)
bool demux_info_update(struct demuxer *demuxer)
{
- struct mp_tags *tags = demuxer->metadata;
+ bool r = false;
// Take care of stream metadata as well
- char **meta;
- if (stream_control(demuxer->stream, STREAM_CTRL_GET_METADATA, &meta) > 0) {
- for (int n = 0; meta[n + 0]; n += 2)
- mp_tags_set_str(tags, meta[n + 0], meta[n + 1]);
- talloc_free(meta);
+ struct mp_tags *s_meta = NULL;
+ if (stream_control(demuxer->stream, STREAM_CTRL_GET_METADATA, &s_meta) > 0) {
+ talloc_free(demuxer->stream_metadata);
+ demuxer->stream_metadata = talloc_steal(demuxer, s_meta);
+ demuxer->events |= DEMUX_EVENT_METADATA;
}
- // Check for metadata changes the hard way.
- char *data = talloc_strdup(demuxer, "");
- for (int n = 0; n < tags->num_keys; n++) {
- data = talloc_asprintf_append_buffer(data, "%s=%s\n", tags->keys[n],
- tags->values[n]);
- }
- if (!demuxer->previous_metadata ||
- strcmp(demuxer->previous_metadata, data) != 0)
- {
- talloc_free(demuxer->previous_metadata);
- demuxer->previous_metadata = data;
+ if (demuxer->events & DEMUX_EVENT_METADATA) {
+ demuxer->events &= ~DEMUX_EVENT_METADATA;
+ if (demuxer->stream_metadata)
+ mp_tags_merge(demuxer->metadata, demuxer->stream_metadata);
demux_info_print(demuxer);
- return true;
- } else {
- talloc_free(data);
- return false;
+ r = true;
}
+ return r;
}
int demux_control(demuxer_t *demuxer, int cmd, void *arg)