summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
Diffstat (limited to 'video')
-rw-r--r--video/decode/dec_video.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index 1ec0bab241..bfdeb2c3a7 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -262,9 +262,12 @@ static double retrieve_sorted_pts(struct dec_video *d_video, double codec_pts)
d_video->num_unsorted_pts_problems++;
d_video->unsorted_pts = codec_pts;
- if (opts->user_pts_assoc_mode)
+ if (d_video->header->video->avi_dts) {
+ // Actually, they don't need to be sorted, we just reuse the buffering.
+ d_video->pts_assoc_mode = 2;
+ } else if (opts->user_pts_assoc_mode) {
d_video->pts_assoc_mode = opts->user_pts_assoc_mode;
- else if (d_video->pts_assoc_mode == 0) {
+ } else if (d_video->pts_assoc_mode == 0) {
if (codec_pts != MP_NOPTS_VALUE)
d_video->pts_assoc_mode = 1;
else
@@ -292,7 +295,9 @@ struct mp_image *video_decode(struct dec_video *d_video,
int drop_frame)
{
struct MPOpts *opts = d_video->opts;
- bool sort_pts = opts->user_pts_assoc_mode != 1 && opts->correct_pts;
+ bool sort_pts =
+ (opts->user_pts_assoc_mode != 1 || d_video->header->video->avi_dts)
+ && opts->correct_pts;
double pkt_pts = packet ? packet->pts : MP_NOPTS_VALUE;
double pkt_dts = packet ? packet->dts : MP_NOPTS_VALUE;