aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/movenc.c
diff options
context:
space:
mode:
authorJan Ekström <jeebjp@gmail.com>2017-09-30 01:04:00 +0300
committerClément Bœsch <u@pkh.me>2017-10-04 13:09:29 +0200
commitffc58b2ce27e140b47900d1ead304663f7b385ae (patch)
tree10fb4cebeabe1eefb9bf2d814e40238d4873a25b /libavformat/movenc.c
parent8be3fc88d3facec927708a8594fe26df93df5cad (diff)
downloadffmpeg-ffc58b2ce27e140b47900d1ead304663f7b385ae.tar.gz
movenc: take packet dts shifting into mention in check_pkt
This FFmpeg-specific "fuzzer fix" was never perfect, but now it stopped encoding of actual content with a big enough DTS shift. This returns the function to its original state of results before negative CTS offsets were added. I remember dealing with this function before, but somehow had forgotten about it during VDD. The test cases not tripping this over also didn't help.
Diffstat (limited to 'libavformat/movenc.c')
-rw-r--r--libavformat/movenc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 9c3e6437d7..2838286141 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -4989,6 +4989,12 @@ static int check_pkt(AVFormatContext *s, AVPacket *pkt)
} else
ref = pkt->dts; // Skip tests for the first packet
+ if (trk->dts_shift != AV_NOPTS_VALUE) {
+ /* With negative CTS offsets we have set an offset to the DTS,
+ * reverse this for the check. */
+ ref -= trk->dts_shift;
+ }
+
duration = pkt->dts - ref;
if (pkt->dts < ref || duration >= INT_MAX) {
av_log(s, AV_LOG_ERROR, "Application provided duration: %"PRId64" / timestamp: %"PRId64" is out of range for mov/mp4 format\n",