This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 39e14c2e0c4cc4897aca200b75b2f2585b938c97 Author: Kacper Michajłow <[email protected]> AuthorDate: Sat Oct 17 01:37:54 2026 +0200 Commit: Kacper Michajłow <[email protected]> CommitDate: Wed Nov 4 02:28:56 2026 +0000 tests/fate/demux: add HLS WebVTT timestamp map and seek tests Audio from 10 s with WebVTT segments mapping cue time 0 to 10 s, a cue that spans three segments and a seek into the second segment. Note tests are ugly with printf generation, but this is the only way to get full HLS test to work, it's not a single file that we could upload to fate samples server. Signed-off-by: Kacper Michajłow <[email protected]> --- tests/fate/demux.mak | 63 +++++++++++++++++++++++++++++++++ tests/ref/fate/hls-webvtt-discont-demux | 1 + tests/ref/fate/hls-webvtt-map-demux | 1 + tests/ref/fate/hls-webvtt-seek-demux | 1 + tests/ref/fate/hls-webvtt-wrap-demux | 8 +++++ 5 files changed, 74 insertions(+) diff --git a/tests/fate/demux.mak b/tests/fate/demux.mak index 8a94c77656..8a62415255 100644 --- a/tests/fate/demux.mak +++ b/tests/fate/demux.mak @@ -207,6 +207,69 @@ fate-hls-webvtt-demux: tests/data/hls-webvtt.m3u8 fate-hls-webvtt-demux: CLEANFILES = tests/data/hls-webvtt.m3u8 tests/data/hls-webvtt-a.m3u8 tests/data/hls-webvtt-s.m3u8 tests/data/hls-webvtt-a[0-9]*.ts tests/data/hls-webvtt-s[0-9]*.vtt fate-hls-webvtt-demux: CMD = fmtstdout webvtt -copyts -i $(TARGET_PATH)/tests/data/hls-webvtt.m3u8 -map 0:a -c copy -f null - -map 0:s -c copy +define HLS_WEBVTT_MAP_DATA +tests/data/$(1).m3u8: TAG = GEN +tests/data/$(1).m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data + $$(M)$$(TARGET_EXEC) $$(TARGET_PATH)/$$< -nostdin \ + -f lavfi -i "aevalsrc=0:d=6" -c:a mp2fixed -flags +bitexact -muxdelay 0 -muxpreload 0 -output_ts_offset 10 \ + -f hls -hls_time 2 -hls_list_size 0 \ + -hls_segment_filename $$(TARGET_PATH)/tests/data/$(1)-a%d.ts \ + $$(TARGET_PATH)/tests/data/$(1)-a.m3u8 2>/dev/null + $$(Q)printf '#EXTM3U\n#EXT-X-TARGETDURATION:2\n#EXTINF:2,\n$(1)-s0.vtt\n#EXTINF:2,\n$(1)-s1.vtt\n#EXTINF:2,\n$(1)-s2.vtt\n#EXT-X-ENDLIST\n' > tests/data/$(1)-s.m3u8 + $$(Q)printf 'WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000\n\n00:00.500 --> 00:01.500\nfirst\n\n00:01.000 --> 00:04.500 line:1\nlong\n' > tests/data/$(1)-s0.vtt + $$(Q)printf 'WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000\n\n00:01.000 --> 00:04.500 line:1\nlong\n\n00:03.000 --> 00:03.900 align:start\nsecond\n' > tests/data/$(1)-s1.vtt + $$(Q)printf 'WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000\n\n00:01.000 --> 00:04.500 line:1\nlong\n\n00:04.500 --> 00:05.500\nthird\n' > tests/data/$(1)-s2.vtt + $$(Q)printf '#EXTM3U\n#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="s",NAME="en",URI="$(1)-s.m3u8"\n#EXT-X-STREAM-INF:BANDWIDTH=64000,SUBTITLES="s"\n$(1)-a.m3u8\n' > $$@ + +fate-$(1)-demux: tests/data/$(1).m3u8 +fate-$(1)-demux: CLEANFILES = tests/data/$(1).m3u8 tests/data/$(1)-a.m3u8 tests/data/$(1)-s.m3u8 tests/data/$(1)-a[0-9]*.ts tests/data/$(1)-s[0-9]*.vtt +endef + +$(eval $(call HLS_WEBVTT_MAP_DATA,hls-webvtt-map)) +$(eval $(call HLS_WEBVTT_MAP_DATA,hls-webvtt-seek)) + +FATE_HLS_WEBVTT_MAP-$(call FILTERDEMDECENCMUX, AEVALSRC ARESAMPLE, HLS MPEGTS WEBVTT, MP2 PCM_F64LE, MP2FIXED, HLS MPEGTS NULL WEBVTT, LAVFI_INDEV MPEGAUDIO_PARSER PIPE_PROTOCOL) += fate-hls-webvtt-map-demux fate-hls-webvtt-seek-demux +FATE_FFMPEG += $(FATE_HLS_WEBVTT_MAP-yes) +fate-hls-webvtt-map-demux: CMD = fmtstdout webvtt -copyts -i $(TARGET_PATH)/tests/data/hls-webvtt-map.m3u8 -map 0:a -c copy -f null - -map 0:s -c copy +fate-hls-webvtt-seek-demux: CMD = fmtstdout webvtt -copyts -ss 4 -i $(TARGET_PATH)/tests/data/hls-webvtt-seek.m3u8 -map 0:s -c copy + +tests/data/hls-webvtt-discont.m3u8: TAG = GEN +tests/data/hls-webvtt-discont.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data + $(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \ + -f lavfi -i "aevalsrc=0:d=2" -c:a mp2fixed -flags +bitexact -muxdelay 0 -muxpreload 0 -output_ts_offset 10 \ + -f mpegts $(TARGET_PATH)/tests/data/hls-webvtt-discont-a0.ts 2>/dev/null + $(Q)cp tests/data/hls-webvtt-discont-a0.ts tests/data/hls-webvtt-discont-a1.ts + $(Q)printf '#EXTM3U\n#EXT-X-TARGETDURATION:2\n#EXTINF:2,\nhls-webvtt-discont-a0.ts\n#EXT-X-DISCONTINUITY\n#EXTINF:2,\nhls-webvtt-discont-a1.ts\n#EXT-X-ENDLIST\n' > tests/data/hls-webvtt-discont-a.m3u8 + $(Q)printf 'WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000\n\n00:00.500 --> 00:01.500\nhello\n' > tests/data/hls-webvtt-discont-s0.vtt + $(Q)cp tests/data/hls-webvtt-discont-s0.vtt tests/data/hls-webvtt-discont-s1.vtt + $(Q)printf '#EXTM3U\n#EXT-X-TARGETDURATION:2\n#EXTINF:2,\nhls-webvtt-discont-s0.vtt\n#EXT-X-DISCONTINUITY\n#EXTINF:2,\nhls-webvtt-discont-s1.vtt\n#EXT-X-ENDLIST\n' > tests/data/hls-webvtt-discont-s.m3u8 + $(Q)printf '#EXTM3U\n#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="s",NAME="en",URI="hls-webvtt-discont-s.m3u8"\n#EXT-X-STREAM-INF:BANDWIDTH=64000,SUBTITLES="s"\nhls-webvtt-discont-a.m3u8\n' > $@ + +FATE_HLS_WEBVTT_DISCONT-$(call FILTERDEMDECENCMUX, AEVALSRC ARESAMPLE, HLS MPEGTS WEBVTT, MP2 PCM_F64LE, MP2FIXED, MPEGTS NULL WEBVTT, LAVFI_INDEV MPEGAUDIO_PARSER PIPE_PROTOCOL) += fate-hls-webvtt-discont-demux +FATE_FFMPEG += $(FATE_HLS_WEBVTT_DISCONT-yes) +fate-hls-webvtt-discont-demux: tests/data/hls-webvtt-discont.m3u8 +fate-hls-webvtt-discont-demux: CLEANFILES = tests/data/hls-webvtt-discont.m3u8 tests/data/hls-webvtt-discont-a.m3u8 tests/data/hls-webvtt-discont-s.m3u8 tests/data/hls-webvtt-discont-a[0-9]*.ts tests/data/hls-webvtt-discont-s[0-9]*.vtt +fate-hls-webvtt-discont-demux: CMD = fmtstdout webvtt -copyts -i $(TARGET_PATH)/tests/data/hls-webvtt-discont.m3u8 -map 0:a -c copy -f null - -map 0:s -c copy + +tests/data/hls-webvtt-wrap.m3u8: TAG = GEN +tests/data/hls-webvtt-wrap.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data + $(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \ + -f lavfi -i "aevalsrc=0:d=6" -c:a mp2fixed -flags +bitexact -muxdelay 0 -muxpreload 0 -output_ts_offset 95442 \ + -f hls -hls_time 2 -hls_list_size 0 \ + -hls_segment_filename $(TARGET_PATH)/tests/data/hls-webvtt-wrap-a%d.ts \ + $(TARGET_PATH)/tests/data/hls-webvtt-wrap-a.m3u8 2>/dev/null + $(Q)printf '#EXTM3U\n#EXT-X-TARGETDURATION:2\n#EXTINF:2,\nhls-webvtt-wrap-s0.vtt\n#EXTINF:2,\nhls-webvtt-wrap-s1.vtt\n#EXTINF:2,\nhls-webvtt-wrap-s2.vtt\n#EXT-X-ENDLIST\n' > tests/data/hls-webvtt-wrap-s.m3u8 + $(Q)printf 'WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:8589780020,LOCAL:00:00:00.000\n\n00:00.500 --> 00:01.500\nbefore\n\n00:01.500 --> 00:02.500\nacross\n' > tests/data/hls-webvtt-wrap-s0.vtt + $(Q)printf 'WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:25428,LOCAL:00:00:02.000\n\n00:01.500 --> 00:02.500\nacross\n\n00:03.000 --> 00:03.900\nafter\n' > tests/data/hls-webvtt-wrap-s1.vtt + $(Q)printf 'WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:205428,LOCAL:00:00:04.000\n\n00:04.500 --> 00:05.500\nlast\n' > tests/data/hls-webvtt-wrap-s2.vtt + $(Q)printf '#EXTM3U\n#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="s",NAME="en",URI="hls-webvtt-wrap-s.m3u8"\n#EXT-X-STREAM-INF:BANDWIDTH=64000,SUBTITLES="s"\nhls-webvtt-wrap-a.m3u8\n' > $@ + +FATE_HLS_WEBVTT_WRAP-$(call FILTERDEMDECENCMUX, AEVALSRC ARESAMPLE, HLS MPEGTS WEBVTT, MP2 PCM_F64LE, MP2FIXED, HLS MPEGTS NULL FRAMECRC, LAVFI_INDEV MPEGAUDIO_PARSER PIPE_PROTOCOL) += fate-hls-webvtt-wrap-demux +FATE_FFMPEG += $(FATE_HLS_WEBVTT_WRAP-yes) +fate-hls-webvtt-wrap-demux: tests/data/hls-webvtt-wrap.m3u8 +fate-hls-webvtt-wrap-demux: CLEANFILES = tests/data/hls-webvtt-wrap.m3u8 tests/data/hls-webvtt-wrap-a.m3u8 tests/data/hls-webvtt-wrap-s.m3u8 tests/data/hls-webvtt-wrap-a[0-9]*.ts tests/data/hls-webvtt-wrap-s[0-9]*.vtt +fate-hls-webvtt-wrap-demux: CMD = framecrc -copyts -i $(TARGET_PATH)/tests/data/hls-webvtt-wrap.m3u8 -map 0:a -c copy -f null - -map 0:s -c copy + tests/data/hls-self-variant.m3u8: TAG = GEN tests/data/hls-self-variant.m3u8: | tests/data $(Q)printf '#EXTM3U\n#EXT-X-STREAM-INF:BANDWIDTH=64000\nhls-self-variant.m3u8\n#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="s",NAME="en",URI="hls-self-variant-missing.m3u8"\n#EXTINF:2,\nhls-self-variant.vtt\n' > $@ diff --git a/tests/ref/fate/hls-webvtt-discont-demux b/tests/ref/fate/hls-webvtt-discont-demux new file mode 100644 index 0000000000..5ea461665c --- /dev/null +++ b/tests/ref/fate/hls-webvtt-discont-demux @@ -0,0 +1 @@ +WEBVTT diff --git a/tests/ref/fate/hls-webvtt-map-demux b/tests/ref/fate/hls-webvtt-map-demux new file mode 100644 index 0000000000..5ea461665c --- /dev/null +++ b/tests/ref/fate/hls-webvtt-map-demux @@ -0,0 +1 @@ +WEBVTT diff --git a/tests/ref/fate/hls-webvtt-seek-demux b/tests/ref/fate/hls-webvtt-seek-demux new file mode 100644 index 0000000000..5ea461665c --- /dev/null +++ b/tests/ref/fate/hls-webvtt-seek-demux @@ -0,0 +1 @@ +WEBVTT diff --git a/tests/ref/fate/hls-webvtt-wrap-demux b/tests/ref/fate/hls-webvtt-wrap-demux new file mode 100644 index 0000000000..6cb6cf1f33 --- /dev/null +++ b/tests/ref/fate/hls-webvtt-wrap-demux @@ -0,0 +1,8 @@ +#tb 0: 1/1000 +#media_type 0: subtitle +#codec_id 0: webvtt +0, 500, 500, 1000, 6, 0x08730273 +0, 1500, 1500, 1000, 6, 0x08a3028b +0, 1500, 1500, 1000, 6, 0x08a3028b +0, 3000, 3000, 900, 5, 0x06150212 +0, 4500, 4500, 1000, 4, 0x042d01b4 -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
