From 921f316281588165c6229bb675d84372353ac5ec Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 15 Feb 2020 15:22:05 +0100 Subject: demux_edl: allow a redundant new_stream at the beginning Normally, the first sub-stream is implicitly created. This change lets the user use more orthogonal syntax, and use a new_stream header for every sub-stream, instead of having to skip the header for the first one. --- DOCS/edl-mpv.rst | 12 ++++++++++++ demux/demux_edl.c | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/DOCS/edl-mpv.rst b/DOCS/edl-mpv.rst index 881c3138d4..bff252ddff 100644 --- a/DOCS/edl-mpv.rst +++ b/DOCS/edl-mpv.rst @@ -182,6 +182,18 @@ this will use a unified cache for all streams. The ``new_stream`` header is not part of the core EDL format. It may be changed or removed at any time, depending on mpv's internal requirements. +If the first ``!new_stream`` is redundant, it is ignored. This is the same +example as above:: + + # mpv EDL v0 + !new_stream + video.mkv + !new_stream + audio.mkv + +Note that ``!new_stream`` must be the first header. Whether the parser accepts +(i.e. ignores) or rejects other headers before that is implementation specific. + Timestamp format ================ diff --git a/demux/demux_edl.c b/demux/demux_edl.c index 0c153874c0..655af8b0e0 100644 --- a/demux/demux_edl.c +++ b/demux/demux_edl.c @@ -194,7 +194,10 @@ static struct tl_root *parse_edl(bstr str, struct mp_log *log) } else if (bstr_equals0(f_type, "no_clip")) { tl->no_clip = true; } else if (bstr_equals0(f_type, "new_stream")) { - tl = add_part(root); + // (Special case: ignore "redundant" headers at the start for + // general symmetry.) + if (root->num_pars > 1 || tl->num_parts) + tl = add_part(root); } else if (bstr_equals0(f_type, "no_chapters")) { tl->disable_chapters = true; } else { -- cgit v1.2.3