From patchwork Thu Mar 10 10:11:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "He, Fan F" X-Patchwork-Id: 34657 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:3486:0:0:0:0 with SMTP id ek6csp574682nkb; Thu, 10 Mar 2022 02:12:11 -0800 (PST) X-Google-Smtp-Source: ABdhPJzRUj6LiR6UC0kLo2SUotKtC8ZYspro0QlmWyniRGWPE4yX4vYLMLoiaOsmhEUQDtzOVGrB X-Received: by 2002:a50:fe89:0:b0:410:f1f7:4983 with SMTP id d9-20020a50fe89000000b00410f1f74983mr3484943edt.135.1646907131511; Thu, 10 Mar 2022 02:12:11 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s5-20020aa7d785000000b00415ee77d84dsi2991944edq.47.2022.03.10.02.12.10; Thu, 10 Mar 2022 02:12:11 -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=Km6aZF7r; arc=fail (body hash mismatch); 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 A81A868B1E2; Thu, 10 Mar 2022 12:12:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3C10B68AFB3 for ; Thu, 10 Mar 2022 12:12:00 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1646907125; x=1678443125; h=from:to:cc:subject:date:message-id: content-transfer-encoding:mime-version; bh=9has9/AEFDuqO4z+wYpY5Sd1MkIgV44tKt0bBgZGBJc=; b=Km6aZF7ru/JB5kOaWpQD3K4/20yCxDcGXwO31tRR6z3Wjra/FV1bVTA/ TKWnABiTVtd50iRQIAdejsosKnHtIC0D18Xu2KcsOmHJE04fgiUhMk+3i Hiuraz4aPfOuVLN3NcVZWz3JoLrTQPY03+aDVYnRfKXo2ezullAGbAFv5 vkQ9uvdh/nZTJZrSgEFtkqeZXPqYT0aqVIzEgKzNBQf+6fAHVB5GasiCa A4l0wlBelOMjK2Rqot7MpNSy6Ij71gW/PUk61ojgaUnEDC/8psPASAsa1 71lHb0SVhZ9izuYLrS9v7kdEQUHmQTDLgw6fiDEfFefNC0ROLnxLxQLMB Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10281"; a="341641513" X-IronPort-AV: E=Sophos;i="5.90,170,1643702400"; d="scan'208";a="341641513" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Mar 2022 02:11:57 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,170,1643702400"; d="scan'208";a="781409689" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga006.fm.intel.com with ESMTP; 10 Mar 2022 02:11:57 -0800 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Thu, 10 Mar 2022 02:11:57 -0800 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) 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.21; Thu, 10 Mar 2022 02:11:56 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) 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.21 via Frontend Transport; Thu, 10 Mar 2022 02:11:56 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.102) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.21; Thu, 10 Mar 2022 02:11:56 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RYj/1ECkKnFezOevl/K1XpUvR25l7xeyaiX6GYxFtcr61TGcPHXR+KfTNnpBI6ltKy8cjaf9KSGO61b4nnz9J7mrSCLR5ngu8x9ln8ovCpeeg2u+HyFnLpKcIKHvMBvdi91Bzh1F0WUqioF/mScZjsNdDdp+DCNcRby5jRZUQoQCfDW26T9DxFmQ9NqxcyWxrHMJ+qR/hG6fNkSMKDMJsGmAErEx4oaPbkaEO12rbYMDq31aPdVDZqOxUPmvsTT15LPla0XXMQ+RRhs2vjLGrildlvCxWIoWt3V/Dd5YXBEScJZLtipYLofpIf+7WB3WfRw8b1MMXmuIRBn4nMkC4w== 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=n+UZUgqfCFMVf2w25PozjAPGi4wDdjCjfftNbUyGvqc=; b=ZbllEzd9Qzxf+5V2voPislRmV4O1aUWS4kVuXBNuheA0yS+YlW5l3a9oOsTQt/o+cdQMesu/pmxviXWVpIz0sPShxKDUNq6L2VEe38pPajBgBcxPYBsFBozSXhHsBjXsNAcfcuA9yMGceBgFPPS9U+qV6BTgRMB9onMLMWx8/rJP4l7gyWI1OmYfKpDjIYcO65GVaMZ5AurU//NtXybeQcgRAsBcIDfSSgVyVzczIjDsNrIXpePIM7kNB1M65qIB2mGPbiiRnh2DsCALaDZSQtGPI7TD7ICAfPMUUIxp5ZwfwPl5X3G9cxM3IWMGu2jUYS/fIwvdH0y0xxhumAV73Q== 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 BYAPR11MB3559.namprd11.prod.outlook.com (2603:10b6:a03:f7::12) by DM6PR11MB2681.namprd11.prod.outlook.com (2603:10b6:5:bd::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5038.16; Thu, 10 Mar 2022 10:11:49 +0000 Received: from BYAPR11MB3559.namprd11.prod.outlook.com ([fe80::3d0b:2441:e68:354b]) by BYAPR11MB3559.namprd11.prod.outlook.com ([fe80::3d0b:2441:e68:354b%4]) with mapi id 15.20.5038.027; Thu, 10 Mar 2022 10:11:49 +0000 From: "He, Fan F" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] libavcodec/qsvenc: enable LowDelayBRC and MaxFrameSizeI/MaxFrameSizeP for more accurate bitrate control Thread-Index: AdgkSmbmThki2vGIQD+K13kXSRrnKA== Date: Thu, 10 Mar 2022 10:11:48 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.401.20 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: d7efc56d-3260-46cb-86e7-08da027e63d8 x-ms-traffictypediagnostic: DM6PR11MB2681: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: VHGTgu2M5zn5XYtXSzCPqOG/iyJbwR8xKx7Udzqoqli0gEdLTGVljkUtRiL3Wtrlbb+/AU/gcRcXVMxTRFXCivblFyB4us8eUm+Q/2hJjJLh1/IqK+WwUnmXrzfouPeghIo60fSmCNAGUILjzoJJ2SZ9h0EfNv/tkLrFVfmMOQfr+r5AEuEv8Jf19Fh0qBzJ7LNQ4RzLfbZFYeTx6+OCzXyRqEmEsMTL6/1ziKhj01V8cfqo2SQS4t3uO4cmfmf6pZE45bF+Lw7ext1OrLy2Wfcn/CHBTTzgo7C9g1o2qGpEfEVgSnmmvHVsIHCEMyFz1IQfr0kVD4lip7EcdvPW6aUQyJfRI1HloFv6exvaGU8taLdM6WT5KcXAafPm5rKnpFSI5hdTNm2C5s8kEvgF1Wcy5sLYiHmBcio4ERfAQwsG6YzWV/q6difHXMEU4vuVRZsF+qd+DYFQGOnSkhcZnaRN/qm0aF++4YW0JowEYXeeh2rAzgYTbRMjkGCKt7LXJ7ZP2DTw6DQoAT1FIVdfKIf0YyrQhFtRQLp8tG7WdKmPB5p+AXsYVY5FIA57qrCpcS/1n70BnnufbQSv8uoT7XgHbsj2zbLJpcquTc8XyYBZPuKgCGkxTe3AXVT5LzVyYc3bp5PUkY7yI4tr0lpqtKkETzwSmFy3fDG+lDHM9JtNgD7cnZOnnckX6T4+XTG1POBokCwLZM8nZIuDHEDRCZxxhusHu9aCuKFwDogRKE/+yrrG8a9/TQdKrVPywdhyFIaT9r/94LR4AP0bZ1i7RHyxInYCXaaTG7w6FZDchgY= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR11MB3559.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(2906002)(86362001)(122000001)(55016003)(38070700005)(6506007)(7696005)(9686003)(82960400001)(107886003)(66476007)(5660300002)(33656002)(966005)(52536014)(38100700002)(8936002)(66946007)(66446008)(8676002)(71200400001)(4326008)(64756008)(66556008)(508600001)(76116006)(83380400001)(316002)(6916009)(26005)(186003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: Nwf3u8Yy67gnlFog0VVTw8W++1ieozX161RAJDTmJ5wDwIhJxk3Nk00aXoaRPWvAt6V+T5zVf+Yb5wlhT1aEfe9VDDNuB6HeXwGVwzlQGNb3o0scvcB7OKtgBm4RoesHe3LJHFEOsZvq/QPsd2+EoP4Twfl8iOmrPY1SKLAZ8mHvXmCG6SxbIE9oZs96Zse6tG9uZ6FDnYP/AT1lReK9cxN3s3WPvpgevKFOc94x3MBqn0rWoyimaCSZ/dajt/UPyC/yJSkqSNjYAdWK4jRDuLt/3Bw1EYwGNUGPjEK4OpXhNU82iqM4VvQlBV77nxDAqhgyBCekF8YepWhBn2VqIrF017xQDavnglzfsgMJVTO+ko2MT96Qt5LoMERG94ChEMct+mquRt8Q2wAfDe+wVqiXrtz5RsGT1YoulsuTBfb9bBzAYsYYhhGeD16PNUym8I3vPlOqGpuAIjP242h5IjoVNmHWa5BVpk8IGTgFA8OrzOVhhbdt2UR4SDptl0vVcDCwKZVH+SUgAZ7rPK7GdMmER8b39Fl6i0JZL+liW8JcEEvdgInfHTTaQZAEnQyFh4Lkv6mJcIuAmuBxbrJZy03rx0b8SKQuh9AxK55gBFc5u9qTInb7dgct6/14JHqw/zAtEWr5KeSeLG/cfprRDoJFSZl2E6IGMioMzjaALmhhf9YP5qeG7W1AwWlEF9zfgPRM0xID4h6089gN/cYc35sU4p+b2Q88heuIFhwOdJzDXjtWFNZh6p57RN7kfDrBL+7wEJMEuMTXfG7hvybLcA7EWK1P3IPj49z0Rmtm8c2QX7clJeA5FuYKlQtLxKd3gK5pR1oAAvfvULl82X8QEojX2NMPQ5Yhl5TofibK7uWrkPwLpXL+MRotXkZGlAQhTjroIQS+4z3FwWH+Qili4rs9n6keDH3tUV03RqGxqCaR0UTHlCgrF+6OFqYWeeLlPyRoyAatWHy5t+fP1QuXgsl6S+oNGdlBcNUYBPscmfF/ZYjhbCq8iSvzv0stHYpPIgf/VZvYyoMWOltQ7TEbu1Q9GnvzHTow9HRj/ZtDu7Xg6nDwMXbd7/Q5qAQ9WKIDEgRdmAcJe+x8CD24f5+GVVdc+OBa8sc05XoiNVGXXeCWgGdRh2zsRMyUKVKigMV3WHc6xNFSXmBceN6Q+JxEnC6xMQE/qJ/V4mLsURJoNcFN+0pWWBPBUjO3PTZulxFYmabM7FU91g77q9QPFqHYor+NihH/wgDacHjxeJKqsN5v6bFSYwoUrs6WlYmzwW1tGB7y73FMUsaQ8/B8BTndba/DgbW0an7Mpy23G+qhuGDq3TywWjfm1I+GWWKNKNMewG549QXgkA51kgQxIRF8wi4a9ELPMff+f0BpevLt2JuAl51ZGpFbYDgcsad+friOxbn57z0S5Kxids/eKLHQHTAPGYV7iUb27DmUBi5VrHfcV3KfVkf0tX0z/Hx93y6MJEm5KZVaxtkTxPIMD/yCPLME1b6m6YigkYbwLQU1L841Tj7pycNdJfHg0mZ0IcjOtUBlZGuro4iZlYcF6hCjvq2M18cfxN2WwD4bZgVEnzVwiB2YgCnBzVr4TX4RtGhcMLrQmeJxUOQOs/W16V/8qA== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR11MB3559.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d7efc56d-3260-46cb-86e7-08da027e63d8 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Mar 2022 10:11:48.9991 (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: 1gS/iSXBa8I+C4UZzUeGKXEoePNc7IHM/zkFOifwgYTiEmIYAaHHaNuX0sPt6L3D9IwTSyE+PKebwKy0kF6q5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB2681 X-OriginatorOrg: intel.com Subject: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: enable LowDelayBRC and MaxFrameSizeI/MaxFrameSizeP for more accurate bitrate control 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: "Ermilov, Dmitry" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: aYucLVzBA3Sh Feature introduction of LowDelayBRC, MaxFrameSizeI and MaxFrameSizeP could be found here: https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md Signed-off-by: Dmitry Ermilov Signed-off-by: Fan F He --- doc/encoders.texi | 26 ++++++++++++++++++++++++++ libavcodec/qsvenc.c | 17 +++++++++++++++++ libavcodec/qsvenc.h | 6 ++++++ 3 files changed, 49 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index 1bd38671ca..47c8577e09 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3264,6 +3264,14 @@ Enable rate distortion optimization. @item @var{max_frame_size} Maximum encoded frame size in bytes. +@item @var{max_frame_size_i} +Maximum encoded frame size for I frames in bytes. If this value is set as larger +than zero, then for I frames the value set by max_frame_size is ignored. + +@item @var{max_frame_size_p} +Maximum encoded frame size for P frames in bytes. If this value is set as larger +than zero, then for P frames the value set by max_frame_size is ignored. + @item @var{max_slice_size} Maximum encoded slice size in bytes. @@ -3280,6 +3288,11 @@ Setting this flag enables macroblock level bitrate control that generally improves subjective visual quality. Enabling this flag may have negative impact on performance and objective visual quality metric. +@item @var{low_delay_brc} +Setting this flag turns on or off LowDelayBRC feautre in qsv plugin, which provides +more accurate bitrate control to minimize the variance of bitstream size frame +by frame. Value: -1-default 0-off 1-on + @item @var{adaptive_i} This flag controls insertion of I frames by the QSV encoder. Turn ON this flag to allow changing of frame type from P and B to I. @@ -3392,6 +3405,14 @@ Enable rate distortion optimization. @item @var{max_frame_size} Maximum encoded frame size in bytes. +@item @var{max_frame_size_i} +Maximum encoded frame size for I frames in bytes. If this value is set as larger +than zero, then for I frames the value set by max_frame_size is ignored. + +@item @var{max_frame_size_p} +Maximum encoded frame size for P frames in bytes. If this value is set as larger +than zero, then for P frames the value set by max_frame_size is ignored. + @item @var{max_slice_size} Maximum encoded slice size in bytes. @@ -3400,6 +3421,11 @@ Setting this flag enables macroblock level bitrate control that generally improves subjective visual quality. Enabling this flag may have negative impact on performance and objective visual quality metric. +@item @var{low_delay_brc} +Setting this flag turns on or off LowDelayBRC feautre in qsv plugin, which provides +more accurate bitrate control to minimize the variance of bitstream size frame +by frame. Value: -1-default 0-off 1-on + @item @var{p_strategy} Enable P-pyramid: 0-default 1-simple 2-pyramid(bf need to be set to 0). diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 9b71487666..d5e2c5fb32 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -374,6 +374,13 @@ static void dump_video_param(AVCodecContext *avctx, QSVEncContext *q, #if QSV_VERSION_ATLEAST(1, 16) av_log(avctx, AV_LOG_VERBOSE, "IntRefCycleDist: %"PRId16"\n", co3->IntRefCycleDist); #endif +#if QSV_VERSION_ATLEAST(1, 23) + av_log(avctx, AV_LOG_VERBOSE, "LowDelayBRC: %s\n", print_threestate(co3->LowDelayBRC)); +#endif +#if QSV_VERSION_ATLEAST(1, 19) + av_log(avctx, AV_LOG_VERBOSE, "MaxFrameSizeI: %d; ", co3->MaxFrameSizeI); + av_log(avctx, AV_LOG_VERBOSE, "MaxFrameSizeP: %d\n", co3->MaxFrameSizeP); +#endif } static void dump_video_vp9_param(AVCodecContext *avctx, QSVEncContext *q, @@ -988,6 +995,16 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) #if QSV_VERSION_ATLEAST(1, 16) if (q->int_ref_cycle_dist >= 0) q->extco3.IntRefCycleDist = q->int_ref_cycle_dist; +#endif +#if QSV_VERSION_ATLEAST(1, 23) + if (q->low_delay_brc >= 0) + q->extco3.LowDelayBRC = q->low_delay_brc ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF; +#endif +#if QSV_VERSION_ATLEAST(1, 19) + if (q->max_frame_size_p >= 0) + q->extco3.MaxFrameSizeI = q->max_frame_size_i; + if (q->max_frame_size_p >= 0) + q->extco3.MaxFrameSizeP = q->max_frame_size_p; #endif } diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 2bda858427..5e07580289 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -91,6 +91,8 @@ { "veryslow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BEST_QUALITY }, INT_MIN, INT_MAX, VE, "preset" }, \ { "rdo", "Enable rate distortion optimization", OFFSET(qsv.rdo), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE }, \ { "max_frame_size", "Maximum encoded frame size in bytes", OFFSET(qsv.max_frame_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, UINT16_MAX, VE }, \ +{ "max_frame_size_i", "Maximum encoded I frame size in bytes",OFFSET(qsv.max_frame_size_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, UINT16_MAX, VE }, \ +{ "max_frame_size_p", "Maximum encoded P frame size in bytes",OFFSET(qsv.max_frame_size_p), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, UINT16_MAX, VE }, \ { "max_slice_size", "Maximum encoded slice size in bytes", OFFSET(qsv.max_slice_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, UINT16_MAX, VE }, \ { "bitrate_limit", "Toggle bitrate limitations", OFFSET(qsv.bitrate_limit), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE }, \ { "mbbrc", "MB level bitrate control", OFFSET(qsv.mbbrc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE }, \ @@ -102,6 +104,7 @@ { "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},\ { "dblk_idc", "This option disable deblocking. It has value in range 0~2.", OFFSET(qsv.dblk_idc), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, VE}, \ +{ "low_delay_brc", "Allow to strictly obey avg frame size", OFFSET(qsv.low_delay_brc), AV_OPT_TYPE_BOOL,{ .i64 = -1 }, -1, 1, VE }, \ extern const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs[]; @@ -173,6 +176,8 @@ typedef struct QSVEncContext { int vcm; int rdo; int max_frame_size; + int max_frame_size_i; + int max_frame_size_p; int max_slice_size; int dblk_idc; @@ -212,6 +217,7 @@ typedef struct QSVEncContext { char *load_plugins; SetEncodeCtrlCB *set_encode_ctrl_cb; int forced_idr; + int low_delay_brc; } QSVEncContext; int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q);