summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2008-02-15 20:32:32 +0000
committerMichael Niedermayer <michaelni@gmx.at>2008-02-15 20:32:32 +0000
commit83a9db42a38dda5bf2124faf9ffe4abd16641719 (patch)
tree8ab03d8e64c8c5ed4bae5bf4bcac253e7d80bd04
parentdb7ae7d1b96bec521793a200ad46574bca728b6e (diff)
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. Originally committed as revision 11963 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/utils.c21
-rw-r--r--tests/seek.regression.ref40
2 files changed, 41 insertions, 20 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 04a33a0405..79d502cd9e 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -632,6 +632,24 @@ static void update_initial_timestamps(AVFormatContext *s, int stream_index,
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(AVFormatContext *s, AVStream *st,
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);
}
}
diff --git a/tests/seek.regression.ref b/tests/seek.regression.ref
index cb2679b8ef..9e39ef2580 100644
--- a/tests/seek.regression.ref
+++ b/tests/seek.regression.ref
@@ -1075,57 +1075,57 @@ ret: 0 st: 0 dts:0.480000 pts:0.480000 pos:165884 size:12719 flags:1
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
----------------