diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 2ad5aa5c76..f74916f9b7 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -836,6 +836,7 @@ static void mpegts_push_data(void *opaque, memcpy(pkt->data, p, len); pkt->stream_index = pes->st->index; pkt->pts = pes->pts; + pkt->dts = pes->dts; /* reset pts values */ pes->pts = AV_NOPTS_VALUE; pes->dts = AV_NOPTS_VALUE; diff --git a/libavformat/utils.c b/libavformat/utils.c index 2f60c77c74..8f9b97e7b0 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -625,8 +625,14 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, } else { /* presentation is not delayed : PTS and DTS are the same */ if (pkt->pts == AV_NOPTS_VALUE) { - pkt->pts = st->cur_dts; - pkt->dts = st->cur_dts; + if (pkt->dts == AV_NOPTS_VALUE) { + pkt->pts = st->cur_dts; + pkt->dts = st->cur_dts; + } + else { + st->cur_dts = pkt->dts; + pkt->pts = pkt->dts; + } } else { st->cur_dts = pkt->pts; pkt->dts = pkt->pts;