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 D8F4542C26 for ; Wed, 1 Jun 2022 16:09:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 13FB568B6DC; Wed, 1 Jun 2022 19:09:47 +0300 (EEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 25B7068B668 for ; Wed, 1 Jun 2022 19:09:38 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654099785; x=1685635785; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=HjV2KU6FoZmOZ7C4FK1hxZa9IR2IBDR2nM5z2yDNPe8=; b=Izm9mq4EZVCJlPycIz63CtTeB1EKmOriZRqV0a10/+zSbadO5QGNli+Q wRFW/ejoB1BavuM1QPQ5o45rhw1b/FfPDFp8qoBTnH6tVZHhg633icPG0 ZNN1xGOjh7eeNqaqe9B1wDjj8ocLjl+VZ1WebDkNsTFbIhz44B0tXeGyC vFk9YCRIk7jGzmA6mcwF8Pm+zZDVBQEExwrhLzWLTWIlxwHfqkdcYGUc1 wBPm2OUbARDdjRfFTOO9MioPU7OQfnOVrt0l+iHNc0eYYvuOQ1UJB/W2N YsF/2J3Ot0yrZryVWDpSR7JP9s0U3hIZ/I6z8mOHBmttgpGgU8o+Zgd9t w==; X-IronPort-AV: E=McAfee;i="6400,9594,10365"; a="263276759" X-IronPort-AV: E=Sophos;i="5.91,268,1647327600"; d="scan'208";a="263276759" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jun 2022 09:09:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,268,1647327600"; d="scan'208";a="633601084" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by fmsmga008.fm.intel.com with ESMTP; 01 Jun 2022 09:09:23 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Wed, 1 Jun 2022 09:09:23 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Wed, 1 Jun 2022 09:09:23 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.168) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Wed, 1 Jun 2022 09:09:23 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dD4LsPAiFxyNcUt/I4k0xgZyu4qJLLQ5u1JZLJ8qzkXBSAPnux5arRa3QpMlCkZODsHy9OMzeonZZslxlc29981JXxlueRkoRpsAPCHuOIrUOs4jYSrEBVBjGNtTVhEC/gfk0MYCMp7XJDbohl17EhFvJP6vN5yqVhiAqI4lrikwbYKCMlKfy79uwEyZJL3InawfgDDBqkfb/DVdGQH+/buEWGHvZn4IBJbzpRzoC+EAs2/yL9OBPsI9ZYR9XP2sF3idUdXEKZWi61OjXpx26jRlauC32ZHQ/wnG0EJwyK6uewdVHZZvxbiJERj5StRMy+P7sNFLEZME1kku1qwhJg== 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=HjV2KU6FoZmOZ7C4FK1hxZa9IR2IBDR2nM5z2yDNPe8=; b=XupuYrrrlV4Rw7jeuSBCnzzOjRUdi5ov+PRN7X/jdmYZmkR3s9qQMKYn7YmlG5I/zuUD/gxxnbBIZ4yJDX9nFmsVxcsuIgp/WOhdYIDAXLQXQyQ5DspT5oG545xemW0vtcRnr6OaYDwEkGMp6hB5mhMSKrC5vUom46siCrI9NzfjZcvt7S/ad6sHCIFrtpVYUsot98xVDk4mFGH8XgoIwvuwIPN0ciJADw7HjxD70Jj98CdQn5MOxPJNBL7mU5orCZZa/B4YZaagnm0Y2sPoziyNwJG3WtvUaEFQQz0PAf+up/e+5WT8TtWtLXU/sHk/Ta8mPKgQrnj46ne3eG+b2Q== 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 DM6PR11MB4185.namprd11.prod.outlook.com (2603:10b6:5:195::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.16; Wed, 1 Jun 2022 16:09:21 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::2d06:ec38:937a:da73]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::2d06:ec38:937a:da73%6]) with mapi id 15.20.5314.013; Wed, 1 Jun 2022 16:09:21 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v2] libavcodec/qsvenc: Add min/max QP control options for I/P/B frame Thread-Index: AQHYcDliLR/mqSXI40aJgSnemFqRca06w3QA Date: Wed, 1 Jun 2022 16:09:21 +0000 Message-ID: References: <20220525131341.3203743-1-wenbin.chen@intel.com> In-Reply-To: <20220525131341.3203743-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: 75ac1e6f-43f2-4e8a-7972-08da43e916b7 x-ms-traffictypediagnostic: DM6PR11MB4185: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: 02e6l1jPorEiP2tG46c3SVr1XiMBVfelWyWhk40isHcwejJ6Ghf1mHSjAKcM0tHFI+kU9ssVjRj8V6de1sIXD6le2XhcuETeXQuLcKPxux/f1Zo1+JeaK/u0UYzsz8usVJqgjpqy32EzLVIen3tweGeFhr6VCv2uZF4kjYXV7SSu8ajBT97SNsIUdWM5baTTk2DJ61E5AW/QgzpewsJQbcFnjD0aIbNj6LceDIq76LrOADEh14gd9zBDiE4IZI+/E8snQ0eARxmE/+EvweqrgY7fyWM13Y5+J0FZTpdUrNPy7pnKnEK8SeZFL5nTeWORn9CMkn9CAdPBRTElIDT8NUBXnecRH1wih6WqmlO9/Btct9Sc0/TTtzFpVF4Xp/oxvbjIRu8cj1wyb/bwnpzXcnL7zRsSlcsm+CHZOAXWPsLNM+GO1ULvFb054JdDRIVLtGkFhSOpsrhcOogIQyg/ijAkYe2DgnC1wS+zsjGkfBuNspd5bDZG4Jzwch9w4Ytw/ia8a2ViCTskiS5No0HyCuRgA1QMKMkI0/dCnsI5xUyfCYEYnhg6NcrLNJLLthFWDFd8cqp0aVURfBz11UGVsbCzD+3U2ms+yYgrT0+76iRdx6/2e3I/5hVb+xpctUtwMFj9F8nwu8pZknPeBsIqY4F4LIahn4M5+3T3wfbrYEgUpfRNUY9rlls87yWEWF7KVtKZ1oY9tNahJDQ74tolS8CUyLJbBTZMNxEE4GjnePI= 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:(13230001)(366004)(5660300002)(71200400001)(66946007)(38070700005)(36756003)(66446008)(2906002)(64756008)(66476007)(66556008)(8676002)(76116006)(91956017)(83380400001)(2616005)(26005)(6512007)(508600001)(186003)(82960400001)(122000001)(6506007)(86362001)(6486002)(8936002)(38100700002)(6916009)(316002)(99106002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?NE5wc1REM2Q2djU1WVFnTlE1T2RtLzRSTHNaM1NlVkNhdFVBQm1ZY0t4TE5K?= =?utf-8?B?dWU5Ri94Y2ZjV0dUYWNvdVhCOXI2VEs5WmZsb1BuU1o3czUwelNCSlpwL3Zl?= =?utf-8?B?S1BjL1ZDelVIWVR2WTdMTkVHNnFwdUtqODNtbkVNQmhIUjZEU0tWVkt4MmFj?= =?utf-8?B?UzdDRERVZEF1SEtNdDRMZ2F3V0xIalE4eVhob0duMHZEUVdXRVVlTVltVUVo?= =?utf-8?B?bXlQbm9LcExNZWpEK3R3Z1hlLzkvckc1UURaSVlvU1RpWG1LNUJ3VFBQaDVT?= =?utf-8?B?c1JvY2c0WlR1VzZNMGJtdXRsK2ZHZ1BOTnBvekZlZk82QTJvQ3FFSGFFTUNn?= =?utf-8?B?c0YrOXY2eVdkMElsTXFLYy8wR3YvYzNoTExwOStKMkdJNnl3dVdYTHhvc3p3?= =?utf-8?B?ZG1sOENYRzFwUTZQdm5URDhKZEF0SUxJaHMzYlJBb3lPQWtCY3A2WkNMZmJt?= =?utf-8?B?eFU2SXJLMVhBSU00RUN5YStVMEFaVDlteVd1WDlOc1NoQkNuRkQ2aWYxMkQy?= =?utf-8?B?ZFNGeldQRzZDTk9yTkdkTDB2YnNKcW9lelpXeGIxWVMyMTV2UEpOOFd1R2NK?= =?utf-8?B?aG0yRFl2SUk3eERYTUIwVkoyaWlYNnc0M25PYlBNcXR3bGsyMGc0VkE4Q0tJ?= =?utf-8?B?OUpORFVQck9hYW90aytibWIzdXlPNHBsYmJXMURtSlcraXVxNk15MGQ4aFJQ?= =?utf-8?B?NUk3N2ovM1ZQYkJTT2NiTnQ1L295VitXS0VqbUt3bUZyMm8zQmR3RHJXeFZk?= =?utf-8?B?Mi8xblRkMzNnbUZPWFZKUjNRbGova3lGcjBDNHMrOGhzVndlc2NRejRibnFo?= =?utf-8?B?ZlZvNEFRZFZ6dTRrS2dMdWZvZjRXVkUzTWFZclVFY3BWN2JIRDJaQ3dLc2pw?= =?utf-8?B?NVZqRld3bWlyYVEzQ3pLRXdYL0hOMlJEYlFoMlV1R3k4RTA1YUtPSm95TGtT?= =?utf-8?B?ek5UV3FPL3BXWHJtZ2t2a1VmV0YwMGpHaUVVeklnTStwcEg2RXF4YVo4YmpM?= =?utf-8?B?M2pVRXdBUy83cVRtTzZDN2MvM2dBNW1XeUZwSzMzbnpqN3g3d0hhWHZ3UG4v?= =?utf-8?B?Tk42elBWdkRMTWk0eHRWVlY1S052RE1IM0NvSzhGOUdRdnB4YWtKMi9sVHdC?= =?utf-8?B?N2lwRW9xMWNCbTAvb3QzRldHTmE3SGsxR0docExRa3JZMnVKK3ZTZmpFeWla?= =?utf-8?B?WUZnUjFKZVpOY0NRdllucEdpQVNGL3MvL2hBbU9nSHdTbUVUNTJJMnVjcFVR?= =?utf-8?B?VEFFRFMvajhQWTBOdjJPZTJuWEhrWE8xTThPRHVXZmgwdmoxaWRxVWpkby9W?= =?utf-8?B?Ymk3bEFBK2p6Qi9YaGFJY1VlWTlyUzZxS1NweFRsU1ZnaCs1MDRMU1IxemJ0?= =?utf-8?B?TTBkNzlBOTFPQVFSdGR4Z2ZKdkNEZ3Boc0dzc0QyRVRxMDNqTDhmVmNkQnpS?= =?utf-8?B?aGVTZ2xiVllLTGluK0wxZHVjOWlOaFNBaDY1bGg3alFDaXVJcGlIK0JhRk5P?= =?utf-8?B?Z21XWlJTV2lMS0ZHdVlFKy92aW4wN0gxL0RYNVcyL2s3VGF6SW4yWVRaQ05y?= =?utf-8?B?TkYrbWUwYlY2ckIwZTFOdW12dTVHWFFxSEZwK1JSRm8xaU1mWVRudURFU3lC?= =?utf-8?B?S0hMM1Qwc3gwT2xSNjhLd2gzSGhhNzRkNGgybitrU3JHanRQdEJuNGl6OVl1?= =?utf-8?B?eXZQYmd6azJBejY4YklDdzkwL1JkZWpZSnFiekJVQmFJT1ozZTFwa1ROeG1M?= =?utf-8?B?L3ZFQUJrVkVRcGFtTHpOc1M4TmpyNlhFTTlYOTRHMUdDaFRtQjdhZlRHK25v?= =?utf-8?B?dVVBRFpkVjhDM0RPRGd6bFZ1T0tLNGJVL3pVcUJkVDFvckxFTGpxSmVXZVJU?= =?utf-8?B?VmdVREoyWHFpVlA4WEE0S01zc0FHdUlKUTUxMDRDZWZkWlhZUDlQZVp3NHZ2?= =?utf-8?B?MHdVYmQyU3ZVbmg3emZmRlNiK0xWd1czdUlXcDRZZUE3dXp2OWh2SWdrd0tt?= =?utf-8?B?bGJyOE0xTm9kL1NFS3VSNGgyRmJTZlFzMWxtcnlML0ZXbkNmV3Y0ZjY1bisv?= =?utf-8?B?bGwrN01jbXF3cUpObkFWMHpnejBCTlVvZVZBTm5YQlp6T29vV0lGcmxUVUMv?= =?utf-8?B?NitYb0pvdDdDWFdweGhOOE1jUGRYSkptTHJWWjRTMHEvdHhyMjhoOXlDU0ZJ?= =?utf-8?B?bG9MUGZZRVRlNDNLOWcvVjQ3cVBOOXRqbTY4c2lQRkdRWDdMM3pRTEdid0lH?= =?utf-8?B?Z3U5NmQ1OHpqRU1qY0FMR283SkpLUEp3U0NVaGRyR1FvNnhkV0xnQ2VJWTZ4?= =?utf-8?B?bldpODVEcjNUb0VpZzMvM2pEcFFreFY2bEREcmYyUTdKM3NkZ0dwM3hNQkhV?= =?utf-8?Q?Vw4DoXHt+QS6T4vU=3D?= Content-ID: <887EA404A80D114CAD483C4D28E12F95@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: 75ac1e6f-43f2-4e8a-7972-08da43e916b7 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Jun 2022 16:09:21.3441 (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: sIBsf8dTNm4NygJj85CAvqOSvNisgLS0BApZtfur29+HTGWeUTAJ8griZhMBHWEilVOgetuO5IEVErNaGgc8kQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4185 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v2] libavcodec/qsvenc: Add min/max QP control options for I/P/B frame 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-05-25 at 21:13 +0800, Wenbin Chen wrote: > From: Yue Heng > > To do more accurate QP control, add min/max QP control on I/P/B frame > separately to qsv encoder. qmax and qmin still work but newly-added > options have higher priority. > > Signed-off-by: Yue Heng > Signed-off-by: Wenbin Chen > --- > doc/encoders.texi | 36 ++++++++++++++++++++++++++++++++++++ > libavcodec/qsvenc.c | 21 +++++++++++++++++++-- > libavcodec/qsvenc.h | 15 +++++++++++++++ > libavcodec/qsvenc_h264.c | 1 + > libavcodec/qsvenc_hevc.c | 1 + > 5 files changed, 72 insertions(+), 2 deletions(-) > > diff --git a/doc/encoders.texi b/doc/encoders.texi > index 9796a606fa..e9df36de8f 100644 > --- a/doc/encoders.texi > +++ b/doc/encoders.texi > @@ -3472,6 +3472,24 @@ Multi-Frame Mode. > > @item @var{repeat_pps} > Repeat pps for every frame. > + > +@item @var{max_qp_i} > +Maximum video quantizer scale for I frame. > + > +@item @var{min_qp_i} > +Minimum video quantizer scale for I frame. > + > +@item @var{max_qp_p} > +Maximum video quantizer scale for P frame. > + > +@item @var{min_qp_p} > +Minimum video quantizer scale for P frame. > + > +@item @var{max_qp_b} > +Maximum video quantizer scale for B frame. > + > +@item @var{min_qp_b} > +Minimum video quantizer scale for B frame. > @end table > > @subsection HEVC Options > @@ -3595,6 +3613,24 @@ range is [-63, 63] for 10 bit-depth or [-75, 75] for 12 > bit-depth respectively. > > @item @var{int_ref_cycle_dist} > Distance between the beginnings of the intra-refresh cycles in frames. > + > +@item @var{max_qp_i} > +Maximum video quantizer scale for I frame. > + > +@item @var{min_qp_i} > +Minimum video quantizer scale for I frame. > + > +@item @var{max_qp_p} > +Maximum video quantizer scale for P frame. > + > +@item @var{min_qp_p} > +Minimum video quantizer scale for P frame. > + > +@item @var{max_qp_b} > +Maximum video quantizer scale for B frame. > + > +@item @var{min_qp_b} > +Minimum video quantizer scale for B frame. > @end table > > @subsection MPEG2 Options > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c > index 2b3b06767d..03e9e5523d 100644 > --- a/libavcodec/qsvenc.c > +++ b/libavcodec/qsvenc.c > @@ -828,8 +828,13 @@ static int init_video_param(AVCodecContext *avctx, > QSVEncContext *q) > > if (q->b_strategy >= 0) > q->extco2.BRefType = q->b_strategy ? MFX_B_REF_PYRAMID : > MFX_B_REF_OFF; > - if (avctx->qmin >= 0 && avctx->qmax >= 0 && avctx->qmin > avctx- > >qmax) { > - av_log(avctx, AV_LOG_ERROR, "qmin and or qmax are set but > invalid, please make sure min <= max\n"); > + if ((avctx->qmin >= 0 && avctx->qmax >= 0 && avctx->qmin > avctx- > >qmax) || > + (q->max_qp_i >= 0 && q->min_qp_i >= 0 && q->min_qp_i > q- > >max_qp_i) || > + (q->max_qp_p >= 0 && q->min_qp_p >= 0 && q->min_qp_p > q- > >max_qp_p) || > + (q->max_qp_b >= 0 && q->min_qp_b >= 0 && q->min_qp_b > q- > >max_qp_b)) { > + av_log(avctx, AV_LOG_ERROR, > + "qmin and or qmax are set but invalid," > + " please make sure min <= max\n"); > return AVERROR(EINVAL); > } > if (avctx->qmin >= 0) { > @@ -840,6 +845,18 @@ static int init_video_param(AVCodecContext *avctx, > QSVEncContext *q) > q->extco2.MaxQPI = avctx->qmax > 51 ? 51 : avctx->qmax; > q->extco2.MaxQPP = q->extco2.MaxQPB = q->extco2.MaxQPI; > } > + if (q->min_qp_i >= 0) > + q->extco2.MinQPI = q->min_qp_i > 51 ? 51 : q->min_qp_i; > + if (q->max_qp_i >= 0) > + q->extco2.MaxQPI = q->max_qp_i > 51 ? 51 : q->max_qp_i; > + if (q->min_qp_p >= 0) > + q->extco2.MinQPP = q->min_qp_p > 51 ? 51 : q->min_qp_p; > + if (q->max_qp_p >= 0) > + q->extco2.MaxQPP = q->max_qp_p > 51 ? 51 : q->max_qp_p; > + if (q->min_qp_b >= 0) > + q->extco2.MinQPB = q->min_qp_b > 51 ? 51 : q->min_qp_b; > + if (q->max_qp_b >= 0) > + q->extco2.MaxQPB = q->max_qp_b > 51 ? 51 : q->max_qp_b; > if (q->mbbrc >= 0) > q->extco2.MBBRC = q->mbbrc ? MFX_CODINGOPTION_ON : > MFX_CODINGOPTION_OFF; > > diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h > index fec5e584db..b754ac4b56 100644 > --- a/libavcodec/qsvenc.h > +++ b/libavcodec/qsvenc.h > @@ -100,6 +100,14 @@ > #define QSV_OPTION_LOW_DELAY_BRC \ > { "low_delay_brc", "Allow to strictly obey avg frame size", > OFFSET(qsv.low_delay_brc), AV_OPT_TYPE_BOOL,{ .i64 = -1 }, -1, 1, VE > }, > > +#define QSV_OPTION_MAX_MIN_QP \ > +{ "max_qp_i", "Maximum video quantizer scale for I > frame", OFFSET(qsv.max_qp_i), AV_OPT_TYPE_INT, { .i64 = -1 }, - > 1, 51, VE}, \ > +{ "min_qp_i", "Minimum video quantizer scale for I > frame", OFFSET(qsv.min_qp_i), AV_OPT_TYPE_INT, { .i64 = -1 }, - > 1, 51, VE}, \ > +{ "max_qp_p", "Maximum video quantizer scale for P > frame", OFFSET(qsv.max_qp_p), AV_OPT_TYPE_INT, { .i64 = -1 }, - > 1, 51, VE}, \ > +{ "min_qp_p", "Minimum video quantizer scale for P > frame", OFFSET(qsv.min_qp_p), AV_OPT_TYPE_INT, { .i64 = -1 }, - > 1, 51, VE}, \ > +{ "max_qp_b", "Maximum video quantizer scale for B > frame", OFFSET(qsv.max_qp_b), AV_OPT_TYPE_INT, { .i64 = -1 }, - > 1, 51, VE}, \ > +{ "min_qp_b", "Minimum video quantizer scale for B > frame", OFFSET(qsv.min_qp_b), AV_OPT_TYPE_INT, { .i64 = -1 }, - > 1, 51, VE}, > + > extern const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs[]; > > typedef int SetEncodeCtrlCB (AVCodecContext *avctx, > @@ -209,6 +217,13 @@ typedef struct QSVEncContext { > int co3_idx; > int exthevctiles_idx; > int vp9_idx; > + > + int max_qp_i; > + int min_qp_i; > + int max_qp_p; > + int min_qp_p; > + int max_qp_b; > + int min_qp_b; > } QSVEncContext; > > int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q); > diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c > index cf77ea575b..87b09360cb 100644 > --- a/libavcodec/qsvenc_h264.c > +++ b/libavcodec/qsvenc_h264.c > @@ -114,6 +114,7 @@ static const AVOption options[] = { > QSV_OPTION_B_STRATEGY > QSV_OPTION_DBLK_IDC > QSV_OPTION_LOW_DELAY_BRC > + QSV_OPTION_MAX_MIN_QP > > { "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 a6bf39c148..da2bf457af 100644 > --- a/libavcodec/qsvenc_hevc.c > +++ b/libavcodec/qsvenc_hevc.c > @@ -233,6 +233,7 @@ static const AVOption options[] = { > QSV_OPTION_B_STRATEGY > QSV_OPTION_DBLK_IDC > QSV_OPTION_LOW_DELAY_BRC > + QSV_OPTION_MAX_MIN_QP > > { "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" }, LGTM, will aplly. -Haihao _______________________________________________ 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".