avformat/utils: limit rfps to values larger than fps
This avoids some nonsense values being produced by totally corrupted input Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
476aceaa22
commit
d600b18f22
@ -756,6 +756,7 @@ typedef struct AVStream {
|
||||
int64_t last_dts;
|
||||
int64_t duration_gcd;
|
||||
int duration_count;
|
||||
int64_t rfps_duration_sum;
|
||||
double (*duration_error)[2][MAX_STD_TIMEBASES];
|
||||
int64_t codec_info_duration;
|
||||
int64_t codec_info_duration_fields;
|
||||
|
@ -2731,6 +2731,7 @@ int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
|
||||
}
|
||||
}
|
||||
st->info->duration_count++;
|
||||
st->info->rfps_duration_sum += duration;
|
||||
|
||||
if (st->info->duration_count % 10 == 0) {
|
||||
int n = st->info->duration_count;
|
||||
@ -2784,6 +2785,10 @@ void ff_rfps_calculate(AVFormatContext *ic)
|
||||
continue;
|
||||
if(!st->info->codec_info_duration && 1.0 < (1001*12.0)/get_std_framerate(j))
|
||||
continue;
|
||||
|
||||
if (av_q2d(st->time_base) * st->info->rfps_duration_sum / st->info->duration_count < (1001*12.0 * 0.8)/get_std_framerate(j))
|
||||
continue;
|
||||
|
||||
for(k=0; k<2; k++){
|
||||
int n= st->info->duration_count;
|
||||
double a= st->info->duration_error[k][0][j] / n;
|
||||
@ -2805,6 +2810,7 @@ void ff_rfps_calculate(AVFormatContext *ic)
|
||||
av_freep(&st->info->duration_error);
|
||||
st->info->last_dts = AV_NOPTS_VALUE;
|
||||
st->info->duration_count = 0;
|
||||
st->info->rfps_duration_sum = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user