summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--video/decode/dec_video.c15
-rw-r--r--video/decode/dec_video.h4
2 files changed, 10 insertions, 9 deletions
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index b0bdee3202..af55c66811 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -63,7 +63,7 @@ void video_reset_decoding(struct dec_video *d_video)
mp_image_unrefp(&d_video->waiting_decoded_mpi);
d_video->num_buffered_pts = 0;
d_video->last_pts = MP_NOPTS_VALUE;
- d_video->last_packet_pdts = MP_NOPTS_VALUE;
+ d_video->first_packet_pdts = MP_NOPTS_VALUE;
d_video->decoded_pts = MP_NOPTS_VALUE;
d_video->codec_pts = MP_NOPTS_VALUE;
d_video->codec_dts = MP_NOPTS_VALUE;
@@ -250,8 +250,8 @@ struct mp_image *video_decode(struct dec_video *d_video,
double pkt_dts = packet ? packet->dts : MP_NOPTS_VALUE;
double pkt_pdts = pkt_pts == MP_NOPTS_VALUE ? pkt_dts : pkt_pts;
- if (pkt_pdts != MP_NOPTS_VALUE)
- d_video->last_packet_pdts = pkt_pdts;
+ if (pkt_pdts != MP_NOPTS_VALUE && d_video->first_packet_pdts == MP_NOPTS_VALUE)
+ d_video->first_packet_pdts = pkt_pdts;
if (avi_pts)
add_avi_pts(d_video, pkt_pdts);
@@ -310,12 +310,13 @@ struct mp_image *video_decode(struct dec_video *d_video,
MP_WARN(d_video, "No video PTS! Making something up.\n");
double frame_time = 1.0f / (d_video->fps > 0 ? d_video->fps : 25);
- double base = d_video->last_packet_pdts;
+ double base = d_video->first_packet_pdts;
pts = d_video->decoded_pts;
- if (pts == MP_NOPTS_VALUE)
+ if (pts == MP_NOPTS_VALUE) {
pts = base == MP_NOPTS_VALUE ? 0 : base;
-
- pts += frame_time;
+ } else {
+ pts += frame_time;
+ }
}
if (d_video->has_broken_packet_pts < 0)
diff --git a/video/decode/dec_video.h b/video/decode/dec_video.h
index 2edf8b67c4..28844f5882 100644
--- a/video/decode/dec_video.h
+++ b/video/decode/dec_video.h
@@ -59,8 +59,8 @@ struct dec_video {
double buffered_pts[64];
int num_buffered_pts;
- // PTS or DTS of packet last read
- double last_packet_pdts;
+ // PTS or DTS of packet first read
+ double first_packet_pdts;
// There was at least one packet with non-sense timestamps.
int has_broken_packet_pts; // <0: uninitialized, 0: no problems, 1: broken