From 68a959cb271767d65a7f0e382e518d8270588308 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 14 Feb 2014 20:27:07 +0100 Subject: [PATCH] avcodec/utils: improve guess_correct_pts() by considerng mixed dts/pts use caused by NOPTSs No testcase known, this is a theoretical improvment Signed-off-by: Michael Niedermayer --- libavcodec/utils.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 135fd831e5..ea7765493a 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1966,11 +1966,15 @@ static int64_t guess_correct_pts(AVCodecContext *ctx, if (dts != AV_NOPTS_VALUE) { ctx->pts_correction_num_faulty_dts += dts <= ctx->pts_correction_last_dts; ctx->pts_correction_last_dts = dts; - } + } else if (reordered_pts != AV_NOPTS_VALUE) + ctx->pts_correction_last_dts = reordered_pts; + if (reordered_pts != AV_NOPTS_VALUE) { ctx->pts_correction_num_faulty_pts += reordered_pts <= ctx->pts_correction_last_pts; ctx->pts_correction_last_pts = reordered_pts; - } + } else if(dts != AV_NOPTS_VALUE) + ctx->pts_correction_last_pts = dts; + if ((ctx->pts_correction_num_faulty_pts<=ctx->pts_correction_num_faulty_dts || dts == AV_NOPTS_VALUE) && reordered_pts != AV_NOPTS_VALUE) pts = reordered_pts;