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
This commit is contained in:
parent
bca098f54d
commit
578688fad5
@ -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){
|
|||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user