diff utils.c @ 2020:d0d39f124c6b libavformat

timestamps generation improvement when parsing avi patch by Joakim \ elupus chez ecce dot se / original thread: date: 03/19/2007 01:47 AM subject: [Ffmpeg-devel] [RFC] Improvement for the odd timestamp generation when parser is in use.
author benoit
date Fri, 13 Apr 2007 07:50:04 +0000
parents 0d9b233dff9b
children a3e79d6e4e3c
line wrap: on
line diff
--- a/utils.c	Thu Apr 12 11:28:34 2007 +0000
+++ b/utils.c	Fri Apr 13 07:50:04 2007 +0000
@@ -584,6 +584,7 @@
                                AVCodecParserContext *pc, AVPacket *pkt)
 {
     int num, den, presentation_delayed, delay, i;
+    int64_t offset;
     /* handle wrapping */
     if(st->cur_dts != AV_NOPTS_VALUE){
         if(pkt->pts != AV_NOPTS_VALUE)
@@ -599,6 +600,16 @@
         }
     }
 
+    /* correct timestamps with byte offset if demuxers only have timestamps on packet boundaries */
+    if(pc && st->need_parsing == AVSTREAM_PARSE_TIMESTAMPS && pkt->size){
+        /* this will estimate bitrate based on this frame's duration and size */
+        offset = av_rescale(pc->offset, pkt->duration, pkt->size);
+        if(pkt->pts != AV_NOPTS_VALUE)
+            pkt->pts += offset;
+        if(pkt->dts != AV_NOPTS_VALUE)
+            pkt->dts += offset;
+    }
+
     if(is_intra_only(st->codec))
         pkt->flags |= PKT_FLAG_KEY;