From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 5D2C642904 for ; Mon, 5 Dec 2022 05:44:53 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3CAB868BC29; Mon, 5 Dec 2022 07:44:51 +0200 (EET) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 99D8F68B909 for ; Mon, 5 Dec 2022 07:44:43 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1670219088; x=1701755088; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=nvnZNWoL8bqk84hrAL8gT7/9WLA7HYXAbyWfkDDKGoU=; b=nqGPZ73fY68aCPYFzvC7vXaWXbTkRNxnZQFMPaVBCwTjT2Vcsqb9LdOS +zS+TzWCbiRoYPgvSTQicwm9dMOj/FFXRN3X0R6CWCwmU7Ob8JTYWCs9j srg04UrgZQXXxg3xG3GavmfyvYA59qLy302Et/Xdi4zQ194eD1aiGccsD MQO8PCZSUAFWMnMCt5Khh2iPYu4Xf5lJKl/dd6GMvGdAqXOch+XzDYfx2 jHSNhCqvvDgrXY9fyORC9Qf4q3WRDQQk3AqwXEUUAb9EeN0zQZcY0VIJ9 to7QXiZyYzo/mj6zG8hurLqWacue5uWJARYaQJzhC8TGJZjRsyZEbqxNs Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10551"; a="343255313" X-IronPort-AV: E=Sophos;i="5.96,218,1665471600"; d="scan'208";a="343255313" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Dec 2022 21:44:41 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10551"; a="709130285" X-IronPort-AV: E=Sophos;i="5.96,218,1665471600"; d="scan'208";a="709130285" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmsmga008.fm.intel.com with ESMTP; 04 Dec 2022 21:44:41 -0800 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Sun, 4 Dec 2022 21:44:40 -0800 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Sun, 4 Dec 2022 21:44:40 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Sun, 4 Dec 2022 21:44:40 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Sun, 4 Dec 2022 21:44:40 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZT7EjWYr4MNFpk4p0eN7cxJLo9wgLkttUkMajX0tXSZKBZANGWCYnNvshdMkvY9ipjVctZAMGEC3ST8rHJn7BFpB/lheVPds+nz90xgaThfYoJPjuTIlyEroCWs2iMU+H1ImHDCneSGWfWkT521chlzYHbyreMhOGcexTHwTH93XsvNbggHIgWdI+UmoHOmm5wLL0qmXRHcu4rlwlcc/q5f9ADcc2uytblXYmZivxejww8WEfy75p17wW00K40Q9FvmfvmUAakeZoHLyL1DeBZSzrXlXEkkyHPrp46BDXK5b02NzcUKK4wvLwZaXt8Fp34sV3+/wltEEsKI/W64p0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nvnZNWoL8bqk84hrAL8gT7/9WLA7HYXAbyWfkDDKGoU=; b=aCiGiVQ2NVy6oT9QSBJAOJ4e0coWppuGUoA6LV9j/hHIDbgGGLLG66gwJxUOr+s1xVfw//SfipeLaEofQFdaAJadLBDW5sYbocaORKrOu0HOAR+/l0OkdYQGsjZ3CoIieSSkTevZnqxyGxDl7lig2et0++Z+3G0IfPlfyIMcbbjOAryo1XwnFk31/Z8+satbBQ0npzpCDB1vD8fQi41+5g1B+gWdbvOlIPUwPVPhV47ks25PdXKsm7ZzZGNPRsdBviz4ojs1wHf4AS0qN3iqnYqJPv5lFaJ0/fo+VBzAx3I2NQBtImNhADe/d62aTKfqUMoC0wRFNEnm4WsGEKhumQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BN9PR11MB5515.namprd11.prod.outlook.com (2603:10b6:408:104::8) by BL1PR11MB5462.namprd11.prod.outlook.com (2603:10b6:208:31e::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.14; Mon, 5 Dec 2022 05:44:38 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::e3ef:177c:4008:7ee9]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::e3ef:177c:4008:7ee9%5]) with mapi id 15.20.5880.013; Mon, 5 Dec 2022 05:44:37 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: enable Hyper Encode Thread-Index: AdkAzAKjVmnAiZv4SS+FA1Nk06K3OwHoKSgA Date: Mon, 5 Dec 2022 05:44:37 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.5-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN9PR11MB5515:EE_|BL1PR11MB5462:EE_ x-ms-office365-filtering-correlation-id: 19516b1c-09bc-4ab4-e187-08dad683cbfe x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OtamVjWfRrIMWKa2go9KczgCT/La2mg19TskIiLeD/7+hwRG+MMBZhKChUMvwItkCACzIV5soWirPuiFgNEa8We+sVl6lX0apTY1ZKUphnBHFVJcey3BFAVoL2dNT/Csi4aOvTPkB0ufJV4U5q+uThSFYvSa/0SlYLD9EJQnRZSvrRGyuJLp+JPMTb45loNNqO/dbsbkI0EtqRSemcHdWFbw3iBuf1qOQb3Jc4FGp3Zh1ABhSzXhpK9f2LZfTvkJSSN4B5xCMkulM++XhztxnUU7HjAo7Qg1ftfOoEJFbXz7tVceg0ci62AfF8mmesIcXes6h/ekC/OtCsQQ2GI/YhBIs5Cob5XwfliPuppMeJ/lv7GjHxCKXqB55tNvX7+hpwVMDrCuiMROgLTsRHMWCVHmM3NwVN8RCgrSpE/W197/5cDlXt3K4PSzsrQM/8DVIP6YCQ+IVVn/1olsvBcSaAhEGTEzmwLLdcGIZrveojqvzOQVDIju3ubig9qPzJUjw53DCdvMJ5bEiz5FPz2hJtRrKNGb6QaXGLxn3q1Yb1WMp6H8+3j/uCneB5LexFTPD/R7iEm624DZu2LEN0Hxc4A+8ZYzYgUmJj6AA/NTo44lqzBZ0p+k6GmBBzll2tq8fwbBDHAzg+p/cv3xmDv9yjuFyuZQNT41JRIVS5MR6G+hbJqcgBAF+cHg7fiVjWeXjJmqYQ9rke9q6PZB+CCujflk7hyiWKjqCA9TnffxvZWOS2MBuZK57lsyzn7aSqsX5JHPhts/mlegBHNFqUBbXA/OIk8gHuwatU/U0KUHAzw= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5515.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(346002)(39860400002)(376002)(366004)(396003)(136003)(451199015)(122000001)(83380400001)(86362001)(82960400001)(38100700002)(38070700005)(30864003)(5660300002)(2906002)(41300700001)(8936002)(8676002)(53546011)(186003)(64756008)(6512007)(6506007)(26005)(316002)(19627235002)(2616005)(6916009)(66446008)(76116006)(66946007)(966005)(66476007)(91956017)(66556008)(6486002)(478600001)(71200400001)(66899015)(36756003)(460985005); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SGQ3c09kaG4vZzhSaWxCTHQ3MkNpVDhoSWhIS0NLRUFhY1ZvZjFsNm5IaFJK?= =?utf-8?B?VWNkcnFJUCtTTVdadGw4TDFqUFJYckphNFY5dG9WSFc5SUJQUjRNNnJvTWl0?= =?utf-8?B?cVNmNGs3cktjTjQ1d25mR2U2TmRSYVkzT3Q2SFZHSFZnbXBCNmQ0Y05NOFR6?= =?utf-8?B?K1ZRQzJKcmNkTkM2S0U1VGRibHEyWVI3ZnZ5dGVBZVNNSjc5NWJvVTZuNXdH?= =?utf-8?B?QURmZzU0WHl4Y2lybjRKMzluN0hiVXJ1T0lyMkVKUmlidEpUcGREY1lIVHpY?= =?utf-8?B?ODQrQ0x1K1lxMzJqMHluY0QrTncwOGpTUVUxTDd1d0NUNUUxVzBSdnozdVEv?= =?utf-8?B?Q1JVK1lYb2hMNmRBOERWMkdqMzM3ZkVudjBVN0txTmU1QW5wYzBldWdVdGk5?= =?utf-8?B?aVVtaXlZV0d2eWxSU2tuZWR0MGdWY2xLRnZzWGNHNThWMklDSEtmTTIrMUxy?= =?utf-8?B?bVNUS1gwUEsvOVlMV2JDd1FEeVV6M2VVck41RWIvalVDNjdkc2krMFI0VXcw?= =?utf-8?B?VlRmTk16S3VzZXk5RGViZzBRUVhXei9FVHN2bmdLYzlDdmZpWTdBRDNMTGtl?= =?utf-8?B?Y0Z6TzI5SmF6bC9CbGUvTWd5d2hka3FrSDhkSytHTTMxa3QvT2tDUi83SmVp?= =?utf-8?B?WldEVk9iYnZCZHRvNjFaeG0rYjdEZlI3R0s3a0gxci95L3dPV2UySVRIV3B6?= =?utf-8?B?bTNsRUJKNFViWjVMYlFwYXNvdldRdThvd1ZSTzh3VFc1dFo0dFdrRDJReG00?= =?utf-8?B?SjU3VTQvRWNuN2JQcS9OSjNSQmpLK0Z1SWdybmg3ejM2QU45eHZKeFE2UlNy?= =?utf-8?B?ZVJRb0tOb1p1eEp4TFFzekVtejg1UzdSZkRkRmloa0tuUERac3orbGE5blI0?= =?utf-8?B?ZUdFZTUySndhN2Zuc0ZYZnNXdnVkUWRHRFAwMEhrRlNHMHNsRTh2K1ZFUWh1?= =?utf-8?B?YTdkS0xQQy9RRDBKVnhyR0JneGlMbDNoRytKQnliZGxaNGxqMnIvUnFlejBV?= =?utf-8?B?M0xLSGlmT2d4dDUzaC9Xd0U5dlpIWkFXZllDSStqWjI0c0VleWhvcTRncDYz?= =?utf-8?B?UUM0OGVYZ0hyVjA5Z2xWeVpKenZ3Uml4VnNRSTF0QlN0bkNXVEpmKy9oT1Rk?= =?utf-8?B?UUxRY3pzNVV3WGYray9GNVFmTUlRLyt4T3creHhVbWtiVjQ3VnRwZzM2cTZR?= =?utf-8?B?c2dQbUhUdEI2Ym1Hci9sUjNiMC9BbkVCTXpSNzJnOHdXcHZ3N3J0SGFTS0VI?= =?utf-8?B?ak5oZEJNSjlPMDJWdi8zQStMNW1MZ1JMTktkVTRFcWVIM2x3RjRSb3FDck5X?= =?utf-8?B?NmhzQzdNb3djQWNIa3JiR2ZqSEhLN1Q2aHBGUFNFbVFqRk5aTW9HdU9ZcjVR?= =?utf-8?B?dkVWWE1FRHlPYm82NDUweTVBK3RneVVNc3BwTlZ0Q25VV0dJZ0hyZ1ZJR21F?= =?utf-8?B?M1hSZFpsclRVVVlVdHdVUEVYODgzQ1NrZHpoM2lyT0ZQMzRhWnZmd3VJSS9O?= =?utf-8?B?TzdHYkJmMUlNQVRuK3dGWHlJajdVSmx3T1ZkckpKNENJM1dBd3E4NURrZzRv?= =?utf-8?B?YWgwWHdmb25aR2d2eDgxUXZhdUtqelVWTkF1aEltMjJvOFU2QkRCeTlpc0t6?= =?utf-8?B?U2pLYUhtOFU5SEpmWDlWTmV2Z3o1b21GTWt4MStybitLSXBuTkM3cGRiTHlN?= =?utf-8?B?MGdUblgrNXdQRlhrWXAydVdQakJNZjRuVkZINmZmd0lDNDJ0RjZEejZZaVQx?= =?utf-8?B?alFldVlwN05QMDJoRlNtdFVvS09VMFFvK1llMXZoU2twODRMSWhSYlgvMHNl?= =?utf-8?B?c2dHcTUvbk1jTmdiVkJ1bFlwbUlqQ0h3U3NnQTJhZHJ3TXY1T2t4bzR6WHNS?= =?utf-8?B?VHdsMVFEb3MxWGxHRFo1djZJQ3JRSk8yUGVjZ3Y1eVVJazBsOGc4dWVmNFda?= =?utf-8?B?V1gyWG9sMnZnM2dBQ1hQVEpsT0UwRTU2Q3EyRkh6M1hZd2ptbjBtejJwaXRT?= =?utf-8?B?QTR6TmN0NkJxb0lKeS9QZkszYzV6SmdMU1FZM1lIU3gxbjFKdnZ2RmxtaDhQ?= =?utf-8?B?WW1YM1RlK1NBTjE0a1Uxbit0YXJZOTVzNXYybmRPcCs3bUlmT3pKUVpVYVlO?= =?utf-8?B?Ny92dXozZTRUNTV6YW93aDRsTkROeG1vYk80WlhmQXlicklXYU9UWEp1T2w5?= =?utf-8?B?anc9PQ==?= Content-ID: <1244C999336EA24AAFEB31117C6813C6@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5515.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 19516b1c-09bc-4ab4-e187-08dad683cbfe X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Dec 2022 05:44:37.7260 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: dflmT1hfs4CLKvPUS1/N51GseaYWuo6gCDsvv54hYjOWlvHok1VsxzqydHPRoEv8wYgpfThSGicWeiU7IbXY6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB5462 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: enable Hyper Encode 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: > From dfa35dd22e9178971a47709065ed4e976f57f8ef Mon Sep 17 00:00:00 2001 > From: galinart > Date: Fri, 4 Nov 2022 11:10:52 +0000 > Subject: [PATCH] libavcodec/qsvenc: enable Hyper Encode > > Hyper Encode uses Intel integrated and discrete graphics on one system > to accelerate encoding of a single video stream. > Depending on the selected parameters and codecs, performance gain on AlderLake > iGPU + ARC Gfx up to 1.6x. > > More information: > https://www.intel.co.uk/content/www/uk/en/architecture-and-technology/adaptix/deep-link.html > Developer guide: > https://github.com/oneapi-src/oneVPL-intel-gpu/blob/main/doc/HyperEncode_FeatureDeveloperGuide.md > > Hyper Encode is supported only on Windows and requires D3D11 and oneVPL. > > To enable Hyper Encode need to specify: > -Hyper Encode mode (-dual_gfx on or dual_gfx adaptive) > -Encoder: h264_qsv or hevc_qsv > -BRC: VBR, CQP or ICQ > -Lowpower mode (-low_power 1) > -Closed GOP for AVC or strict GOP for HEVC -idr_interval = 0 used by default > > Depending on the encoding parameters, the following parameters may need > to be adjusted: > -g recommended >= 30 for better performance > -async_depth recommended >= 30 for better performance > -extra_hw_frames recommended equal to async_depth value > -bf recommended = 0 for better performance > > In the cases with fast encoding (-preset veryfast) there may be no > performance gain due to the fact that the decode is slower than the encode. > > Command line examples: > > ffmpeg.exe -init_hw_device qsv:hw,child_device_type=d3d11va,child_device=0 -v > verbose -y -hwaccel qsv -extra_hw_frames 60 -async_depth 60 -c:v h264_qsv -i > bbb_sunflower_2160p_60fps_normal.mp4 > -async_depth 60 -c:v h264_qsv -preset medium -g 60 -low_power 1 -bf 0 > -dual_gfx on output.h265 > > Signed-off-by: galinart > --- > libavcodec/qsvenc.c | 91 +++++++++++++++++++++++++++++++++++++++- > libavcodec/qsvenc.h | 19 ++++++++- > libavcodec/qsvenc_h264.c | 3 ++ > libavcodec/qsvenc_hevc.c | 3 ++ > 4 files changed, 112 insertions(+), 4 deletions(-) > > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c > index d5e9f2d420..96526d4579 100644 > --- a/libavcodec/qsvenc.c > +++ b/libavcodec/qsvenc.c > @@ -169,6 +169,8 @@ do { \ > } \ > } while (0) \ > > +#define MFX_IMPL_VIA_MASK(impl) (0x0f00 & (impl)) > + > static const char *print_ratecontrol(mfxU16 rc_mode) > { > int i; > @@ -197,6 +199,10 @@ static void dump_video_param(AVCodecContext *avctx, > QSVEncContext *q, > mfxExtCodingOption2 *co2 = NULL; > mfxExtCodingOption3 *co3 = NULL; > mfxExtHEVCTiles *exthevctiles = NULL; > +#if QSV_HAVE_HE > + mfxExtHyperModeParam *exthypermodeparam = NULL; > +#endif > + > const char *tmp_str = NULL; > > if (q->co2_idx > 0) > @@ -208,6 +214,11 @@ static void dump_video_param(AVCodecContext *avctx, > QSVEncContext *q, > if (q->exthevctiles_idx > 0) > exthevctiles = (mfxExtHEVCTiles *)coding_opts[q->exthevctiles_idx]; > > +#if QSV_HAVE_HE > + if (q->exthypermodeparam_idx > 0) > + exthypermodeparam = (mfxExtHyperModeParam *)coding_opts[q- > >exthypermodeparam_idx]; > +#endif > + > av_log(avctx, AV_LOG_VERBOSE, "profile: %s; level: %"PRIu16"\n", > print_profile(avctx->codec_id, info->CodecProfile), info- > >CodecLevel); > > @@ -373,6 +384,21 @@ static void dump_video_param(AVCodecContext *avctx, > QSVEncContext *q, > av_log(avctx, AV_LOG_VERBOSE, "NumTileColumns: %"PRIu16"; > NumTileRows: %"PRIu16"\n", > exthevctiles->NumTileColumns, exthevctiles->NumTileRows); > } > + > +#if QSV_HAVE_HE > + if (exthypermodeparam) { > + av_log(avctx, AV_LOG_VERBOSE, "HyperEncode: "); > + > + if (exthypermodeparam->Mode == MFX_HYPERMODE_OFF) > + av_log(avctx, AV_LOG_VERBOSE, "OFF"); > + if (exthypermodeparam->Mode == MFX_HYPERMODE_ON) > + av_log(avctx, AV_LOG_VERBOSE, "ON"); > + if (exthypermodeparam->Mode == MFX_HYPERMODE_ADAPTIVE) > + av_log(avctx, AV_LOG_VERBOSE, "Adaptive"); > + > + av_log(avctx, AV_LOG_VERBOSE, "\n"); > + } > +#endif > } > > static void dump_video_vp9_param(AVCodecContext *avctx, QSVEncContext *q, > @@ -1154,6 +1180,54 @@ static int init_video_param(AVCodecContext *avctx, > QSVEncContext *q) > q->extparam_internal[q->nb_extparam_internal++] = (mfxExtBuffer *)&q- > >extvsi; > } > > +#if QSV_HAVE_HE > + if (q->dual_gfx) { > + if (QSV_RUNTIME_VERSION_ATLEAST(q->ver, 2, 4)) { > + mfxIMPL impl; > + MFXQueryIMPL(q->session, &impl); > + > + if (MFX_IMPL_VIA_MASK(impl) != MFX_IMPL_VIA_D3D11) { > + av_log(avctx, AV_LOG_ERROR, "Dual GFX mode requires D3D11VA > \n"); > + return AVERROR_UNKNOWN; > + } > + if (q->param.mfx.LowPower != MFX_CODINGOPTION_ON) { > + av_log(avctx, AV_LOG_ERROR, "Dual GFX mode supports only low- > power encoding mode \n"); > + return AVERROR_UNKNOWN; > + } > + if (q->param.mfx.CodecId != MFX_CODEC_AVC && q->param.mfx.CodecId > != MFX_CODEC_HEVC) { > + av_log(avctx, AV_LOG_ERROR, "Not supported encoder for dual > GFX mode. " > + "Supported: h264_qsv and hevc_qsv > \n"); > + return AVERROR_UNKNOWN; > + } > + if (q->param.mfx.RateControlMethod != MFX_RATECONTROL_VBR && > + q->param.mfx.RateControlMethod != MFX_RATECONTROL_CQP && > + q->param.mfx.RateControlMethod != MFX_RATECONTROL_ICQ) { > + av_log(avctx, AV_LOG_WARNING, "Not supported BRC for dual GFX > mode. " > + "Supported: VBR, CQP and ICQ > \n"); > + } > + if ((q->param.mfx.CodecId == MFX_CODEC_AVC && q- > >param.mfx.IdrInterval != 0) || > + (q->param.mfx.CodecId == MFX_CODEC_HEVC && q- > >param.mfx.IdrInterval != 1)) { > + av_log(avctx, AV_LOG_WARNING, "Dual GFX mode requires closed > GOP for AVC and strict GOP for HEVC, -idr_interval 0 \n"); > + } > + if (q->param.mfx.GopPicSize < 30) { > + av_log(avctx, AV_LOG_WARNING, "For better performance in dual > GFX mode GopPicSize must be >= 30 \n"); > + } > + if (q->param.AsyncDepth < 30) { > + av_log(avctx, AV_LOG_WARNING, "For better performance in dual > GFX mode AsyncDepth must be >= 30 \n"); > + } > + > + q->exthypermodeparam.Header.BufferId = > MFX_EXTBUFF_HYPER_MODE_PARAM; > + q->exthypermodeparam.Header.BufferSz = sizeof(q- > >exthypermodeparam); > + q->exthypermodeparam.Mode = q->dual_gfx; > + q->extparam_internal[q->nb_extparam_internal++] = (mfxExtBuffer > *)&q->exthypermodeparam; > + } else { > + av_log(avctx, AV_LOG_ERROR, > + "This version of runtime doesn't support Hyper Encode\n"); > + return AVERROR_UNKNOWN; > + } > + } > +#endif > + > if (!check_enc_param(avctx,q)) { > av_log(avctx, AV_LOG_ERROR, > "some encoding parameters are not supported by the QSV " > @@ -1328,12 +1402,19 @@ static int qsv_retrieve_enc_params(AVCodecContext > *avctx, QSVEncContext *q) > .Header.BufferSz = sizeof(hevc_tile_buf), > }; > > - mfxExtBuffer *ext_buffers[6]; > +#if QSV_HAVE_HE > + mfxExtHyperModeParam hyper_mode_param_buf = { > + .Header.BufferId = MFX_EXTBUFF_HYPER_MODE_PARAM, > + .Header.BufferSz = sizeof(hyper_mode_param_buf), > + }; > +#endif > + > + mfxExtBuffer *ext_buffers[6 + QSV_HAVE_HE]; > > int need_pps = avctx->codec_id != AV_CODEC_ID_MPEG2VIDEO; > int ret, ext_buf_num = 0, extradata_offset = 0; > > - q->co2_idx = q->co3_idx = q->exthevctiles_idx = -1; > + q->co2_idx = q->co3_idx = q->exthevctiles_idx = q->exthypermodeparam_idx > = -1; > ext_buffers[ext_buf_num++] = (mfxExtBuffer*)&extradata; > ext_buffers[ext_buf_num++] = (mfxExtBuffer*)&co; > > @@ -1355,6 +1436,12 @@ static int qsv_retrieve_enc_params(AVCodecContext > *avctx, QSVEncContext *q) > q->exthevctiles_idx = ext_buf_num; > ext_buffers[ext_buf_num++] = (mfxExtBuffer*)&hevc_tile_buf; > } > +#if QSV_HAVE_HE > + if (q->dual_gfx && QSV_RUNTIME_VERSION_ATLEAST(q->ver, 2, 4)) { > + q->exthypermodeparam_idx = ext_buf_num; > + ext_buffers[ext_buf_num++] = (mfxExtBuffer*)&hyper_mode_param_buf; > + } > +#endif > > q->param.ExtParam = ext_buffers; > q->param.NumExtParam = ext_buf_num; > diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h > index a7bbb3797e..4a6fa2caed 100644 > --- a/libavcodec/qsvenc.h > +++ b/libavcodec/qsvenc.h > @@ -45,10 +45,12 @@ > #define QSV_HAVE_AVBR 1 > #define QSV_HAVE_VCM 1 > #define QSV_HAVE_MF 0 > +#define QSV_HAVE_HE QSV_VERSION_ATLEAST(2, 4) According to the commit message, D3D11VA is required for HE, #define QSV_HAVE_HE QSV_VERSION_ATLEAST(2, 4) && CONFIG_D3D11VA Thanks Haihao > #else > #define QSV_HAVE_AVBR 0 > #define QSV_HAVE_VCM 0 > #define QSV_HAVE_MF !QSV_ONEVPL > +#define QSV_HAVE_HE 0 > #endif > > #define QSV_COMMON_OPTS \ > @@ -64,6 +66,14 @@ > { "forced_idr", "Forcing I frames as IDR > frames", OFFSET(qsv.forced_idr), AV_OPT_TYPE_BOOL,{ .i64 = > 0 }, 0, 1, VE }, \ > { "low_power", "enable low power mode(experimental: many limitations by mfx > version, BRC modes, etc.)", OFFSET(qsv.low_power), AV_OPT_TYPE_BOOL, { .i64 = > -1}, -1, 1, VE}, > > +#if QSV_HAVE_HE > +#define QSV_HE_OPTIONS \ > +{ "dual_gfx", "Prefer processing on both iGfx and dGfx > simultaneously", OFFSET(qsv.dual_g > fx), AV_OPT_TYPE_INT, { .i64 = MFX_HYPERMODE_OFF }, MFX_HYPERMODE_OFF, > MFX_HYPERMODE_ADAPTIVE, VE, "dual_gfx" }, \ > +{ "off", "Disable HyperEncode > mode", > 0, AV_OPT_TYPE_CONST, { .i64 = MFX_HYPERMODE_OFF }, INT_MIN, > INT_MAX, VE, "dual_gfx" }, \ > +{ "on", "Enable HyperEncode mode and return error if incompatible > parameters during initialization", 0, AV_OPT_TYPE_CONST, { .i64 = > MFX_HYPERMODE_ON }, INT_MIN, INT_MAX, VE, "dual_gfx" }, \ > +{ "adaptive", "Enable HyperEncode mode or fallback to single GPU if > incompatible parameters during initialization", 0, AV_OPT_TYPE_CONST, { .i64 = > MFX_HYPERMODE_ADAPTIVE }, INT_MIN, INT_MAX, VE, "dual_gfx" }, > +#endif > + > #define QSV_OPTION_RDO \ > { "rdo", "Enable rate distortion > optimization", OFFSET(qsv.rdo), AV_OPT_TYPE_INT, { .i64 = -1 }, > -1, 1, VE }, > > @@ -171,7 +181,9 @@ typedef struct QSVEncContext { > mfxExtAV1TileParam extav1tileparam; > mfxExtAV1BitstreamParam extav1bsparam; > #endif > - > +#if QSV_HAVE_HE > + mfxExtHyperModeParam exthypermodeparam; > +#endif > #if QSV_HAVE_OPAQUE > mfxExtOpaqueSurfaceAlloc opaque_alloc; > mfxFrameSurface1 **opaque_surfaces; > @@ -180,7 +192,7 @@ typedef struct QSVEncContext { > > mfxExtVideoSignalInfo extvsi; > > - mfxExtBuffer *extparam_internal[5 + (QSV_HAVE_MF * 2) + > QSV_HAVE_EXT_AV1_PARAM * 2]; > + mfxExtBuffer *extparam_internal[5 + (QSV_HAVE_MF * 2) + > (QSV_HAVE_EXT_AV1_PARAM * 2) + QSV_HAVE_HE]; > int nb_extparam_internal; > > mfxExtBuffer **extparam; > @@ -255,6 +267,7 @@ typedef struct QSVEncContext { > int co2_idx; > int co3_idx; > int exthevctiles_idx; > + int exthypermodeparam_idx; > int vp9_idx; > > int max_qp_i; > @@ -299,6 +312,8 @@ typedef struct QSVEncContext { > // This is used for SEI Timing reset > int old_pic_timing_sei; > int skip_frame; > + // This is used for Hyper Encode > + int dual_gfx; > } QSVEncContext; > > int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q); > diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c > index 0ff7356346..bac337198e 100644 > --- a/libavcodec/qsvenc_h264.c > +++ b/libavcodec/qsvenc_h264.c > @@ -117,6 +117,9 @@ static const AVOption options[] = { > QSV_OPTION_SCENARIO > QSV_OPTION_AVBR > QSV_OPTION_SKIP_FRAME > +#if QSV_HAVE_HE > + QSV_HE_OPTIONS > +#endif > > { "cavlc", "Enable > CAVLC", OFFSET(qsv.cavlc), AV_OPT_TYPE_BOOL > , { .i64 = 0 }, 0, 1, VE }, > #if QSV_HAVE_VCM > diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c > index e042263bf5..5e23ca9647 100644 > --- a/libavcodec/qsvenc_hevc.c > +++ b/libavcodec/qsvenc_hevc.c > @@ -318,6 +318,9 @@ static const AVOption options[] = { > QSV_OPTION_SCENARIO > QSV_OPTION_AVBR > QSV_OPTION_SKIP_FRAME > +#if QSV_HAVE_HE > + QSV_HE_OPTIONS > +#endif > > { "idr_interval", "Distance (in I-frames) between IDR frames", > OFFSET(qsv.idr_interval), AV_OPT_TYPE_INT, { .i64 = 0 }, -1, INT_MAX, VE, > "idr_interval" }, > { "begin_only", "Output an IDR-frame only at the beginning of the > stream", 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, 0, 0, VE, "idr_interval" }, > -- > 2.37.0 > ___ _________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".