[FFmpeg-cvslog] r11963 - in trunk: libavformat/utils.c tests/seek.regression.ref

michael subversion
Fri Feb 15 21:32:33 CET 2008


Author: michael
Date: Fri Feb 15 21:32:32 2008
New Revision: 11963

Log:
Fix timestamps and durations if the first packets have no durations nor timestamps,
and the information needed to guess the duration only becomes known at a later packet.


Modified:
   trunk/libavformat/utils.c
   trunk/tests/seek.regression.ref

Modified: trunk/libavformat/utils.c
==============================================================================
--- trunk/libavformat/utils.c	(original)
+++ trunk/libavformat/utils.c	Fri Feb 15 21:32:32 2008
@@ -632,6 +632,24 @@ static void update_initial_timestamps(AV
         st->start_time = pts;
 }
 
+static void update_initial_durations(AVFormatContext *s, AVStream *st, AVPacket *pkt)
+{
+    AVPacketList *pktl= s->packet_buffer;
+
+    assert(pkt->duration && !st->cur_dts);
+
+    for(; pktl; pktl= pktl->next){
+        if(pktl->pkt.stream_index != pkt->stream_index)
+            continue;
+        if(pktl->pkt.pts == pktl->pkt.dts && pktl->pkt.dts == AV_NOPTS_VALUE){
+            pktl->pkt.pts= pktl->pkt.dts= st->cur_dts;
+            st->cur_dts += pkt->duration;
+            pktl->pkt.duration= pkt->duration;
+        }else
+            break;
+    }
+}
+
 static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
                                AVCodecParserContext *pc, AVPacket *pkt)
 {
@@ -647,6 +665,9 @@ static void compute_pkt_fields(AVFormatC
         compute_frame_duration(&num, &den, st, pc, pkt);
         if (den && num) {
             pkt->duration = av_rescale(1, num * (int64_t)st->time_base.den, den * (int64_t)st->time_base.num);
+
+            if(pkt->dts == AV_NOPTS_VALUE && pkt->pts == AV_NOPTS_VALUE && st->cur_dts == 0)
+                update_initial_durations(s, st, pkt);
         }
     }
 

Modified: trunk/tests/seek.regression.ref
==============================================================================
--- trunk/tests/seek.regression.ref	(original)
+++ trunk/tests/seek.regression.ref	Fri Feb 15 21:32:32 2008
@@ -1075,57 +1075,57 @@ ret: 0 st: 0 dts:0.480000 pts:0.480000 p
 ret:-1 st:-1 ts:-0.645825 flags:1
 ----------------
 tests/data/a-mp2.mp2
-ret: 0 st: 0 dts:-102481911520608.625000 pts:-102481911520608.625000 pos:0 size:417 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:0 size:417 flags:1
 ret: 0 st:-1 ts:-1.000000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:417 size:418 flags:1
+ret: 0 st: 0 dts:0.026122 pts:0.026122 pos:417 size:418 flags:1
 ret: 0 st:-1 ts:1.894167 flags:1
-ret: 0 st: 0 dts:1.880800 pts:1.880800 pos:30511 size:417 flags:1
+ret: 0 st: 0 dts:1.880800 pts:1.880800 pos:30093 size:418 flags:1
 ret: 0 st: 0 ts:0.788333 flags:0
-ret: 0 st: 0 dts:0.809789 pts:0.809789 pos:13374 size:418 flags:1
+ret: 0 st: 0 dts:0.809789 pts:0.809789 pos:12956 size:418 flags:1
 ret: 0 st: 0 ts:-0.317500 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:0 size:417 flags:1
 ret: 0 st:-1 ts:2.576668 flags:0
-ret: 0 st: 0 dts:2.586100 pts:2.586100 pos:41795 size:418 flags:1
+ret: 0 st: 0 dts:2.586100 pts:2.586100 pos:41377 size:418 flags:1
 ret: 0 st:-1 ts:1.470835 flags:1
-ret: 0 st: 0 dts:1.462844 pts:1.462844 pos:23823 size:418 flags:1
+ret: 0 st: 0 dts:1.462844 pts:1.462844 pos:23405 size:418 flags:1
 ret: 0 st: 0 ts:0.365000 flags:0
-ret: 0 st: 0 dts:0.365711 pts:0.365711 pos:6269 size:418 flags:1
+ret: 0 st: 0 dts:0.365711 pts:0.365711 pos:5851 size:418 flags:1
 ret: 0 st: 0 ts:-0.740833 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:0 size:417 flags:1
 ret: 0 st:-1 ts:2.153336 flags:0
-ret: 0 st: 0 dts:2.168144 pts:2.168144 pos:35108 size:418 flags:1
+ret: 0 st: 0 dts:2.168144 pts:2.168144 pos:34690 size:418 flags:1
 ret: 0 st:-1 ts:1.047503 flags:1
-ret: 0 st: 0 dts:1.044889 pts:1.044889 pos:17136 size:418 flags:1
+ret: 0 st: 0 dts:1.044889 pts:1.044889 pos:16718 size:418 flags:1
 ret: 0 st: 0 ts:-0.058333 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:0 size:417 flags:1
 ret: 0 st: 0 ts:2.835833 flags:1
-ret: 0 st: 0 dts:2.821200 pts:2.821200 pos:45557 size:418 flags:1
+ret: 0 st: 0 dts:2.821200 pts:2.821200 pos:45139 size:418 flags:1
 ret: 0 st:-1 ts:1.730004 flags:0
-ret: 0 st: 0 dts:1.750189 pts:1.750189 pos:28421 size:418 flags:1
+ret: 0 st: 0 dts:1.750189 pts:1.750189 pos:28003 size:418 flags:1
 ret: 0 st:-1 ts:0.624171 flags:1
-ret: 0 st: 0 dts:0.600811 pts:0.600811 pos:10031 size:417 flags:1
+ret: 0 st: 0 dts:0.600811 pts:0.600811 pos:9613 size:418 flags:1
 ret: 0 st: 0 ts:-0.481667 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:0 size:417 flags:1
 ret: 0 st: 0 ts:2.412500 flags:1
-ret: 0 st: 0 dts:2.403244 pts:2.403244 pos:38870 size:418 flags:1
+ret: 0 st: 0 dts:2.403244 pts:2.403244 pos:38452 size:418 flags:1
 ret: 0 st:-1 ts:1.306672 flags:0
-ret: 0 st: 0 dts:1.332233 pts:1.332233 pos:21733 size:418 flags:1
+ret: 0 st: 0 dts:1.332233 pts:1.332233 pos:21315 size:418 flags:1
 ret: 0 st:-1 ts:0.200839 flags:1
-ret: 0 st: 0 dts:0.182856 pts:0.182856 pos:3343 size:418 flags:1
+ret: 0 st: 0 dts:0.182856 pts:0.182856 pos:2925 size:418 flags:1
 ret: 0 st: 0 ts:-0.904989 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:0 size:417 flags:1
 ret: 0 st: 0 ts:1.989178 flags:1
-ret: 0 st: 0 dts:1.985289 pts:1.985289 pos:32182 size:418 flags:1
+ret: 0 st: 0 dts:1.985289 pts:1.985289 pos:31764 size:418 flags:1
 ret: 0 st:-1 ts:0.883340 flags:0
-ret: 0 st: 0 dts:0.888156 pts:0.888156 pos:14628 size:418 flags:1
+ret: 0 st: 0 dts:0.888156 pts:0.888156 pos:14210 size:418 flags:1
 ret: 0 st:-1 ts:-0.222493 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:0 size:417 flags:1
 ret: 0 st: 0 ts:2.671678 flags:0
-ret: 0 st: 0 dts:2.690589 pts:2.690589 pos:43467 size:418 flags:1
+ret: 0 st: 0 dts:2.690589 pts:2.690589 pos:43049 size:418 flags:1
 ret: 0 st: 0 ts:1.565844 flags:1
-ret: 0 st: 0 dts:1.541211 pts:1.541211 pos:25077 size:418 flags:1
+ret: 0 st: 0 dts:1.541211 pts:1.541211 pos:24659 size:418 flags:1
 ret: 0 st:-1 ts:0.460008 flags:0
-ret: 0 st: 0 dts:0.470200 pts:0.470200 pos:7941 size:418 flags:1
+ret: 0 st: 0 dts:0.470200 pts:0.470200 pos:7523 size:418 flags:1
 ret: 0 st:-1 ts:-0.645825 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:0 size:417 flags:1
 ----------------




More information about the ffmpeg-cvslog mailing list