From: Jan Ekström Date: Wed, 25 Jul 2018 23:51:38 +0000 (+0300) Subject: avformat/movenc: implicitly enable negative CTS offsets for ismv X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=1931761f18cda3756a27087c366270c38160c754;p=ffmpeg avformat/movenc: implicitly enable negative CTS offsets for ismv ISMV lacks any sort of edit list support, as well as tfxd is effectively the PTS of the fragment for most intents and purposes. Thus, if b-frames are requested without negative CTS offsets you end up with N frames' worth of delay (tfxd PTS plus the CTS offset of the first sample). Negative CTS offsets enable the first sample to have CTS=DTS, and thus a/v desync due to b-frame reorder delay is avoided. --- diff --git a/doc/muxers.texi b/doc/muxers.texi index 33f1f7bbaf7..268c1520233 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -1344,6 +1344,8 @@ be negative. This enables the initial sample to have DTS/CTS of zero, and reduces the need for edit lists for some cases such as video tracks with B-frames. Additionally, eases conformance with the DASH-IF interoperability guidelines. + +This option is implicitly set when writing ismv (Smooth Streaming) files. @item -write_prft Write producer time reference box (PRFT) with a specified time source for the NTP field in the PRFT box. Set value as @samp{wallclock} to specify timesource diff --git a/libavformat/movenc.c b/libavformat/movenc.c index dd6aa02525a..72a6e12d528 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -6046,7 +6046,7 @@ static int mov_init(AVFormatContext *s) /* Set other implicit flags immediately */ if (mov->mode == MODE_ISM) mov->flags |= FF_MOV_FLAG_EMPTY_MOOV | FF_MOV_FLAG_SEPARATE_MOOF | - FF_MOV_FLAG_FRAGMENT; + FF_MOV_FLAG_FRAGMENT | FF_MOV_FLAG_NEGATIVE_CTS_OFFSETS; if (mov->flags & FF_MOV_FLAG_DASH) mov->flags |= FF_MOV_FLAG_FRAGMENT | FF_MOV_FLAG_EMPTY_MOOV | FF_MOV_FLAG_DEFAULT_BASE_MOOF; diff --git a/tests/ref/fate/movenc b/tests/ref/fate/movenc index 872796ebce6..5e8f324ea37 100644 --- a/tests/ref/fate/movenc +++ b/tests/ref/fate/movenc @@ -17,10 +17,10 @@ write_data len 20, time nopts, type header atom ftyp write_data len 1171, time nopts, type header atom - write_data len 728, time 0, type sync atom moof write_data len 828, time nopts, type unknown atom - -write_data len 728, time 1013106, type sync atom moof +write_data len 728, time 1046439, type sync atom moof write_data len 812, time nopts, type unknown atom - write_data len 148, time nopts, type trailer atom - -1f37c1a8e01651e8bebcd66f00b6a226 4435 ismv +49bf122c4c732a344ef68b58acd19be5 4435 ismv write_data len 36, time nopts, type header atom ftyp write_data len 1123, time nopts, type header atom - write_data len 796, time 0, type sync atom moof diff --git a/tests/ref/lavf/ismv b/tests/ref/lavf/ismv index f29b5ff3ef9..7b4a4660967 100644 --- a/tests/ref/lavf/ismv +++ b/tests/ref/lavf/ismv @@ -1,9 +1,9 @@ -a9ccbb4cd1436d222ef4425567b4e03d *./tests/data/lavf/lavf.ismv +96053075a3f60d271131fe2d0765c267 *./tests/data/lavf/lavf.ismv 312542 ./tests/data/lavf/lavf.ismv ./tests/data/lavf/lavf.ismv CRC=0x9d9a638a -440d85f9fd5b9f63c2676638782b5c15 *./tests/data/lavf/lavf.ismv +7022701b4c693bc4ffe1e9f96dd82a02 *./tests/data/lavf/lavf.ismv 321448 ./tests/data/lavf/lavf.ismv ./tests/data/lavf/lavf.ismv CRC=0xe8130120 -a9ccbb4cd1436d222ef4425567b4e03d *./tests/data/lavf/lavf.ismv +96053075a3f60d271131fe2d0765c267 *./tests/data/lavf/lavf.ismv 312542 ./tests/data/lavf/lavf.ismv ./tests/data/lavf/lavf.ismv CRC=0x9d9a638a