summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/utils.c12
-rw-r--r--tests/libav.regression.ref2
2 files changed, 9 insertions, 5 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index de11835ff3..0e323831d3 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -590,7 +590,9 @@ static int is_intra_only(AVCodecContext *enc){
return 0;
}
-static void update_initial_timestamps(AVFormatContext *s, int stream_index, int64_t dts){
+static void update_initial_timestamps(AVFormatContext *s, int stream_index,
+ int64_t dts, int64_t pts)
+{
AVStream *st= s->streams[stream_index];
AVPacketList *pktl= s->packet_buffer;
@@ -613,6 +615,8 @@ static void update_initial_timestamps(AVFormatContext *s, int stream_index, int6
if(st->start_time == AV_NOPTS_VALUE && pktl->pkt.pts != AV_NOPTS_VALUE)
st->start_time= pktl->pkt.pts;
}
+ if (st->start_time == AV_NOPTS_VALUE)
+ st->start_time = pts;
}
static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
@@ -670,7 +674,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
/* PTS = presentation time stamp */
if (pkt->dts == AV_NOPTS_VALUE)
pkt->dts = st->last_IP_pts;
- update_initial_timestamps(s, pkt->stream_index, pkt->dts);
+ update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts);
if (pkt->dts == AV_NOPTS_VALUE)
pkt->dts = st->cur_dts;
@@ -696,7 +700,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
/* presentation is not delayed : PTS and DTS are the same */
if(pkt->pts == AV_NOPTS_VALUE)
pkt->pts = pkt->dts;
- update_initial_timestamps(s, pkt->stream_index, pkt->pts);
+ update_initial_timestamps(s, pkt->stream_index, pkt->pts, pkt->pts);
if(pkt->pts == AV_NOPTS_VALUE)
pkt->pts = st->cur_dts;
pkt->dts = pkt->pts;
@@ -713,7 +717,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
if(pkt->dts == AV_NOPTS_VALUE)
pkt->dts= st->pts_buffer[0];
if(delay>1){
- update_initial_timestamps(s, pkt->stream_index, pkt->dts); // this should happen on the first packet
+ update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts); // this should happen on the first packet
}
if(pkt->dts > st->cur_dts)
st->cur_dts = pkt->dts;
diff --git a/tests/libav.regression.ref b/tests/libav.regression.ref
index 13b445c79d..67e9a93130 100644
--- a/tests/libav.regression.ref
+++ b/tests/libav.regression.ref
@@ -4,7 +4,7 @@ ffmpeg regression test
./tests/data/b-libav.avi CRC=0x400c29e9
786446e80ead936e5faa8f5908f19281 *./tests/data/b-libav.asf
339775 ./tests/data/b-libav.asf
-./tests/data/b-libav.asf CRC=0x7f38e57b
+./tests/data/b-libav.asf CRC=0x74113749
1ce78eeb6881ffe5b649a9b5105de919 *./tests/data/b-libav.rm
355405 ./tests/data/b-libav.rm
bdb7484c68db722f66ba1630cf79844c *./tests/data/b-libav.mpg