From 9806f846c0f7dd6ff3a0bdf1f2e161623ec9d3e6 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 19 Oct 2008 01:02:48 +0000 Subject: [PATCH] Check for pts==dts on I/P frames in the presence of non low delay decoding and discard these invalid timestamps. fixes issue171. Originally committed as revision 15641 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/utils.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libavformat/utils.c b/libavformat/utils.c index f4377fed3d..51bc5c58fb 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -838,6 +838,14 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, pkt->dts -= 1LL<pts_wrap_bits; } + // some mpeg2 in mpeg-ps lack dts (issue171 / input_file.mpg) + // we take the conservative approach and discard both + // Note, if this is misbehaving for a H.264 file then possibly presentation_delayed is not set correctly. + if(delay==1 && pkt->dts == pkt->pts && pkt->dts != AV_NOPTS_VALUE && presentation_delayed){ + av_log(s, AV_LOG_ERROR, "invalid dts/pts combination\n"); + pkt->dts= pkt->pts= AV_NOPTS_VALUE; + } + if (pkt->duration == 0) { compute_frame_duration(&num, &den, st, pc, pkt); if (den && num) {