[FFmpeg-devel] [PATCH] fftools/ffmpeg: add option fps_skip_frames
Guo, Yejun
yejun.guo at intel.com
Mon Nov 2 03:41:11 EET 2020
> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of Guo,
> Yejun
> Sent: 2020年10月23日 14:41
> To: ffmpeg-devel at ffmpeg.org
> Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg: add option fps_skip_frames
>
>
>
> > -----Original Message-----
> > From: Guo, Yejun <yejun.guo at intel.com>
> > Sent: 2020年10月15日 16:43
> > To: ffmpeg-devel at ffmpeg.org
> > Cc: Guo, Yejun <yejun.guo at intel.com>
> > Subject: [PATCH] fftools/ffmpeg: add option fps_skip_frames
> >
> > When dnn based filter is used with GPU as the underlying hardware, it
> > is expected that the first model inference will be very slow due to
> > the heavy workload in dnn framework (especially in compiler).
> > Such 'loading' time are usually not added into FPS in graphics games,
> > so, also add option fps_skip_frames to skip some frames in the
> > beginning when calculate FPS.
> >
> > Signed-off-by: Guo, Yejun <yejun.guo at intel.com>
> > ---
> > fftools/ffmpeg.c | 30 +++++++++++++++++++++++-------
> > fftools/ffmpeg.h | 1 +
> > fftools/ffmpeg_opt.c | 3 +++
> > 3 files changed, 27 insertions(+), 7 deletions(-)
> >
> > diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index
> > 84306818a2..ee096f6748
> > 100644
> > --- a/fftools/ffmpeg.c
> > +++ b/fftools/ffmpeg.c
> > @@ -1644,6 +1644,7 @@ static void print_report(int is_last_report,
> > int64_t timer_start, int64_t cur_ti
> > double speed;
> > int64_t pts = INT64_MIN + 1;
> > static int64_t last_time = -1;
> > + static int64_t fps_skip_timer_start = -1;
> > static int qp_histogram[52];
> > int hours, mins, secs, us;
> > const char *hours_sign;
> > @@ -1691,13 +1692,28 @@ static void print_report(int is_last_report,
> > int64_t timer_start, int64_t cur_ti
> > float fps;
> >
> > frame_number = ost->frame_number;
> > - fps = t > 1 ? frame_number / t : 0;
> > - av_bprintf(&buf, "frame=%5d fps=%3.*f q=%3.1f ",
> > - frame_number, fps < 9.95, fps, q);
> > - av_bprintf(&buf_script, "frame=%d\n", frame_number);
> > - av_bprintf(&buf_script, "fps=%.2f\n", fps);
> > - av_bprintf(&buf_script, "stream_%d_%d_q=%.1f\n",
> > - ost->file_index, ost->index, q);
> > + if (fps_skip_frames < 0)
> > + fps_skip_frames = 0;
> > + if (frame_number <= fps_skip_frames) {
> > + fps_skip_timer_start = cur_time;
> > + } else if (fps_skip_frames > 0 && fps_skip_timer_start == -1) {
> > + av_log(NULL, AV_LOG_WARNING, "The first %d frames
> run
> > very quickly, "
> > + "so skip these
> frames
> > to calculate FPS\n", frame_number);
> > + fps_skip_timer_start = cur_time;
> > + fps_skip_frames = frame_number;
> > + } else {
> > + fps = t > 1 ? frame_number / t : 0;
> > + if (fps_skip_frames > 0) {
> > + float newt = (cur_time - fps_skip_timer_start) /
> > 1000000.0;
> > + fps = newt > 1 ? (frame_number - fps_skip_frames)
> > + *
> > 1.0f / newt : 0;
> > + }
> > + av_bprintf(&buf, "frame=%5d fps=%3.*f q=%3.1f ",
> > + frame_number, fps < 9.95, fps, q);
> > + av_bprintf(&buf_script, "frame=%d\n", frame_number);
> > + av_bprintf(&buf_script, "fps=%.2f\n", fps);
> > + av_bprintf(&buf_script, "stream_%d_%d_q=%.1f\n",
> > + ost->file_index, ost->index, q);
> > + }
> > if (is_last_report)
> > av_bprintf(&buf, "L");
> > if (qp_hist) {
> > diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index
> > 8665218dcf..af35dd5429
> > 100644
> > --- a/fftools/ffmpeg.h
> > +++ b/fftools/ffmpeg.h
> > @@ -609,6 +609,7 @@ extern int frame_bits_per_raw_sample; extern
> > AVIOContext *progress_avio; extern float max_error_rate; extern char
> > *videotoolbox_pixfmt;
> > +extern int fps_skip_frames;
> >
> > extern int filter_nbthreads;
> > extern int filter_complex_nbthreads;
> > diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index
> > 19f719e3ff..cfe2b7f8ba 100644
> > --- a/fftools/ffmpeg_opt.c
> > +++ b/fftools/ffmpeg_opt.c
> > @@ -173,6 +173,7 @@ int filter_nbthreads = 0; int
> > filter_complex_nbthreads = 0; int vstats_version = 2; int
> > auto_conversion_filters = 1;
> > +int fps_skip_frames = 0;
> >
> >
> > static int intra_only = 0;
> > @@ -3674,6 +3675,8 @@ const OptionDef options[] = {
> > { "autoscale", HAS_ARG | OPT_BOOL | OPT_SPEC |
> > OPT_EXPERT | OPT_OUTPUT, { .off =
> > OFFSET(autoscale) },
> > "automatically insert a scale filter at the end of the filter
> > graph" },
> > + { "fps_skip_frames", OPT_INT | HAS_ARG | OPT_EXPERT,
> > { &fps_skip_frames },
> > + "the number of frames skipped at beginning when calculate
> > + FPS"},
> >
> > /* audio options */
> > { "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE |
> > OPT_OUTPUT, { .func_arg = opt_audio_frames },
> > --
> > 2.17.1
>
> this patch asks for review, thanks.
ping for review, thanks.
More information about the ffmpeg-devel
mailing list