diff options
author | Claude Heiland-Allen <claude@mathr.co.uk> | 2023-10-11 12:03:26 +0100 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2023-10-18 16:52:47 +0200 |
commit | 46842da8d515e7a176896354395c12c675a25084 (patch) | |
tree | 948f6c692082fe55a0d6843a7f9668de3233bc07 /demux | |
parent | a6d1c9dd0fb912891abc1aa10d35f928188641d4 (diff) | |
download | mpv-46842da8d515e7a176896354395c12c675a25084.tar.bz2 mpv-46842da8d515e7a176896354395c12c675a25084.tar.xz |
demux/lavf: move tags instead of copying
Use mp_tags_move_from_av_dictionary() in place of
mp_tags_copy_from_av_dictionary().
This ensures that when lavf appends metadata
that occurs later in the stream,
it starts from empty each time.
Fixes: <https://github.com/mpv-player/mpv/issues/12559>
Diffstat (limited to 'demux')
-rw-r--r-- | demux/demux_lavf.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 347763bed8..fbbc9abf5e 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -851,7 +851,7 @@ static void handle_new_stream(demuxer_t *demuxer, int i) if (prog) sh->program_id = prog->id; sh->missing_timestamps = !!(priv->avif_flags & AVFMT_NOTIMESTAMPS); - mp_tags_copy_from_av_dictionary(sh->tags, st->metadata); + mp_tags_move_from_av_dictionary(sh->tags, &st->metadata); demux_add_sh_stream(demuxer, sh); // Unfortunately, there is no better way to detect PCM codecs, other @@ -889,7 +889,7 @@ static void update_metadata(demuxer_t *demuxer) { lavf_priv_t *priv = demuxer->priv; if (priv->avfc->event_flags & AVFMT_EVENT_FLAG_METADATA_UPDATED) { - mp_tags_copy_from_av_dictionary(demuxer->metadata, priv->avfc->metadata); + mp_tags_move_from_av_dictionary(demuxer->metadata, &priv->avfc->metadata); priv->avfc->event_flags = 0; demux_metadata_changed(demuxer); } @@ -1121,12 +1121,12 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check) t = av_dict_get(c->metadata, "title", NULL, 0); int index = demuxer_add_chapter(demuxer, t ? t->value : "", c->start * av_q2d(c->time_base), i); - mp_tags_copy_from_av_dictionary(demuxer->chapters[index].metadata, c->metadata); + mp_tags_move_from_av_dictionary(demuxer->chapters[index].metadata, &c->metadata); } add_new_streams(demuxer); - mp_tags_copy_from_av_dictionary(demuxer->metadata, avfc->metadata); + mp_tags_move_from_av_dictionary(demuxer->metadata, &avfc->metadata); demuxer->ts_resets_possible = priv->avif_flags & (AVFMT_TS_DISCONT | AVFMT_NOTIMESTAMPS); @@ -1283,7 +1283,7 @@ static bool demux_lavf_read_packet(struct demuxer *demux, if (st->event_flags & AVSTREAM_EVENT_FLAG_METADATA_UPDATED) { st->event_flags = 0; struct mp_tags *tags = talloc_zero(NULL, struct mp_tags); - mp_tags_copy_from_av_dictionary(tags, st->metadata); + mp_tags_move_from_av_dictionary(tags, &st->metadata); double pts = MP_PTS_OR_DEF(dp->pts, dp->dts); demux_stream_tags_changed(demux, stream, tags, pts); } |