From 7a0299478e169ea076fe57028fda1ef7292a5431 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 26 Nov 2013 23:41:20 +0100 Subject: video: unbreak --no-correct-pts with demuxers that use DTS --- video/decode/dec_video.c | 8 +++++--- video/decode/dec_video.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'video') diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c index 8d4b6cb194..679295b83e 100644 --- a/video/decode/dec_video.c +++ b/video/decode/dec_video.c @@ -211,7 +211,7 @@ static void determine_frame_pts(struct dec_video *d_video) if (!opts->correct_pts) { double frame_time = 1.0f / (d_video->fps > 0 ? d_video->fps : 25); - double pkt_pts = d_video->last_packet_pts; + double pkt_pts = d_video->last_packet_pdts; if (d_video->pts == MP_NOPTS_VALUE) d_video->pts = pkt_pts == MP_NOPTS_VALUE ? 0 : pkt_pts; @@ -253,9 +253,11 @@ struct mp_image *video_decode(struct dec_video *d_video, struct MPOpts *opts = d_video->opts; bool sort_pts = opts->user_pts_assoc_mode != 1 && opts->correct_pts; double pts = packet ? packet->pts : MP_NOPTS_VALUE; + double dts = packet ? packet->dts : MP_NOPTS_VALUE; - if (pts != MP_NOPTS_VALUE) - d_video->last_packet_pts = pts; + double pdts = pts == MP_NOPTS_VALUE ? dts : pts; + if (pdts != MP_NOPTS_VALUE) + d_video->last_packet_pdts = pdts; if (sort_pts && pts != MP_NOPTS_VALUE) { int delay = -1; diff --git a/video/decode/dec_video.h b/video/decode/dec_video.h index 6259d5b0d4..a9c64cb695 100644 --- a/video/decode/dec_video.h +++ b/video/decode/dec_video.h @@ -60,7 +60,7 @@ struct dec_video { float fps; // FPS from demuxer or from user override float initial_decoder_aspect; - double last_packet_pts; + double last_packet_pdts; // State used only by player/video.c double last_pts; }; -- cgit v1.2.3