summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorFlorian Albrechtskirchinger <falbrechtskirchinger@gmail.com>2021-12-04 13:31:53 +0100
committerKacper Michajłow <kasper93@gmail.com>2024-04-19 03:10:48 +0200
commit56b3bcaaf2594e38e35f0d115d84ee0e1aeac7ee (patch)
treeea5def1f15e012388d9bbb8d0de94b063b33f2a7 /demux
parentf75f32977cba1b227413e5f4b4146c95a2c26bc9 (diff)
downloadmpv-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.c31
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);