Commit 578688fa authored by Luca Abeni's avatar Luca Abeni

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).

Originally committed as revision 8826 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent bca098f5
...@@ -1483,7 +1483,21 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, offset_t old_offse ...@@ -1483,7 +1483,21 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, offset_t old_offse
int64_t end_time; int64_t end_time;
int64_t filesize, offset, duration; 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 /* we read the first packets to get the first PTS (not fully
accurate, but it is enough now) */ accurate, but it is enough now) */
...@@ -2184,12 +2198,11 @@ static int compute_pkt_fields2(AVStream *st, AVPacket *pkt){ ...@@ -2184,12 +2198,11 @@ static int compute_pkt_fields2(AVStream *st, AVPacket *pkt){
} }
if(st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && st->cur_dts >= pkt->dts){ 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; return -1;
} }
if(pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE && pkt->pts < pkt->dts){ 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", av_log(NULL, AV_LOG_ERROR, "error, pts < dts\n");
pkt->pts, pkt->dts);
return -1; return -1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment