diff options
author | wm4 <wm4@nowhere> | 2013-11-26 23:41:20 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-11-26 23:43:56 +0100 |
commit | 7a0299478e169ea076fe57028fda1ef7292a5431 (patch) | |
tree | 56942e2b844c08d507be009535446c92831a588d /video | |
parent | f1eb30a476fa92840d1cdfcdcc13db9e59ad09a6 (diff) | |
download | mpv-7a0299478e169ea076fe57028fda1ef7292a5431.tar.bz2 mpv-7a0299478e169ea076fe57028fda1ef7292a5431.tar.xz |
video: unbreak --no-correct-pts with demuxers that use DTS
Diffstat (limited to 'video')
-rw-r--r-- | video/decode/dec_video.c | 8 | ||||
-rw-r--r-- | video/decode/dec_video.h | 2 |
2 files changed, 6 insertions, 4 deletions
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; }; |