From patchwork Mon Mar 21 08:33:14 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: 34877 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:ed11:0:0:0:0 with SMTP id hi17csp1452423nkc; Mon, 21 Mar 2022 01:33:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzBytMh8cGvu38kNqjVsGnc3KIJxwdE4ysuryTZKEUnoHaibxOOqOtdCf9Osf2ucEDQGQ0F X-Received: by 2002:a17:907:6e1b:b0:6df:9ebd:f45f with SMTP id sd27-20020a1709076e1b00b006df9ebdf45fmr17812025ejc.362.1647851616319; Mon, 21 Mar 2022 01:33:36 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d15-20020a170906174f00b006df76385df6si6306202eje.662.2022.03.21.01.33.35; Mon, 21 Mar 2022 01:33:36 -0700 (PDT) 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=eGaJmSv3; 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 C925E68B172; Mon, 21 Mar 2022 10:33:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DBFCA68A5B3 for ; Mon, 21 Mar 2022 10:33:23 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1647851609; x=1679387609; h=from:to:cc:subject:date:message-id: content-transfer-encoding:mime-version; bh=jHgl7KYfFlFLwwfCvxZE7uiUU+A3RMstoyamN/ZEEjM=; b=eGaJmSv31qOgP1Xt6OFtpQmhXqZVfe/GRDyBt89k953RO4x11N3fRAS8 kAEe+2NBlBro5HKOkaHWVCUANkDi6lxOp7eNg/nxt+euuK5SGy2gUWf7s ZMTC+LXe7BKbHaPqluNABX1JFvt3Zjy3Y0N8QWk4P61TAbiNSLCK7XKZ4 QzkUgQdpL1j+7qTeuwCm+suV/1qYQPHMd+YbptH0skHqx5jQCwWhsv2cx PLbB6MdoqOPy9rnn2Ay5+MPzGWR6Lmh+qTYJPNOyVygJALIlXzq/6EpQY o1nJaUbJ/VBA1XVrnYn+9JAb4P4ei9x0iwfxyJUpO+ZYnCc1zxzXrFcMO Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10292"; a="320704541" X-IronPort-AV: E=Sophos;i="5.90,198,1643702400"; d="scan'208";a="320704541" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Mar 2022 01:33:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,198,1643702400"; d="scan'208";a="514862906" Received: from orsmsx606.amr.corp.intel.com ([10.22.229.19]) by orsmga002.jf.intel.com with ESMTP; 21 Mar 2022 01:33:21 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Mon, 21 Mar 2022 01:33:20 -0700 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) 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.21; Mon, 21 Mar 2022 01:33:20 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx607.amr.corp.intel.com (10.22.229.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21 via Frontend Transport; Mon, 21 Mar 2022 01:33:20 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.177) 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.21; Mon, 21 Mar 2022 01:33:20 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XRsORXBkXjgVtQCT5eTMq7hRnBagHtLp+d0CA2Y8bClOQVvnz1hTxr6IlobP8mDQlY2FtoQzXYkD2R7UDbJZfM4tU8IwurmLx3DHG5hmwREWEAVttpGEN3sl5RXesJRk9gD7xLlBDD/zbszvI28oc2bKbNX0Ri+mpCq5zEA5F2IRqv0mEIVR4Q9pVFvVU6kW6/cwCZ1KoNfGqOJuFafL3iicRPL44Uj+T5AGPKsdNyn1xT/YOZ/5fUgUOeT8hcrT8AkxktIwz5LIIqvXQEzX8hz8X5wTGJYABiTw9HUICimX+l4h1Q6lGl5dx7NkRs7oNHghER8q3quCeWPDFIVjhQ== 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=7sm0SoVWAOdtwzpoXKsFbx2vITm3vfxbMHne+NYjGq0=; b=msmCPacUIW1AZM1nmhn36wy22XgBL0QZhh9PzGCkIaS5Ou6MOUijAcnb5ETx624cMsgoJcFbs2qXbuwO4ZeIs9rphVImZpFUAGDhpMGBqfDko32bIga+u6NcGqNgEnk+0cA7PGEPTVKopd+zjN5pkU1Wq/MpLi8MmquqCT7UpyYH9olSC3sbmyFNgH/2rxcLfizyqXev67dPVHlHnRlBqRnuPm+qcTlISlmjVy/M83a/+K6VPl/NMkrxZlNyJVd14KpK7mFSzxcIc98FnqtsjSXkS8ooskRN90ao8VThCFHD7ALWX/uQmEVjTFRTblUSiC8cNgTCvyiOshSVtfCuHA== 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 DM6PR11MB4508.namprd11.prod.outlook.com (2603:10b6:5:200::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.18; Mon, 21 Mar 2022 08:33:15 +0000 Received: from BYAPR11MB3559.namprd11.prod.outlook.com ([fe80::1811:d49a:7914:a0b6]) by BYAPR11MB3559.namprd11.prod.outlook.com ([fe80::1811:d49a:7914:a0b6%3]) with mapi id 15.20.5081.023; Mon, 21 Mar 2022 08:33:14 +0000 From: "He, Fan F" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v2] libavcodec/qsvenc: enable LowDelayBRC and MaxFrameSizeI/MaxFrameSizeP for more accurate bitrate control Thread-Index: Adg8/h16TOMj4bDYSkaTQaBdh6zHkA== Date: Mon, 21 Mar 2022 08:33:14 +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: 8c5a9151-3211-4c7f-d9db-08da0b157134 x-ms-traffictypediagnostic: DM6PR11MB4508: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: hwFSAQqOvwDv5fPTPNEoTi2fWGvGwLLQpScduWAiEX10VTcrMJZK+GitUDBiKQLxQh1MW3oUJaZBXDSCj+8AEwPhsNZEe5HKXF9AB+RaFOtHlmSq6FL8E43dokBm3np6GT4NK+LOOq2hpsrCoW+bpwfn81s4EzF2A5r4I2mOFg6Lgmm5UW7XHhHkxzVI3QftBhQzHPmP3rYloDbBv4doOFpEdZ7qcyj4HRD1NrcszFVQRHggaA1f7OOah93VuPvkkQ6vNv43f8PZ51+5cLsWCDXX1oUofi+Ku9uhRMkyUwq4+tiZ2IastpzWQP7BDYxgLUDtJyzfh7oTFeuFrJlopyUXleoK6RThpy4fQqGivEzCebE9HxkJof4Hax/TwFp5SMs6izEF5ri7YTiu/YTh4LxtmIx8tNnqrn/Z0IJudCa0Rw+tz4Mqn7RlGPbW3r981bz/9qHFvmY2jgpeZ8FSbLCVzp2aU8pv/Qg914Qweg8z6TpxP6oc7EbaAgcKyWxqo+EeEho8xnoQTQDA8JSGmWdkRIddHTfQloBoRkY1PKkBraqNjGguUjLP2zxL9ZoB4iLHew5C+AmE0k+qdGO39JafUijDRUhSRdzulvpL/pbZIcyUe5YEq3fGdsOvPQwTPabB2hRf70KY7P29n59lZvU7pdIikHeBcSbW1X1X43tAzEyetauNPVBeWpsCB4GXMVWwDU4c34nL3PIw2pSVvztTsVzqzwp4rGbSukkBXDMqGS+hmyMtqFiFs7HROGI1JppSb5uO/AYNkQ8Pf5NgTcQfFodwfniE+u5KCK6wajA= 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)(33656002)(38070700005)(86362001)(55016003)(82960400001)(122000001)(38100700002)(508600001)(6916009)(966005)(71200400001)(316002)(107886003)(186003)(6506007)(26005)(9686003)(83380400001)(8936002)(52536014)(5660300002)(64756008)(66446008)(66476007)(66556008)(2906002)(66946007)(8676002)(76116006)(4326008)(7696005); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: 2Fq5iQtTKsogLh7O/XX4QfK0/9qewvOk2IlCsjxCDs0NqzJ6Q7tKj+yLUfeHgPduMv4N73vUcxaGQ+Z1ZAaON/zP029M0lTWDD3EPWIN0eyPo0HK48XzLnDV6wcguTfsSVftW5mlhYW6iEPLkasV/FBWFdKJQiWdrPIkYe5aYO065vzIfMAEcmo+w4XkGIhH8SqPg/WIWCn43VOGH50NAYCaNxT3YtKLqP/GEs/j6FR9wP9rINkYnStYSD9DGH/6mRqNPJBuwwxbHgDYTcqlVcpVl7jaNAmYohYZDSADFdEsLFAu0C3RqqbuK+wkuv6+ScLOZx0KlxwS7yWEX1Whz6QTVtwOnl506S6GdCtY4CHovdQaQmx9Dh+MCjfQ95EH6kHHD1+G/VYbOoxwDirEVBD1J8Mm80dmYQzXFO3zfJhHRxm8tjfXpt5C4EOSa2zF8LHl6R8LuDKsf+v3N3MPAKu0uCarzPUCPi32+NSKY66xYeFRmQB6Zs4dHQhYXlYOADxDMyitIGXdFVtGPhL1SGc1sWEu3IYPDlb/pB9EqQqLsuJFDVjbiBduV6fxGHGYgHCyTB3v4QeH6+v0PljePX/X83TEXWldmC44RjhazwsreMeUiTA3Z0qW+77B35FW3CbQtelASBUg7qeeEBFp3VKDyYqmot7mCc/rnlweqwv2zBNKH+gn7wwgcNAPx0TNYw7ujD3XbUfzQRFLZ1n28xv5RUrTVSu3TtACgRS6zOVeSDMK4OWLBtJFMBub9jLWLOcksWsRIGngx8LGxK67kYftQAfXK8Rv6yeq+Owih4EhIiM9GM1891JVTeKc+q+z1VuPr0K3x/elauHuC9poWLrfknS3IZ0y5vxBEL7APTwx6rl5VHP6w/z4SDZFgp7DLtJMEb6ADZiP3vd6MyVIKoDmh5VQ1FOUtoI9tccZw6WZadZTM19S8ANxoatmxlI1KIcB/gjWcRJCrG6l9s+IBsTHXrRjzz6WhafDYrglDPYYPuV85ayhZY2jTsipba1ykct7x1+hPXB9uFUXb8dlSTgIy1qZFkzrIqixwaGmMmnhjy/ExhuW3MNcmhqTvW+wp6iUxehPAohDXq8KaDf7R27TiBaRMeCf0V2pZE504Kg1Rer1yA1aHVqOTO+IRT1x6GDCFqoBEcjraJQdhgSjELyHCvo8IlvgA7FlTEf9PdLmTDR9kJoSrYKOtM7BtbDN26zIvcXNOnuV9TRHoOkN+Xek9rJS5G4m6WtDlAEXt4lR3O1hjVO3uB4A5Br6EDRL97iVzKhZ52SKlJsODYzgDKmsIBiRuGNCXtCekdtqrRqi28u+BMFDBKyx2hby+WOlOGgTPk7vGwCT0yleGylxSlGrLvMynYteWXeHNwKaNhkws3kl1FbDcCIgbje5FT4ZSlwlTtWadARWTdi+zZSDRXgKXLcb7E/VD33nburQuRTKXZ3G7FkFaTXsFGWbq2kY 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: 8c5a9151-3211-4c7f-d9db-08da0b157134 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Mar 2022 08:33:14.7073 (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: 5Jk4DFRn6uMhWvyWenxgSuPJAVzeeZ7TZDw0KGdsThy5RP/KZPFuudFWKFhaZfIpa/zftXdr2YS+e3nsDwpqNg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4508 X-OriginatorOrg: intel.com Subject: [FFmpeg-devel] [PATCH v2] 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: P8Y9BXTf8KLL 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 | 10 ++++++++-- 3 files changed, 51 insertions(+), 2 deletions(-) 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 55ce3d2499..d7441ac447 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -376,6 +376,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, @@ -990,6 +997,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..cb84723dfa 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -90,8 +90,10 @@ { "slower", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_2 }, INT_MIN, INT_MAX, VE, "preset" }, \ { "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_slice_size", "Maximum encoded slice size in bytes", OFFSET(qsv.max_slice_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, UINT16_MAX, VE }, \ +{ "max_frame_size", "Maximum encoded frame size in bytes", OFFSET(qsv.max_frame_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_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, INT_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, INT_MAX, VE }, \ +{ "max_slice_size", "Maximum encoded slice size in bytes", OFFSET(qsv.max_slice_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_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 }, \ { "extbrc", "Extended bitrate control", OFFSET(qsv.extbrc), 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);