diff options
author | Florian Albrechtskirchinger <falbrechtskirchinger@gmail.com> | 2021-12-04 13:31:53 +0100 |
---|---|---|
committer | Kacper Michajłow <kasper93@gmail.com> | 2024-04-19 03:10:48 +0200 |
commit | 56b3bcaaf2594e38e35f0d115d84ee0e1aeac7ee (patch) | |
tree | ea5def1f15e012388d9bbb8d0de94b063b33f2a7 /demux | |
parent | f75f32977cba1b227413e5f4b4146c95a2c26bc9 (diff) | |
download | mpv-56b3bcaaf2594e38e35f0d115d84ee0e1aeac7ee.tar.bz2 mpv-56b3bcaaf2594e38e35f0d115d84ee0e1aeac7ee.tar.xz |
demux: also read "CUESHEET" tag from stream metadata
Read embedded cue sheets from stream-level metadata, in addition to
format-level metadata.
Fixes missing chapters in opus files with "CUESHEET" tags.
Diffstat (limited to 'demux')
-rw-r--r-- | demux/demux.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/demux/demux.c b/demux/demux.c index 9aa63bc18c..5997a96ed6 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -3173,19 +3173,26 @@ void demux_update(demuxer_t *demuxer, double pts) static void demux_init_cuesheet(struct demuxer *demuxer) { + if (demuxer->num_chapters) + return; + + struct sh_stream *sh = demuxer->in->metadata_stream; char *cue = mp_tags_get_str(demuxer->metadata, "cuesheet"); - if (cue && !demuxer->num_chapters) { - struct cue_file *f = mp_parse_cue(bstr0(cue)); - if (f) { - if (mp_check_embedded_cue(f) < 0) { - MP_WARN(demuxer, "Embedded cue sheet references more than one file. " - "Ignoring it.\n"); - } else { - for (int n = 0; n < f->num_tracks; n++) { - struct cue_track *t = &f->tracks[n]; - int idx = demuxer_add_chapter(demuxer, "", t->start, -1); - mp_tags_merge(demuxer->chapters[idx].metadata, t->tags); - } + if (!cue && sh) + cue = mp_tags_get_str(sh->tags, "cuesheet"); + if (!cue) + return; + + struct cue_file *f = mp_parse_cue(bstr0(cue)); + if (f) { + if (mp_check_embedded_cue(f) < 0) { + MP_WARN(demuxer, "Embedded cue sheet references more than one file. " + "Ignoring it.\n"); + } else { + for (int n = 0; n < f->num_tracks; n++) { + struct cue_track *t = &f->tracks[n]; + int idx = demuxer_add_chapter(demuxer, "", t->start, -1); + mp_tags_merge(demuxer->chapters[idx].metadata, t->tags); } } talloc_free(f); |