diff utils.c @ 4000:f0580597dc48 libavformat

Check for pts==dts on I/P frames in the presence of non low delay decoding and discard these invalid timestamps. fixes issue171.
author michael
date Sun, 19 Oct 2008 01:02:48 +0000
parents 19dbf5d63f15
children fcb9de59245f
line wrap: on
line diff
--- a/utils.c	Sat Oct 18 22:41:21 2008 +0000
+++ b/utils.c	Sun Oct 19 01:02:48 2008 +0000
@@ -838,6 +838,14 @@
         pkt->dts -= 1LL<<st->pts_wrap_bits;
     }
 
+    // some mpeg2 in mpeg-ps lack dts (issue171 / input_file.mpg)
+    // we take the conservative approach and discard both
+    // Note, if this is misbehaving for a H.264 file then possibly presentation_delayed is not set correctly.
+    if(delay==1 && pkt->dts == pkt->pts && pkt->dts != AV_NOPTS_VALUE && presentation_delayed){
+        av_log(s, AV_LOG_ERROR, "invalid dts/pts combination\n");
+        pkt->dts= pkt->pts= AV_NOPTS_VALUE;
+    }
+
     if (pkt->duration == 0) {
         compute_frame_duration(&num, &den, st, pc, pkt);
         if (den && num) {