diff --git a/libavformat/utils.c b/libavformat/utils.c
index 87025c13eb958b71c82d66705f5c3815d6a65ebb..70b7ddcb1d44385d8162b4d2a1fe810dc3bd6b58 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -595,6 +595,11 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
     int num, den, presentation_delayed, delay, i;
     int64_t offset;
 
+    if(pkt->pts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE && pkt->dts > pkt->pts && st->pts_wrap_bits<63
+       /*&& pkt->dts-(1LL<<st->pts_wrap_bits) < pkt->pts*/){
+        pkt->dts -= 1LL<<st->pts_wrap_bits;
+    }
+
     if (pkt->duration == 0) {
         compute_frame_duration(&num, &den, st, pc, pkt);
         if (den && num) {