From patchwork Fri Feb 3 06:36:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 40235 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp955843pzk; Thu, 2 Feb 2023 22:36:25 -0800 (PST) X-Google-Smtp-Source: AK7set88qrLmT3GpYn3vPPvF7nGasSkh1e6oscAMY6+X6d++Cv75uL/tKuoCrxMHPitW7c9ZEr6m X-Received: by 2002:a50:ec94:0:b0:45a:7d2:9b35 with SMTP id e20-20020a50ec94000000b0045a07d29b35mr8276397edr.0.1675406185332; Thu, 02 Feb 2023 22:36:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675406185; cv=none; d=google.com; s=arc-20160816; b=nuq9uoU8eWemBb96ynbMO13D/efLUbM2ZMwW1HMwgkYaKP9TAdkX9TarlRndZiTPS7 8uvSShZqSaCpfCpO7drrqz7Cn5szwB500c1QsIjTW7aYyYwe7HLyp8pj0KUJ8e3JeGkc t+hn+Rk59bgPe06GLaRWgVQ7FNF64p6RFqGgbAMRBJ0QJNstamifNZWJFhaptTSz7M1T E7yPn3FIt0LaZY4PudpvLztwVb/c3ltXLdoWHQvrtS3NrZ6ngCM51bUKomQoNE3PeiGQ PjJzitiLtig+DqhpwcMOAi/4YIXxi2Eg3vj60hnPOFqWlRfs0GFnK017SQoAo421epU7 nO0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to; bh=fAAKFUcKFX3L63yQe0TcOASl5L0GMgbydv4ry1391F4=; b=AoLecoKykDsFcDN8007SG7q2KrlphzzvcpNC18/CmRMX4ug5M79pfItlOSGjrd0CS4 Mojajk1LW46C57Qyh5x5m9YqMo3z4gflI5HwFpOcSF8ZI37j245dw6QR3ffXdw6U6jnn hFK2TbzJvByPyDsEPpYWxL0icfOLGfqCgdx7KtiGzQKeAb9/L/4vFHVUW10WfFYj42nb O40LFgs/rtV0jTXR2oKg3lHVp+weF74Gh9SDrNgxz4fnt8Fw9Z7w0pI32Kc/UyVps1Hr C/SRyDkp3y4z4LNt0ZLuJ9sE6d418Mxt+QRc9e2a+JW0fX883neO9M0ocyP6Dj1IkdIj EBiA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=nWFV+ASe; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j15-20020a05640211cf00b004a091a995bcsi2270069edw.286.2023.02.02.22.36.25; Thu, 02 Feb 2023 22:36:25 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=nWFV+ASe; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 124F068BE1E; Fri, 3 Feb 2023 08:36:23 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0675168BAA0 for ; Fri, 3 Feb 2023 08:36:15 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675406181; x=1706942181; h=from:to:cc:subject:date:message-id; bh=vIq8cCmzeaNTgFbVQTNLE/70Mu7KxpAMb+ycAy1htvs=; b=nWFV+ASenLerKXqbJ4zkbm639U3bCKRd49HcnQ+ns9YgWhFP/kczppQ4 bCfunnOEUpOz6XKdoIOTEodOVfzpH5joGwqtxgdcSlywTBoxhnXdE7PO3 aUkITOPB8e979ZZ5MUhuULN/xgxU4U+ErX/uWuEsrTgMCBWefevzwS0z0 Z4S58o5dCY/m25128lMe2aMS0UdHprZ/aTDJjYHNDqxUkJKYkVFJB96d4 UxZYWkURFD3QsU9/LGj2c6KPkPMFk4BpLHNhkr62yO8hhoM3QdVUZ6Zc2 Ur9tj8aIQN9au5m5UW75Ay6SQw+NKviMJWAcey57645D6FHTii79cR55m Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10609"; a="393262927" X-IronPort-AV: E=Sophos;i="5.97,269,1669104000"; d="scan'208";a="393262927" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2023 22:36:14 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10609"; a="697963522" X-IronPort-AV: E=Sophos;i="5.97,269,1669104000"; d="scan'208";a="697963522" Received: from xhh-dg164.sh.intel.com ([10.238.5.169]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2023 22:36:13 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Fri, 3 Feb 2023 14:36:03 +0800 Message-Id: <20230203063603.4534-1-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] lavfi/vf_vpp_qsv: add support for new scaling modes X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Haihao Xiang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: SX1qETKdJTHZ From: Haihao Xiang The new modes work on new platforms and are avaialable only for oneVPL. Signed-off-by: Haihao Xiang --- libavfilter/vf_vpp_qsv.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index 65484fa091..ac77f7bb4b 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -504,8 +504,15 @@ static int config_output(AVFilterLink *outlink) if (inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) { if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) { + int mode = vpp->scale_mode; + +#if QSV_ONEVPL + if (mode > 2) + mode = MFX_SCALING_MODE_VENDOR + mode - 2; +#endif + INIT_MFX_EXTBUF(scale_conf, MFX_EXTBUFF_VPP_SCALING); - SET_MFX_PARAM_FIELD(scale_conf, ScalingMode, vpp->scale_mode); + SET_MFX_PARAM_FIELD(scale_conf, ScalingMode, mode); } else av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale & format conversion " "option is not supported with this MSDK version.\n"); @@ -679,10 +686,19 @@ static const AVOption vpp_options[] = { { "height", "Output video height(0=input video height, -1=keep input video aspect)", 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 }, { "async_depth", "Internal parallelization depth, the higher the value the higher the latency.", OFFSET(qsv.async_depth), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, .flags = FLAGS }, - { "scale_mode", "scale & format conversion 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" }, +#if QSV_ONEVPL + { "scale_mode", "scaling & format conversion mode (mode compute(3), vd(4) and ve(5) are only available on some platforms)", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 5, .flags = FLAGS, "scale mode" }, +#else + { "scale_mode", "scaling & format conversion mode", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT }, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, .flags = FLAGS, "scale mode" }, +#endif { "auto", "auto mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_DEFAULT}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, { "low_power", "low power mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_LOWPOWER}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, { "hq", "high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_QUALITY}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, +#if QSV_ONEVPL + { "compute", "compute", 0, AV_OPT_TYPE_CONST, { .i64 = 3}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, + { "vd", "vd", 0, AV_OPT_TYPE_CONST, { .i64 = 4}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, + { "ve", "ve", 0, AV_OPT_TYPE_CONST, { .i64 = 5}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, +#endif { "rate", "Generate output at frame rate or field rate, available only for deinterlace mode", OFFSET(field_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS, "rate" }, @@ -735,9 +751,18 @@ static const AVOption qsvscale_options[] = { { "h", "Output video height(0=input video height, -1=keep input video aspect)", OFFSET(oh), AV_OPT_TYPE_STRING, { .str = "ih" }, .flags = FLAGS }, { "format", "Output pixel format", OFFSET(output_format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS }, - { "mode", "set scaling mode", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT}, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, FLAGS, "mode"}, +#if QSV_ONEVPL + { "mode", "scaling & format conversion mode (mode compute(3), vd(4) and ve(5) are only available on some platforms)", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = 0}, 0, 5, FLAGS, "mode"}, +#else + { "mode", "scaling & format conversion mode", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT}, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, FLAGS, "mode"}, +#endif { "low_power", "low power mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_LOWPOWER}, INT_MIN, INT_MAX, FLAGS, "mode"}, { "hq", "high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_QUALITY}, INT_MIN, INT_MAX, FLAGS, "mode"}, +#if QSV_ONEVPL + { "compute", "compute", 0, AV_OPT_TYPE_CONST, { .i64 = 3}, INT_MIN, INT_MAX, FLAGS, "mode"}, + { "vd", "vd", 0, AV_OPT_TYPE_CONST, { .i64 = 4}, INT_MIN, INT_MAX, FLAGS, "mode"}, + { "ve", "ve", 0, AV_OPT_TYPE_CONST, { .i64 = 5}, INT_MIN, INT_MAX, FLAGS, "mode"}, +#endif { NULL }, };