[FFmpeg-devel,v1,1/3] fftools: Add thumbnail output to vaapi_h264 decoder

Submitted by Zachary Zhou on April 8, 2019, 7:10 a.m.

Details

Message ID 20190408071010.12955-1-zachary.zhou@intel.com
State New
Headers show

Commit Message

Zachary Zhou April 8, 2019, 7:10 a.m.
This is sample code for reference

HW support for decode+scaling in a single HW command (VDBOX+SFC).
The primary target usage is video analytics, but can be used playback,
transcoding, etc.

For VAAPI -
https://github.com/intel/libva
basically, it allows multiple outputs (in different resolutions) using the decode context in a single call (you can search for “additional_outputs” in va.h).

VAAPI sample code -
https://github.com/intel/libva-utils/commit/957a269f02b00760b7e807643c821ee26abc529b
---
 fftools/ffmpeg_opt.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

Comments

Zachary Zhou April 8, 2019, 7:47 a.m.
> -----Original Message-----

> From: Zhou, Zachary

> Sent: Monday, April 8, 2019 3:10 PM

> To: ffmpeg-devel@ffmpeg.org

> Cc: Zhou, Zachary <zachary.zhou@intel.com>

> Subject: [PATCH v1 1/3] fftools: Add thumbnail output to vaapi_h264 decoder

> 

> This is sample code for reference

> 

> HW support for decode+scaling in a single HW command (VDBOX+SFC).

> The primary target usage is video analytics, but can be used playback,

> transcoding, etc.

> 

> For VAAPI -

> https://github.com/intel/libva

> basically, it allows multiple outputs (in different resolutions) using the decode

> context in a single call (you can search for “additional_outputs” in va.h).

> 

> VAAPI sample code -

> https://github.com/intel/libva-

> utils/commit/957a269f02b00760b7e807643c821ee26abc529b

> ---

>  fftools/ffmpeg_opt.c | 28 ++++++++++++++++++++++++++++

>  1 file changed, 28 insertions(+)

> 

> diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index

> 53d688b764..bfb0f882b5 100644

> --- a/fftools/ffmpeg_opt.c

> +++ b/fftools/ffmpeg_opt.c

> @@ -111,6 +111,10 @@ int filter_nbthreads = 0;  int

> filter_complex_nbthreads = 0;  int vstats_version = 2;

> 

> +int sfc_flags = 0;

> +int sfc_width = 0;

> +int sfc_height = 0;

> +char *sfc_format;

> 

>  static int intra_only         = 0;

>  static int file_overwrite     = 0;

> @@ -1100,6 +1104,13 @@ static int open_input_file(OptionsContext *o,

> const char *filename)

>          av_dict_set(&o->g->format_opts, "scan_all_pmts", "1",

> AV_DICT_DONT_OVERWRITE);

>          scan_all_pmts_set = 1;

>      }

> +

> +    //sfc opt

> +    av_dict_set_int(&o->g->codec_opts, "sfc_flags", sfc_flags,

> AV_DICT_DONT_OVERWRITE);

> +    av_dict_set_int(&o->g->codec_opts, "sfc_width", sfc_width,

> AV_DICT_DONT_OVERWRITE);

> +    av_dict_set_int(&o->g->codec_opts, "sfc_height", sfc_height,

> AV_DICT_DONT_OVERWRITE);

> +    av_dict_set(&o->g->codec_opts, "sfc_format", sfc_format,

> + AV_DICT_DONT_OVERWRITE);

> +

>      /* open the input file with generic avformat function */

>      err = avformat_open_input(&ic, filename, file_iformat, &o->g-

> >format_opts);

>      if (err < 0) {

> @@ -2898,6 +2909,13 @@ static int opt_vstats_file(void *optctx, const char

> *opt, const char *arg)

>      return 0;

>  }

> 

> +static int opt_sfc_format(void *optctx, const char *opt, const char

> +*arg) {

> +    av_free (sfc_format);

> +    sfc_format = av_strdup (arg);

> +    return 0;

> +}

> +

>  static int opt_vstats(void *optctx, const char *opt, const char *arg)  {

>      char filename[40];

> @@ -3746,5 +3764,15 @@ const OptionDef options[] = {

>      { "filter_hw_device", HAS_ARG | OPT_EXPERT, { .func_arg =

> opt_filter_hw_device },

>          "set hardware device used when filtering", "device" },

> 

> +    //sfc opt

> +    { "sfc_flags",    OPT_VIDEO | HAS_ARG | OPT_INT | OPT_INPUT,

> { &sfc_flags },

> +      "set sfc flags", "sfc" },

> +    { "sfc_width",    OPT_VIDEO | HAS_ARG | OPT_INT | OPT_INPUT,

> { &sfc_width },

> +      "set sfc width", "sfc" },

> +    { "sfc_height",   OPT_VIDEO | HAS_ARG | OPT_INT | OPT_INPUT,

> { &sfc_height },

> +      "set sfc height", "sfc" },

> +    { "sfc_format",  OPT_VIDEO | HAS_ARG | OPT_EXPERT ,  { .func_arg =

> opt_sfc_format },

> +        "set sfc format", "sfc" },

> +

>      { NULL, },

>  };


Please ignore this patch, new version will be send out soon.
Sorry for inconvenience. 


> --

> 2.17.1

Patch hide | download patch | download mbox

diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
index 53d688b764..bfb0f882b5 100644
--- a/fftools/ffmpeg_opt.c
+++ b/fftools/ffmpeg_opt.c
@@ -111,6 +111,10 @@  int filter_nbthreads = 0;
 int filter_complex_nbthreads = 0;
 int vstats_version = 2;
 
+int sfc_flags = 0;
+int sfc_width = 0;
+int sfc_height = 0;
+char *sfc_format;
 
 static int intra_only         = 0;
 static int file_overwrite     = 0;
@@ -1100,6 +1104,13 @@  static int open_input_file(OptionsContext *o, const char *filename)
         av_dict_set(&o->g->format_opts, "scan_all_pmts", "1", AV_DICT_DONT_OVERWRITE);
         scan_all_pmts_set = 1;
     }
+
+    //sfc opt
+    av_dict_set_int(&o->g->codec_opts, "sfc_flags", sfc_flags, AV_DICT_DONT_OVERWRITE);
+    av_dict_set_int(&o->g->codec_opts, "sfc_width", sfc_width, AV_DICT_DONT_OVERWRITE);
+    av_dict_set_int(&o->g->codec_opts, "sfc_height", sfc_height, AV_DICT_DONT_OVERWRITE);
+    av_dict_set(&o->g->codec_opts, "sfc_format", sfc_format, AV_DICT_DONT_OVERWRITE);
+
     /* open the input file with generic avformat function */
     err = avformat_open_input(&ic, filename, file_iformat, &o->g->format_opts);
     if (err < 0) {
@@ -2898,6 +2909,13 @@  static int opt_vstats_file(void *optctx, const char *opt, const char *arg)
     return 0;
 }
 
+static int opt_sfc_format(void *optctx, const char *opt, const char *arg)
+{
+    av_free (sfc_format);
+    sfc_format = av_strdup (arg);
+    return 0;
+}
+
 static int opt_vstats(void *optctx, const char *opt, const char *arg)
 {
     char filename[40];
@@ -3746,5 +3764,15 @@  const OptionDef options[] = {
     { "filter_hw_device", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_hw_device },
         "set hardware device used when filtering", "device" },
 
+    //sfc opt
+    { "sfc_flags",    OPT_VIDEO | HAS_ARG | OPT_INT | OPT_INPUT, { &sfc_flags },
+      "set sfc flags", "sfc" },
+    { "sfc_width",    OPT_VIDEO | HAS_ARG | OPT_INT | OPT_INPUT, { &sfc_width },
+      "set sfc width", "sfc" },
+    { "sfc_height",   OPT_VIDEO | HAS_ARG | OPT_INT | OPT_INPUT, { &sfc_height },
+      "set sfc height", "sfc" },
+    { "sfc_format",  OPT_VIDEO | HAS_ARG | OPT_EXPERT ,  { .func_arg = opt_sfc_format },
+        "set sfc format", "sfc" },
+
     { NULL, },
 };