diff options
Diffstat (limited to 'video')
-rw-r--r-- | video/decode/dec_video.c | 6 | ||||
-rw-r--r-- | video/decode/dec_video.h | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c index 1802e19fbf..ec4cd5b775 100644 --- a/video/decode/dec_video.c +++ b/video/decode/dec_video.c @@ -171,6 +171,7 @@ bool video_init_best_codec(struct dec_video *d_video, char* video_decoders) { assert(!d_video->vd_driver); video_reset_decoding(d_video); + d_video->has_broken_packet_pts = -10; // needs 10 packets to reach decision struct mp_decoder_entry *decoder = NULL; struct mp_decoder_list *list = @@ -363,6 +364,11 @@ struct mp_image *video_decode(struct dec_video *d_video, pts = d_video->decoded_pts; } + if (d_video->has_broken_packet_pts < 0) + d_video->has_broken_packet_pts++; + if (d_video->num_codec_pts_problems || pkt_pts == MP_NOPTS_VALUE) + d_video->has_broken_packet_pts = 1; + mpi->pts = pts; d_video->decoded_pts = pts; return mpi; diff --git a/video/decode/dec_video.h b/video/decode/dec_video.h index d411717a32..090b60bc1c 100644 --- a/video/decode/dec_video.h +++ b/video/decode/dec_video.h @@ -62,6 +62,9 @@ struct dec_video { // PTS or DTS of packet last read double last_packet_pdts; + // There was at least one packet with non-sense timestamps. + int has_broken_packet_pts; // <0: uninitialized, 0: no problems, 1: broken + // Final PTS of previously decoded image double decoded_pts; |