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:
parent
9bb54bb685
commit
faa0068a87
@ -759,6 +759,8 @@ typedef struct AVStream {
|
|||||||
int64_t codec_info_duration_fields;
|
int64_t codec_info_duration_fields;
|
||||||
int found_decoder;
|
int found_decoder;
|
||||||
|
|
||||||
|
int64_t last_duration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Those are used for average framerate estimation.
|
* Those are used for average framerate estimation.
|
||||||
*/
|
*/
|
||||||
|
@ -2342,8 +2342,10 @@ static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
|
|||||||
else
|
else
|
||||||
duration -= st->first_dts;
|
duration -= st->first_dts;
|
||||||
if (duration > 0) {
|
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->duration = duration;
|
||||||
|
st->info->last_duration = duration;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
av_free_packet(pkt);
|
av_free_packet(pkt);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user