summaryrefslogtreecommitdiff
path: root/libavformat/utils.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-03-04 18:01:32 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-03-04 18:01:32 +0100
commitfaa0068a8755ff44908974293acc1a0a7fdae9be (patch)
tree14086856486133ed5d7d35a526ad9b8f5edb876d /libavformat/utils.c
parent9bb54bb68529114677b3764aa264ef0bf293557d (diff)
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/utils.c')
-rw-r--r--libavformat/utils.c4
1 files changed, 3 insertions, 1 deletions
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);