From patchwork Wed Feb 24 01:41:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 25935 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id A959144BCFA for ; Wed, 24 Feb 2021 03:44:31 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 53266689FB4; Wed, 24 Feb 2021 03:44:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CFC13689E8A for ; Wed, 24 Feb 2021 03:44:23 +0200 (EET) IronPort-SDR: 4IzGvIJMU/CdKZpj2K1C+M5VqIpoMWiImUB5rMpB+nVmWzDQKGRLRexDeJulhq03a7h3U0aYts TyKMvc4IiCzQ== X-IronPort-AV: E=McAfee;i="6000,8403,9904"; a="172671085" X-IronPort-AV: E=Sophos;i="5.81,201,1610438400"; d="scan'208";a="172671085" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Feb 2021 17:44:20 -0800 IronPort-SDR: q6S8WK/FiBkc+CMV3bBPPdnN8ezdxtSZW92jLrhRG/slmgF2ivaTMqyssvfn691OqPACsRQd60 +JbToT2DRIPg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,201,1610438400"; d="scan'208";a="441920702" Received: from f.sh.intel.com ([10.239.159.132]) by orsmga001.jf.intel.com with ESMTP; 23 Feb 2021 17:44:06 -0800 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Feb 2021 09:41:58 +0800 Message-Id: <20210224014158.7302-1-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH v1] avfilter/vf_vpp_qsv: add scale mode option X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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 --- 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)