On 2021-08-03 20:13, Linjie Fu wrote:
On Wed, Mar 24, 2021 at 2:15 PM Wang, Fei W <fei.w.w...@intel.com> wrote:

On Mon, 2021-03-22 at 20:12 +0800, Linjie Fu wrote:
On Wed, Feb 24, 2021 at 9:44 AM Fei Wang <fei.w.w...@intel.com>
wrote:
The option allow user to set diffenent scaling mode from
auto/low-power/high-quality.

More details:

https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#mfxExtVPPScaling
Signed-off-by: Fei Wang <fei.w.w...@intel.com>
---
  libavfilter/vf_vpp_qsv.c | 25 +++++++++++++++++++++++--
  1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c
index 5d57707455..effc459d3b 100644
--- a/libavfilter/vf_vpp_qsv.c
+++ b/libavfilter/vf_vpp_qsv.c
@@ -43,8 +43,9 @@

  /* number of video enhancement filters */
  #define ENH_FILTERS_COUNT (7)
-#define QSV_HAVE_ROTATION  QSV_VERSION_ATLEAST(1, 17)
-#define QSV_HAVE_MIRRORING QSV_VERSION_ATLEAST(1, 19)
+#define QSV_HAVE_ROTATION       QSV_VERSION_ATLEAST(1, 17)
+#define QSV_HAVE_MIRRORING      QSV_VERSION_ATLEAST(1, 19)
+#define QSV_HAVE_SCALING_CONFIG QSV_VERSION_ATLEAST(1, 19)

  typedef struct VPPContext{
      const AVClass *class;
@@ -59,6 +60,9 @@ typedef struct VPPContext{
      mfxExtVPPProcAmp procamp_conf;
      mfxExtVPPRotation rotation_conf;
      mfxExtVPPMirroring mirroring_conf;
+#ifdef QSV_HAVE_SCALING_CONFIG
+    mfxExtVPPScaling scale_conf;
+#endif

      int out_width;
      int out_height;
@@ -83,6 +87,8 @@ typedef struct VPPContext{
      int rotate;                 /* rotate angle : [0, 90, 180,
270] */
      int hflip;                  /* flip mode : 0 = off, 1 =
HORIZONTAL flip */

+    int scale_mode;             /* scale mode : 0 = auto, 1 = low
power, 2 = high quality */
+
      /* param for the procamp */
      int    procamp;            /* enable procamp */
      float  hue;
@@ -128,6 +134,7 @@ static const AVOption options[] = {
      { "h",      "Output video height", OFFSET(oh),
AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS },
      { "height", "Output video height", OFFSET(oh),
AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS },
      { "format", "Output pixel format", OFFSET(output_format_str),
AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS },
+    { "scale_mode", "scale mode: 0=auto, 1=low power, 2=high
quality", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 =
MFX_SCALING_MODE_DEFAULT }, MFX_SCALING_MODE_DEFAULT,
MFX_SCALING_MODE_QUALITY, .flags = FLAGS, "scale mode" },

      { NULL }
  };
@@ -454,6 +461,20 @@ static int config_output(AVFilterLink
*outlink)
  #endif
      }

+    if (inlink->w != outlink->w || inlink->h != outlink->h) {
+#ifdef QSV_HAVE_SCALING_CONFIG
+        memset(&vpp->scale_conf, 0, sizeof(mfxExtVPPScaling));
+        vpp->scale_conf.Header.BufferId    =
MFX_EXTBUFF_VPP_SCALING;
+        vpp->scale_conf.Header.BufferSz    =
sizeof(mfxExtVPPScaling);
+        vpp->scale_conf.ScalingMode        = vpp->scale_mode;
+
+        param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp-
scale_conf;
+#else
+        av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale option is "
+            "not supported with this MSDK version.\n");
+#endif
+    }
+
      if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp-
denoise ||
          vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip
||
          inlink->w != outlink->w || inlink->h != outlink->h ||
in_format != vpp->out_format)
--
2.17.1

Looks reasonable, and it seems the default behaviour is QUALITY mode
on all platforms except for APL:
That's right. If scale_mode is set to auto, MSDK will choose different
mode(high-quality/low-power) on different platform.

Applied, thx.

Can you add a docs entry for this filter?

Thanks,
Gyan
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to