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 9E31043681 for ; Tue, 21 Jun 2022 06:56:07 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E37E468B6A2; Tue, 21 Jun 2022 09:56:04 +0300 (EEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2759A68B683 for ; Tue, 21 Jun 2022 09:55:57 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1655794563; x=1687330563; h=from:to:subject:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version; bh=4E/maIv8JqUVoOb4J2BCadBASZhaDWde6xLBIm3fJFQ=; b=e1B5VtoHKWNtJZYHXHxt/9qiB61/CKN+0ZraOa57g1cam6XoSuRIt2w1 bf5XpUuEVULgxXiCBgYZ0F3iHBXVhQeiSAkBLmvKM765fkRAmrqW1UqeE Wf8dYsQBNQIZm4NVC31GarG8dKKMfB0DnpjvUjgP3MKwvlto+eM4QXIox 63KwnRuFSHg7InaAheifngh6vGpYVjTyT+LD94M+BhMhEeLP0Ur9I8SDf 5gfXHBi4Nm3ubJC4r/ge2iuvblKbhpmyinsqPUUgy9CmFfFZqUyQljcxE QP2NqgD4cLlsxBclPMWMb18xprVaWb8hnIAV9I8D0/zj5KyFtf9U76c6q A==; X-IronPort-AV: E=McAfee;i="6400,9594,10384"; a="260476738" X-IronPort-AV: E=Sophos;i="5.92,209,1650956400"; d="scan'208";a="260476738" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jun 2022 23:55:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,209,1650956400"; d="scan'208";a="729707426" Received: from orsmsx605.amr.corp.intel.com ([10.22.229.18]) by fmsmga001.fm.intel.com with ESMTP; 20 Jun 2022 23:55:55 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX605.amr.corp.intel.com (10.22.229.18) 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 23:55:54 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) 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.2308.27 via Frontend Transport; Mon, 20 Jun 2022 23:55:54 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.173) by edgegateway.intel.com (134.134.137.103) 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 23:55:39 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=V1nLaHxxqfBx8Wb2js94ObpX4qNLIoiFgHK0gFYTBSbkgkq/1hYFLJaH5fAgShnqVf9BxpJhcBaHPjKlgImyNcbgX/m9an6wlgxdWERPA4+ooma6nobObvTWahl7XY9J3/l34giSxBwuWxTFpq+QVBzo9WEQeYu1A/y6EAIS5WsGfp035qEMbQKZEwjulmHnYTBUE5vfhy6CzCEJwuBSCrr+9xFZLG4YIoJ2q09HP0YILj0AC2HWyV9Nb9DO75ssvyA0vwkZdC1BtaHzKCpOvmvvKIjWH7O3PVtGIdC9DBUCTDRwukcnbHG2rgr1/97dywGXsNGjpn4JFFhewsOAUQ== 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=Z7VHCvuPlq+gfxOuwS1f9ou2hIZyw1HDEsuEUA5ceAk=; b=WdJ4xRpasjnZa4BNJdhfdKWwO8dh6/xHQzO5evgcjnhBLYgeUycAq8Styuj3cNWE4ya50GmFje/3r32SjuVOgmPs0nVb7xPqtBP7zdY9C4syXpqy0PeADRQWjDfYEjq+BT5OWhu8M0NQrkHj0v9+r/7VcuVvz0a1TUPoA6I+okuDGUHIkUDkVqkMd5oW6KtPTa30kxqF81j3S7X7WLd3jCXn5iton2tr6T/sSBXdrIH7fnzLrAsd2K0cdDp38dgAfvaye0ioSBJwO4/5ndwcfyE8PnbpllEWxHfVKxHeavNTt2Kji5kWSjq9v5poWM+HOcbsTqor7SIxQJFlowGMTQ== 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 BY5PR11MB3879.namprd11.prod.outlook.com (2603:10b6:a03:18f::17) by DM4PR11MB6334.namprd11.prod.outlook.com (2603:10b6:8:b5::18) 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 06:55:38 +0000 Received: from BY5PR11MB3879.namprd11.prod.outlook.com ([fe80::8d4:a65e:72f0:aa41]) by BY5PR11MB3879.namprd11.prod.outlook.com ([fe80::8d4:a65e:72f0:aa41%7]) with mapi id 15.20.5353.022; Tue, 21 Jun 2022 06:55:38 +0000 From: "Chen, Wenbin" To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: Enable fixed QP configure in qsv CQP runtime Thread-Index: AQHYgIm00L95LGlrrEq5OnQeZ/kJg61ZVpAAgAAeMpA= Date: Tue, 21 Jun 2022 06:55:38 +0000 Message-ID: References: <20220615072555.4013250-1-wenbin.chen@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.6.500.17 dlp-reaction: no-action 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: d19df21a-b0e3-4723-7942-08da53530c9f x-ms-traffictypediagnostic: DM4PR11MB6334: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: 70N8Qe783maojDVA5mkZcSdd8QBrezAvgcfEJm5pyhuE9FvawVvlnKLKL7E9etoIjNiMfJnAmSLWE6qu+uH0Pz56twYLIxu/1MS+JZmOSFzYlmbubzKFECCmjQ7nBpHrjO2qJs15K9B2hfPVoUyhyDbog+UZ20eMNQXlJ1PMUmUqeYQ3KMAf045YtBXxQIX1rZ2qUf3x9nTdU0BKA3zrLi7S9JQ+xuJZU0VhvNhdzDHabezovnZRRY6XtMhXrd3YfZ0LDjF6wsuaJsaFWMbl609A8A4yfgEj4pBflNZqnyiUnCJ9v7+O7il/4tyCkhfOBmWTGLpSFkXG+QhMxRFXhgV7EUejmHJ6EoY8q0Fc43KB2fme769nLvBJs0VhyjVHsq9uTS+46R9RZ/q+dn2tlW7WaPzpgKCJhuFg1kciTTsvrkUcDy3IgflTYg/DNwizQe2flu17WOvRPBH5YEdf4x2RwfH9nNpuKCvxmfou4zu5PIJ9iRRfyPj5alqaxM1f7ojGbmzq9xm/5SnB0+6RKVA4zCSDVlZBHti4f0wzbIqZQ3eMfWLW2pSIhvJSWcqbE/fwyGbB6u9cECbQx7WPAJH/OFLczgLehb/kkYFGRqHHA7T+hdcLbEj8kDhHMQM7vEQ8Zz4DaqL3K+nnIpCSWztcpg/9BspPKlzU3KYL7HFd4X/MBTy+GOdquxqBcNaMXNHddEUz+tGfOyEqQa3VGgold6jlQ6fQZiXBQN3Iql9fFi3Jl5jGWzmJTKs7IeLNMQojw9vNVxKletdc6cR9dez89DbVJl8XrvmuWBThsy8= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR11MB3879.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(376002)(136003)(346002)(366004)(396003)(39860400002)(82960400001)(186003)(7696005)(6506007)(86362001)(9686003)(41300700001)(26005)(122000001)(38100700002)(478600001)(38070700005)(8936002)(83380400001)(76116006)(33656002)(52536014)(55016003)(5660300002)(2906002)(8676002)(316002)(966005)(71200400001)(66556008)(6916009)(66446008)(66476007)(64756008)(66946007); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?s2BYiDoP8ZRP6tVO1vTc7RzAKf2c28mN7JRl5OURhX5kWLyAzrYPcg0D4tpO?= =?us-ascii?Q?1zg/gfyw2+kM6FWhUmGAHLr0n0ahbi0ewlWhgPi5RZ1CZIqyBTeI5tfDRph8?= =?us-ascii?Q?wBDQoFmlCDhV8aehfH8jh0xG182VdqIH3PCM6PMjAb9ZBVlagNMWAPLVav8u?= =?us-ascii?Q?LQmvBiXnxFM346QbM4WdV6e7+zhUnQWgdsFCIchL080eTfEk9iMyuzwCTwpA?= =?us-ascii?Q?iS717vxst2CYRsYLEy5ZXqrc21FX2mwCXy6kjoQnRrRFBGS04+1++ED2eHok?= =?us-ascii?Q?CxwbiWF2i+ZaTRlk4igePDvBctBPKv4tdKX6Iud2IctRzjsiXlv2dI+5RRCa?= =?us-ascii?Q?BdK6VluL2QXU063eG1rd63Yzc+VpsTo9JwKpr0uP7coCcghYz8XIjG1rakKY?= =?us-ascii?Q?jKnIH3ucrrD4QaNCa8b80cX4evsn+/TNPONJciwZKDgZs3BjAZnh4ykhOwSm?= =?us-ascii?Q?AJGgha/qVWL+dAxh4qhGbk6SgQFlnN0yoJEfHhKKzzrUxUek/5uWwd4TphYg?= =?us-ascii?Q?CAvNGsld2P+T0pjxGS9CuJW9G6ScBJ0cbTav0Q3OKLora8U4Z/vFWAOuDoiV?= =?us-ascii?Q?p+Tx4aXMizQVSRVYXBaCuSDYoMCf4E2ltYfHewdPKER9pEGVftg54giD9XPb?= =?us-ascii?Q?4KdvizUy4bjn+eT4khOQT5YWuci9DKXN3rm7rtnwtPLb5/T65hXaOzD53ZoE?= =?us-ascii?Q?LuG5hjfbGbDZo5BEg+OBsWb0pbfFGBT0J/5oD2ShPxO1TMoZi2/oM2vjmh4n?= =?us-ascii?Q?RCabze+/9l/0UYSkFFlnxrErAOQQ5Me6s3C8jIIURtMiH+OteYeJrM6OWu98?= =?us-ascii?Q?hnfc6WjPSSGde9woneP7C1wItB4fuOp42inm3uTRLxotgMv8FxQEY7bDuAaI?= =?us-ascii?Q?lujV51b5EIhsja/JtY8GR/YjmDC18IqgD/WmTLiipPMrpv8qJfaXYd7/d7Vc?= =?us-ascii?Q?eqxjLg0lY86zsMP83IL1FEz5rckftzmPfJkFp0ZJKzwRZ/BNr/ovyNwNUdqz?= =?us-ascii?Q?HRj6rF5Jbm2HLMtlio7x0B/4WFoCxIN88GOCBQCWqYCepd+PafiS5c32tOca?= =?us-ascii?Q?+I8RTFY7xUfTs3o8RDuWusauscNiSzedlBjMXmdM+aFFoGxcfLqJTTQkIw4z?= =?us-ascii?Q?lggC8Mt3E/7dkbIjzwb9nWU2pjPPPgBmQUW4us7flps8m+N2x4M8D9wuFHim?= =?us-ascii?Q?EiNmdLDj88ASU1NLo7REn6B4mz7im+e+N74wOwoMxTRf+X5UHcwnc0LFzOzu?= =?us-ascii?Q?/6l2Rn7JcvMK9VT0FKhwIKmvd8+4K/96LexpFIFIQnzt+Ed1/NiSsYfte+i1?= =?us-ascii?Q?q64SygZrUdKQeTQGh9No6ix2eMimUxIyLVZmaybQIsXt8L6C9drzbzNzLBQs?= =?us-ascii?Q?7I47q94HwpNfXf6v9EOsceYR7s9y+b7hZFFgxk/0LVJnL4rehm9joxzo934D?= =?us-ascii?Q?gkheBj+zRGgIgemO7YwpUIQr+fUo/+oQg7YTc1JgdRO66qJ0p2wAgXQsJMbP?= =?us-ascii?Q?ycJrFjUDy4dgNFICxvkU9mQMtEh7DaLW7atNdbJDGyujR1TdwpzmbuLwrSxe?= =?us-ascii?Q?4EP17j+KPpnEO7dDpZbbqyVGvB0iDYIXbN4rRQcOWlsTSuCPiIjsFKdkE3Qy?= =?us-ascii?Q?CFbGzXVh7bbvEOZv5ib6P/KT9TgtcE4hmAP12Tc/AZKkRubTNmRt5cZrrPic?= =?us-ascii?Q?WTNYuzb3WbdTDqlRatNoxDP/7yadiNDWWTTOB62TBr872aXprWYaPv3cK/mc?= =?us-ascii?Q?DThEhLi4oA=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR11MB3879.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d19df21a-b0e3-4723-7942-08da53530c9f X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jun 2022 06:55:38.4890 (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: 5IerTw+mzrByXgcty6mNAbAFYaTA/7qoL1oh+c+UjaKVI75j/9U6zZgFtTu59utK41U6zN4rvqTyYhH9DSOfKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR11MB6334 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` Will change to strtol(). > > > > + 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 ? I will add a codec check here. > > > + > > + 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() ? Miss the user provided parameters. I will add them as well. > > Thanks > Haihao Thanks for your review. I will fix these in new patch. Thanks Wenbin > > > + 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". _______________________________________________ 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".