Mercurial > libavformat.hg
changeset 2043:3446000701c4 libavformat
Fix reading PTSs and DTSs in libavformat, by reverting r8465.
Such commit introduced some regressions (see the "Possible bug in reading
PTS/DTS" and "[BUG] no video transcoding" threads on ffmpeg-devel).
author | lucabe |
---|---|
date | Thu, 26 Apr 2007 10:49:48 +0000 |
parents | 27f583883ab4 |
children | fee0acdb8156 |
files | utils.c |
diffstat | 1 files changed, 17 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/utils.c Thu Apr 26 08:42:21 2007 +0000 +++ b/utils.c Thu Apr 26 10:49:48 2007 +0000 @@ -1483,7 +1483,21 @@ int64_t end_time; int64_t filesize, offset, duration; - av_read_frame_flush(ic); + /* free previous packet */ + if (ic->cur_st && ic->cur_st->parser) + av_free_packet(&ic->cur_pkt); + ic->cur_st = NULL; + + /* flush packet queue */ + flush_packet_queue(ic); + + for(i=0;i<ic->nb_streams;i++) { + st = ic->streams[i]; + if (st->parser) { + av_parser_close(st->parser); + st->parser= NULL; + } + } /* we read the first packets to get the first PTS (not fully accurate, but it is enough now) */ @@ -2184,12 +2198,11 @@ } if(st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && st->cur_dts >= pkt->dts){ - av_log(NULL, AV_LOG_ERROR, "error, non monotone timestamps %"PRId64" >= %"PRId64" st:%d\n", st->cur_dts, pkt->dts, st->index); + av_log(NULL, AV_LOG_ERROR, "error, non monotone timestamps %"PRId64" >= %"PRId64"\n", st->cur_dts, pkt->dts); return -1; } if(pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE && pkt->pts < pkt->dts){ - av_log(NULL, AV_LOG_ERROR, "error, pts < dts (%"PRId64" < %"PRId64")\n", - pkt->pts, pkt->dts); + av_log(NULL, AV_LOG_ERROR, "error, pts < dts\n"); return -1; }