summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--video/decode/dec_video.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index ecba84f6a7..42c7e873ad 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -248,18 +248,10 @@ static struct mp_image *decode_packet(struct dec_video *d_video,
int drop_frame)
{
struct MPOpts *opts = d_video->opts;
- bool avi_pts = d_video->codec->avi_dts && opts->correct_pts;
if (!d_video->vd_driver)
return NULL;
- struct demux_packet packet_copy;
- if (packet && packet->dts == MP_NOPTS_VALUE && !avi_pts) {
- packet_copy = *packet;
- packet = &packet_copy;
- packet->dts = packet->pts;
- }
-
double pkt_pts = packet ? packet->pts : MP_NOPTS_VALUE;
double pkt_dts = packet ? packet->dts : MP_NOPTS_VALUE;
@@ -338,7 +330,9 @@ static struct mp_image *decode_packet(struct dec_video *d_video,
d_video->decoded_pts = pts;
// Compensate for incorrectly using mpeg-style DTS for avi timestamps.
- if (avi_pts && mpi->pts != MP_NOPTS_VALUE && d_video->fps > 0) {
+ if (d_video->codec->avi_dts && opts->correct_pts &&
+ mpi->pts != MP_NOPTS_VALUE && d_video->fps > 0)
+ {
int delay = -1;
video_vd_control(d_video, VDCTRL_GET_BFRAMES, &delay);
mpi->pts -= MPMAX(delay, 0) / d_video->fps;
@@ -391,6 +385,11 @@ void video_work(struct dec_video *d_video)
return;
}
+ if (d_video->packet) {
+ if (d_video->packet->dts == MP_NOPTS_VALUE && !d_video->codec->avi_dts)
+ d_video->packet->dts = d_video->packet->pts;
+ }
+
if (d_video->packet && d_video->packet->new_segment) {
assert(!d_video->new_segment);
d_video->new_segment = d_video->packet;