Commit faa0068a authored by Michael Niedermayer's avatar Michael Niedermayer

avformat: Make duration estimation from pts more robust

Ignore durations which differ significantly from the previous
Fixes Ticket2018
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 9bb54bb6
......@@ -759,6 +759,8 @@ typedef struct AVStream {
int64_t codec_info_duration_fields;
int found_decoder;
int64_t last_duration;
/**
* Those are used for average framerate estimation.
*/
......
......@@ -2342,8 +2342,10 @@ static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
else
duration -= st->first_dts;
if (duration > 0) {
if (st->duration == AV_NOPTS_VALUE || st->duration < duration)
if (st->duration == AV_NOPTS_VALUE || st->info->last_duration<=0 ||
(st->duration < duration && FFABS(duration - st->info->last_duration) < 60LL*st->time_base.den / st->time_base.num))
st->duration = duration;
st->info->last_duration = duration;
}
}
av_free_packet(pkt);
......
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