diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-03-04 18:01:32 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-03-04 18:01:32 +0100 |
commit | faa0068a8755ff44908974293acc1a0a7fdae9be (patch) | |
tree | 14086856486133ed5d7d35a526ad9b8f5edb876d /libavformat | |
parent | 9bb54bb68529114677b3764aa264ef0bf293557d (diff) | |
download | ffmpeg-faa0068a8755ff44908974293acc1a0a7fdae9be.tar.gz |
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>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/avformat.h | 2 | ||||
-rw-r--r-- | libavformat/utils.c | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 9b72279a89..d23d0e87f1 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -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. */ diff --git a/libavformat/utils.c b/libavformat/utils.c index 1be391fbbf..724cc05366 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -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); |