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 E07FA43682 for ; Tue, 21 Jun 2022 05:00:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8D3F168B0EE; Tue, 21 Jun 2022 08:00:43 +0300 (EEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C67FA68A42A for ; Tue, 21 Jun 2022 08:00:35 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1655787642; x=1687323642; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=5B0hf97hhtvo/Ivhzvc+Nu9o+3aO25awpG8xp1m8qIs=; b=RYa8eYDaDP90gxjdq0ewaDAI3q5KGfm00jO+vqc9qrxvwU6T0lR4ZB8J 5h18QhevxallHKqR7AOtCh5IVJQz+jJZHimLy+IYzQtO1zVXoK1ZISs5H kqHLJBDCRvkSkMeLaYOd4cXBZ7Daqygk599dybs7D1LxcvwyJ4EOj7R7Q wfYPs6NOOMMZ63rr6EXImL8T13rhtm/7GfOUUYpZ0rCdmiuBCwjSmHv/O eEIPRcQ3Yleynbnzt4V1s5IOjzqNTJ4xAseyTQOapNlsumJj/NQwmmpmK 3kZpgFHok6kt2VvpS4QI9GNWvEjH6o5+L3pQHIDjlgcAkXaCbqW4rm1Yb A==; X-IronPort-AV: E=McAfee;i="6400,9594,10384"; a="278797746" X-IronPort-AV: E=Sophos;i="5.92,207,1650956400"; d="scan'208";a="278797746" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jun 2022 22:00:29 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,207,1650956400"; d="scan'208";a="654974910" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga004.fm.intel.com with ESMTP; 20 Jun 2022 22:00:29 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Mon, 20 Jun 2022 22:00:29 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Mon, 20 Jun 2022 22:00:29 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.49) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Mon, 20 Jun 2022 22:00:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NQNUy541YE/80s1ON6IKa213jN2dfFcm/8rKguvzgyohTd4eU5lTDT3L/dWm2Y3jBTH3YmWRy+ipAd48f3UFAzr9DPVmOf5BuqPxo1wGaWTixzTBdLsuWqwcze5X3xHg6AB6RI7B9sFAdWM4oW/4zVnbQ2R+6pBlMTgTw2d5ddU2u5IVdvilKkPxb8USgvMJJ2EpTWK3B4B8LyptXLAoOJXIM/qq1lxx10TW4wuB4dzoo5k1XXH9zF2wx0q2Nw3OlqFF8kvpKDZcvyYZ9sO1aQc3UFRYzlJrUeh++xhFZjH7vPBzDmdyR57YGj57evsprn2S+f62WAEP3zsu0vDIEQ== 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=5B0hf97hhtvo/Ivhzvc+Nu9o+3aO25awpG8xp1m8qIs=; b=PgjCO+xpQWgWGKZzZXcUmcGvFGsrhJI7tC5F8Xkt1MbuQujJZJU4ZVav0kM5jGYzeQoyJP3TQcHd2UV5qaXhfIGSMHNyUqV5PiqPtbu+v5aDV9P/Ts3hykTERvLMQNJ4w/diHawovMa7rHVmlP+HXLAv4uAG7PTB45AIU6wYk7IQNbl4mLoEfKhvd+cg24TYfZS0ujdbyNO0H7wEQgIR8Wm0leo0lfi3wbhmTRp9x5Pbyt0wXkme7gNArk3onyJIc/bYuhQZC30Gfi54pTYqS31yWP7+MSzlmjfzcuw0Xzj0yPtmSwFJDlZlNk8pj+qeAtshxahT8wKwaRRLsRGVqA== 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 DS0PR11MB6399.namprd11.prod.outlook.com (2603:10b6:8:c8::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.22; Tue, 21 Jun 2022 05:00:26 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::65d2:4e26:5290:7b5f]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::65d2:4e26:5290:7b5f%5]) with mapi id 15.20.5353.022; Tue, 21 Jun 2022 05:00:26 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: Enable fixed QP configure in qsv CQP runtime Thread-Index: AQHYgIlI5yiEIuyZwU6jHoI+VeyBzK1ZVpCA Date: Tue, 21 Jun 2022 05:00:26 +0000 Message-ID: References: <20220615072555.4013250-1-wenbin.chen@intel.com> In-Reply-To: <20220615072555.4013250-1-wenbin.chen@intel.com> Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.28.5-0ubuntu0.18.04.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fd13ffae-162c-4b1c-59cf-08da5342f4c4 x-ms-traffictypediagnostic: DS0PR11MB6399:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: M8KB4eSUu2qnHFlux+uaxJdCm0G/jWz+Pfxjx5mvm3aZm8g9F/Af2Z1JowaD81C3GupngMznnVrGm798oHT/KtUp7ej3yZ0cjiy/ejd7c0gcSYVbj0VijiwEuo6KAmMoTG29adFHF5gdHSIfduzEFtFVANspt/zyRTF8a+YqU9srSGE76B/CRmWJZRcS1mUS5me0QZ3ptdw4y/TUaCAPcg1G2MoeBlKJeGMkrxp10yhaP/3idc8TVHLpzsY+R0KuBtJkbQrHeViyhgHFGY4KyFRVZuKNrg6KtipvtaKiel5yaIL/fj23r0Vaf9mi2HdaKBB5OjDhMwOwa+mB788DX0UHCWL0AOcuy/3E4wesoIG+h9Rt6N2lVcNCUTrT3M7uVnSZ/Yc7uuCFkHW7zs/XeQbKDWBTzJEwQ0sTFQysZwHue2c5ENkTk9tDLj3zlYE2ZogIR5GzEy0u6Uh4FprAl2rpRGroP5pSpVJqWX0o+m3rvh29SG0tdwuALg7pC4PJsEzZcYnDOcVeOLJiTC4aWRDBX0HMUIJkEBRDxvYvRoqaQkYQdoLxcKWGScPYscG2tACtL+GRIVJSw3aN1YNQu5/5X+85abOOhZKb0hW4p68A7eLwSEqIFV9mm1kJzjoL8Qml106hglZ/9HWrI/FdgoDHwO0XgSAmOg4/gLDVo++HVLHE5HoupdEnTgJxjaXyDoWj48xw/XocRjEgP+V3AfoLRhD1verP2Vv/WrndlBE= 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:(13230016)(376002)(366004)(136003)(396003)(346002)(39860400002)(66446008)(66946007)(66476007)(64756008)(6486002)(66556008)(91956017)(8676002)(5660300002)(478600001)(86362001)(76116006)(122000001)(6506007)(8936002)(83380400001)(71200400001)(82960400001)(2906002)(36756003)(316002)(38100700002)(186003)(38070700005)(6916009)(41300700001)(2616005)(26005)(6512007)(99106002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?c241VjhjSHdUOGllckhGQlc1czhTYjgxTXNUU09qUWtGc0VwR1B2amdXeEx6?= =?utf-8?B?azAxTzFDT1AxWThlNHhBL1ozRGp0d1BxZ2FGUUUrcFA3eWwyOXZBNGZ4QkNj?= =?utf-8?B?TjlRZ2VXNnI5UTEvTHBBN25VcUZoNEZuVm9mSjZ0OFZEU1k2YUxrVzBTS3U1?= =?utf-8?B?MVQveU5ScUxVU0gwaTRtK04vVmVCQ2xxaGhaOXMzK0FwWHZyaTgrTDVBZmpC?= =?utf-8?B?RCt2V3ZrNHVVTGpsUWZiQTZSYy9JemZkelFySHZKQS9ud2dSM1c3SC9HQk1w?= =?utf-8?B?dTI1MnBUOXl5UnJkTlBlaWhod0tNdmFxaCtjZVBETHQwcW9aeEh6eUxtUXFK?= =?utf-8?B?QmtaRkI3cjZZWWhKb2ZLVUFaSTlPWmhWZDB5WmQ0T3lZSlN1V1d3YWRhcEFy?= =?utf-8?B?Zm5xc09YV1BrSEJnb0J3ditIdXdJc1dYS3JHbkVCWUxUcDc5RDdGVjl4UFZO?= =?utf-8?B?Tk1FQXNGaW1UcFJqaVFJaFc1VnBHMjNsSjMzaHdud0ljVWQycjNaSm1VWkNl?= =?utf-8?B?bUFtTFhacGsremRKSFVhRWowVVZpWEdHTUd6ZVk3enJHc29iZGtIekx3ODdJ?= =?utf-8?B?cEJnSFRnNFJCV3JGRXFBZGt2WDZPV0F3YTVxcmdqcHpqZ0pYTUpRWWM0d29U?= =?utf-8?B?RlFodWM2SlhheE14d0UzWTNrRnp1ZXExdktucjM2OHpVTXJMNnpCdjRkV2Mx?= =?utf-8?B?Y1V6b0h0eGR1b0lIWHJQV2Y1emI4eHczbFhteEFYZ1J5d29LSlNBUmxBWFBP?= =?utf-8?B?Vm9vaEo4N0dVOGYyb0pCTWVkTGRPaktYb1JLWkh1aEpnZ3dhNDE2M2xheXpY?= =?utf-8?B?S04zUFVSZXdIeUJkK3dMTGFmblVCTktldDlUdGxxY3JTSVhSZFhDbVF1SmE0?= =?utf-8?B?OFh3ZkdqMGNFZFQ3UGRGUGI0cnhYNUJmWUh0VE5LQnIzaElDRWFtdHVldFBK?= =?utf-8?B?dzl0bU1xYVdKeFkvNjNhNGNydTB5VCtRYWQ2eVFrbFJHN05kQWRPRWl6eDRv?= =?utf-8?B?MlNSOXgzTlg3azZsZllxcWpiOC8rc1dkSCt3Qk1sV2krdEdDUEpSK2FLV0ZG?= =?utf-8?B?NDVPZXNxTmdta3BzYm1LOHpVbmxKSDJ5b0JTUGRGd1RvdW95ZWREZVE3Slli?= =?utf-8?B?dys2RGMwampSTUM5WEZMZGlmVVBCQnAyRHUrSzRzdVRDQ1pJZDNseWNVT3hy?= =?utf-8?B?U2ppYVpoS1dDM3hUWkJiVHJidFBlOVhxdUpybmZha0lMQVFLdE5Ua0k2S3Bt?= =?utf-8?B?WXloQjdRUFNRN3BFcjQwQjBsanFtcFRCSmxyOFlMemtxMUs3cExoRi9NQm5E?= =?utf-8?B?TUdiTE1wV3dmbDgydmZnZ0praGI0clhZQmdscmhUYmppNkZ1S1RkUkJxNUE5?= =?utf-8?B?NnQvRW5RVzZvL0NxOHgrWExiZ04zUnJQUjIyUE5Nc2k3c1lrcnJJY29nN25j?= =?utf-8?B?b2N1QVhOblBWdmkxajNGOWVrL2pNWGNVZ3Y0cmoySTFyb2ZkdmJCUWp0a0px?= =?utf-8?B?d1MwSGJQb3p2T0EyMk0zNnRaNWZjVmRBWE1wc0V5VEhkaWJMSktBN2pVMW1U?= =?utf-8?B?Syt1bXNMVFNWNWJLb1lSMUdoamFsZ0p0MG9NRmZmVHJsUDE0T01EdEl6bzlX?= =?utf-8?B?UmVzM3dsOVpnZ2NWUWNySDFLOTBhZnp3SUp2QlhOZ2pFSG04NjZ3YzFPZnpN?= =?utf-8?B?ZHBKMHlQZWIxeVhRNVVLelNjQjNQbzdlR3hLQXY2Y3AzanhQamp0ZmVMbFVZ?= =?utf-8?B?K052bEc5RmwwdkRFdFdjMVMwc1BjUmhBUFlzb0N4TWVBa1pwTjluOUNzQUZs?= =?utf-8?B?THQ2VGNjN2JBcHNBNGZ1Y1ZYS3dtLy9lWE56K0J4Vmp1NmRCZ1RJSDI4VUht?= =?utf-8?B?aE9QQ1VTbVlyU3lXSXFzYjBmcWhXNEZ6Z1ZCNjVGbGpNMTRpN05vUjljMmdx?= =?utf-8?B?eTFmdWVmUDczdDhmY2paLzF6dkZJRGZEOTMzSEU5NTJCcVpjbDN3THJYeGs5?= =?utf-8?B?emhmNVIyQmplMGMwbldxaGVmZURDMVIycW5QR0c1SVhzdmNSaWx0UEp0T3VS?= =?utf-8?B?UDhpOTFHdE93SjFpV2Z5YWRYclkxNHJ0U3ErOG1HdXBScGozbUwwanFUcmRY?= =?utf-8?B?YTlsbDMxRTV5akJqU1ZlcjM2eGkyZTZ6clBoT2RLSEk2dHNRZzlneDRyUkVR?= =?utf-8?B?Y1R3UTF6aGplc3pOV2E4dlEvOURvMUZPdis3TEF4TlBPbDNKejlTVXQya0VK?= =?utf-8?B?cms2ZERueUpONjBnNEJNRmJzOTRwTTkwY0VMQm5sbzRtNEFKaUtPNlpVRzBq?= =?utf-8?B?TUhwU29UeWxsRVp3Tm9tUFkzdlV1QWMxdzdQNENLcklFK1ExZEJpWkR2YWc5?= =?utf-8?Q?nOwdxJdQlYXsUNvQ=3D?= Content-ID: <648955613B670F498CBAAA3E90C15536@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: fd13ffae-162c-4b1c-59cf-08da5342f4c4 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jun 2022 05:00:26.5333 (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: FeNsYWqAFyZxpCcofTH5fuYerwQV4YsBcf35GLWMRt8SNpYo+6/mX7MWwQKeCuDaxF7EseVSBLrsT3sqZ6XcnA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR11MB6399 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: Enable fixed QP configure in qsv CQP runtime 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: On Wed, 2022-06-15 at 15:25 +0800, Wenbin Chen wrote: > From: Yue Heng > > Enable dynamic QP configuration in runtime on qsv encoder. Through > AVFrame->metadata, we can set key "qsv_config_qp" to change QP > configuration when we encode video in CQP mode. > > Signed-off-by: Yue Heng > Signed-off-by: Wenbin Chen > --- > doc/encoders.texi | 9 +++++++ > libavcodec/qsvenc.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 68 insertions(+) > > diff --git a/doc/encoders.texi b/doc/encoders.texi > index 9796a606fa..1eb75e199a 100644 > --- a/doc/encoders.texi > +++ b/doc/encoders.texi > @@ -3333,6 +3333,15 @@ Forcing I frames as IDR frames. > For encoders set this flag to ON to reduce power consumption and GPU usage. > @end table > > +@subsection Runtime Options > +Following options can be used durning qsv encoding. > + > +@table @option > +@item @var{qsv_config_qp} > +This option can be set in per-frame metadata. QP parameter can be dynamically > +changed when encode in CQP mode. > +@end table > + > @subsection H264 options > These options are used by h264_qsv > > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c > index 2b3b06767d..52462950be 100644 > --- a/libavcodec/qsvenc.c > +++ b/libavcodec/qsvenc.c > @@ -146,6 +146,14 @@ static const struct { > { MFX_RATECONTROL_QVBR, "QVBR" }, > }; > > +#define UPDATE_PARAM(a, b) \ > +do { \ > + if ((a) != (b)) { \ > + a = b; \ > + updated = 1; \ > + } \ > +} while (0) \ > + > static const char *print_ratecontrol(mfxU16 rc_mode) > { > int i; > @@ -1520,6 +1528,53 @@ static void print_interlace_msg(AVCodecContext *avctx, > QSVEncContext *q) > } > } > > +static int update_qp(AVCodecContext *avctx, QSVEncContext *q, > + const AVFrame *frame) > +{ > + int updated = 0, qp = 0, new_qp; > + AVDictionaryEntry *entry = av_dict_get(frame->metadata, "qsv_config_qp", > + NULL, 0); > + if (entry && q->param.mfx.RateControlMethod == MFX_RATECONTROL_CQP) { > + qp = atoi(entry->value); I think it is better to use strtol() because atoi() doesn't detect errors. See `man atoi` > + av_log(avctx, AV_LOG_DEBUG, "Configure qp: %d\n",qp); > + if (qp < 0 || qp > 51) > + av_log(avctx, AV_LOG_WARNING, "Invalid qp, clip to 0 ~ 51\n"); Is this feature for H264 and H265 only ? > + > + qp = av_clip(qp, 0, 51); > + UPDATE_PARAM(q->param.mfx.QPP, qp); > + new_qp = av_clip(qp * fabs(avctx->i_quant_factor) + > + avctx->i_quant_offset, 0, 51); > + UPDATE_PARAM(q->param.mfx.QPI, new_qp); > + new_qp = av_clip(qp * fabs(avctx->b_quant_factor) + > + avctx->b_quant_offset, 0, 51); > + UPDATE_PARAM(q->param.mfx.QPB, new_qp); > + av_log(avctx, AV_LOG_DEBUG, > + "using fixed qp = %d/%d/%d for idr/p/b frames\n", > + q->param.mfx.QPI, q->param.mfx.QPP, q->param.mfx.QPB); > + } > + return updated; > +} > + > +static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, > + const AVFrame *frame) > +{ > + int needReset = 0, ret = 0; > + > + if (!frame) > + return 0; > + > + needReset = update_qp(avctx, q, frame); > + if (needReset) { > + q->param.ExtParam = q->extparam_internal; > + q->param.NumExtParam = q->nb_extparam_internal; User might provide external parameters in avctx->hwaccel_context. Are these parameters not required in MFXVideoENCODE_Reset() ? Thanks Haihao > + av_log(avctx, AV_LOG_DEBUG, "Parameter change, call msdk reset.\n"); > + ret = MFXVideoENCODE_Reset(q->session, &q->param); > + if (ret < 0) > + return ff_qsv_print_error(avctx, ret, "Error during resetting"); > + } > + return 0; > +} > + > static int encode_frame(AVCodecContext *avctx, QSVEncContext *q, > const AVFrame *frame) > { > @@ -1630,6 +1685,10 @@ int ff_qsv_encode(AVCodecContext *avctx, QSVEncContext > *q, > { > int ret; > > + ret = update_parameters(avctx, q, frame); > + if (ret < 0) > + return ret; > + > ret = encode_frame(avctx, q, frame); > if (ret < 0) > return ret; _______________________________________________ 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".