avformat: Make duration estimation from pts more robust

Ignore durations which differ significantly from the previous
Fixes Ticket2018

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2013-03-04 18:01:32 +01:00
parent 9bb54bb685
commit faa0068a87
2 changed files with 5 additions and 1 deletions

View File

@ -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.
*/

View File

@ -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);