if(pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE && pkt->pts > pkt->dts)
presentation_delayed = 1;
- if(st->cur_dts == AV_NOPTS_VALUE){
- st->cur_dts = 0; //FIXME maybe set it to 0 during init
- }
-
// av_log(NULL, AV_LOG_DEBUG, "IN delayed:%d pts:%"PRId64", dts:%"PRId64" cur_dts:%"PRId64" st:%d pc:%p\n", presentation_delayed, pkt->pts, pkt->dts, st->cur_dts, pkt->stream_index, pc);
/* interpolate PTS and DTS if they are not present */
if(delay==0 || (delay==1 && pc)){
st->id = id;
st->start_time = AV_NOPTS_VALUE;
st->duration = AV_NOPTS_VALUE;
- st->cur_dts = AV_NOPTS_VALUE;
+ /* we set the current DTS to 0 so that formats without any timestamps
+ but durations get some timestamps, formats with some unknown
+ timestamps have their first few packets buffered and the
+ timestamps corrected before they are returned to the user */
+ st->cur_dts = 0;
st->first_dts = AV_NOPTS_VALUE;
/* default pts setting is MPEG-like */
./tests/data/b-libav.mpg CRC=0x2b71a386
447b005e527cf495ec13092e788f028d *./tests/data/b-libav.ts
471692 ./tests/data/b-libav.ts
-./tests/data/b-libav.ts CRC=0xcc4948e1
+./tests/data/b-libav.ts CRC=0xd14320e2
d6fdeb9f7083cc827f9510c6c4517dc0 *./tests/data/b-libav.swf
335771 ./tests/data/b-libav.swf
./tests/data/b-libav.swf CRC=0xe14e8847
ret:-1 st:-1 ts:-0.645825 flags:1
----------------
tests/data/b-libav.ts
-ret: 0 st: 0 dts:0.000000 pts:-102481911520608.625000 pos:-1 size:24921 flags:1
+ret: 0 st: 0 dts:-102481911520608.625000 pts:-102481911520608.625000 pos:-1 size:24921 flags:1
ret: 0 st:-1 ts:-1.000000 flags:0
ret: 0 st: 0 dts:0.000000 pts:-102481911520608.625000 pos:-1 size:22036 flags:1
ret: 0 st:-1 ts:1.894167 flags:1