[FFmpeg-devel] [PATCH] fftools/ffmpeg: add option fps_skip_frames
Guo, Yejun
yejun.guo at intel.com
Fri Oct 23 09:41:06 EEST 2020
> -----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.
More information about the ffmpeg-devel
mailing list