mirror of https://git.ffmpeg.org/ffmpeg.git
ffmpeg: Use filter graph output frame rate also for frame duration estimation
Previously the duration was sometimes wrong, this addition limits the value and improves which frames are choosen when reducing the frame rate Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
7b32856011
commit
d3d9a00bcd
8
ffmpeg.c
8
ffmpeg.c
|
@ -895,6 +895,7 @@ static void do_video_out(AVFormatContext *s,
|
||||||
double duration = 0;
|
double duration = 0;
|
||||||
int frame_size = 0;
|
int frame_size = 0;
|
||||||
InputStream *ist = NULL;
|
InputStream *ist = NULL;
|
||||||
|
AVFilterContext *filter = ost->filter->filter;
|
||||||
|
|
||||||
if (ost->source_index >= 0)
|
if (ost->source_index >= 0)
|
||||||
ist = input_streams[ost->source_index];
|
ist = input_streams[ost->source_index];
|
||||||
|
@ -902,6 +903,13 @@ static void do_video_out(AVFormatContext *s,
|
||||||
if(ist && ist->st->start_time != AV_NOPTS_VALUE && ist->st->first_dts != AV_NOPTS_VALUE && ost->frame_rate.num)
|
if(ist && ist->st->start_time != AV_NOPTS_VALUE && ist->st->first_dts != AV_NOPTS_VALUE && ost->frame_rate.num)
|
||||||
duration = 1/(av_q2d(ost->frame_rate) * av_q2d(enc->time_base));
|
duration = 1/(av_q2d(ost->frame_rate) * av_q2d(enc->time_base));
|
||||||
|
|
||||||
|
// We take the conservative approuch here and take the minimum even though
|
||||||
|
// this should be correct on its own but a value too small is harmless, one
|
||||||
|
// too big can lead to errors
|
||||||
|
if (filter->inputs[0]->frame_rate.num > 0 &&
|
||||||
|
filter->inputs[0]->frame_rate.den > 0)
|
||||||
|
duration = FFMIN(duration, 1/(av_q2d(filter->inputs[0]->frame_rate) * av_q2d(enc->time_base)));
|
||||||
|
|
||||||
if (!ost->filters_script &&
|
if (!ost->filters_script &&
|
||||||
!ost->filters &&
|
!ost->filters &&
|
||||||
next_picture &&
|
next_picture &&
|
||||||
|
|
Loading…
Reference in New Issue