From patchwork Mon Dec 26 06:02:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 39752 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2472185pzb; Sun, 25 Dec 2022 22:02:18 -0800 (PST) X-Google-Smtp-Source: AMrXdXtF0dPMiQV3VZlIACccnY5njq9209Ve2j0nhtWG0lJLl90qVdTjHK379EjJzGUrZ5dInfu4 X-Received: by 2002:a17:906:9be4:b0:7c0:e99a:e353 with SMTP id de36-20020a1709069be400b007c0e99ae353mr13429711ejc.56.1672034537207; Sun, 25 Dec 2022 22:02:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672034537; cv=none; d=google.com; s=arc-20160816; b=04vCycp+I/un8afA/btvgDSn0k6hTgT0oKgLpCYWyDyY7Xdsf16560RU34b1pxTyy/ rMSAgiK7AftHRkpAu2hrLn2jq2xwS60OKTRGocjU8Ed5LdTCKJhndjBkQkeP/cKwgqHw WXCfLV2BjRgfpba7Kw7WzzIQSrTBUrsad4heWoDp8xtRmqpfO9+JEFx/UrKJeUh10iGw x8Ir5v/Juiih4T5q/WvhZzH/dXze0ZoxyzD/jaC/fY4IN6s2CjyhZiNyfPD1imC8wARv O9M1+l9Wp9XavUbj2skKLhX+sJu3ceDBXQqeSA/qprvEb9jO9suuIYdNLI14W7+2lcpq 1a8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=NGxIPaAH1HXnrFlvvSMPHE0e2JP++nXqDH14W6XhZxY=; b=p2LgNqG3f8ut7HLqwyqwX77+eUl1WtfspJU2grURb48o53uQbfp5/u7oSFZPno02r+ M/wUYkh2L30NdqCjIeUjrAI8YY/iyHniVQ/4Dq7oSV3fBE9zmEX9iQGYEPQBrRUPGROC FKkFt9Tpq3ZsTwzEcOC/Or0F/LFylr6v0djsCyga1vR4ib5Vt71BTRJZiLQSNPUnSurj l86IiyTx+9UPWqbA9ZIV6O392TrE1lzMVBN+PZSXCK2Ip7i/hSrJ8fD8SrMKlg5z+Ilr IQbsXPT/THxubue//jQabmQ8BfOkSDJdDbTkMs3zlyp3sr5FWSY4FnFx4bC61sLC//FL rONg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=XDeE+SI+; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id xh10-20020a170906da8a00b007c1572c3efesi6696683ejb.846.2022.12.25.22.02.16; Sun, 25 Dec 2022 22:02:17 -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=XDeE+SI+; 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 5ABDB68A5F8; Mon, 26 Dec 2022 08:02:12 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7FE1C6880B3 for ; Mon, 26 Dec 2022 08:02:05 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1672034530; x=1703570530; h=from:to:subject:date:message-id:mime-version: content-transfer-encoding; bh=a19Q3fzTIa513qQintKW5SxPDCV1v2zokMbcHR0rdrI=; b=XDeE+SI+xqZlBX9CNJzTnW/xdqObvPugfFhpRVeRp0L8xq6eU/TFrJoS PpdvCgkdOXYMrD/AvP0ttfdCTlOVW5ITPfB8BnCpsM4V8aEPOaTFxPnct ++pyvSmOfbeh4ESY77U71fiefNJUHdE2AqtmSZz00cRd6Y1sFPN/Q/EVF J7wSKYBXEfOZnGK6gBWKgnCriDITMPMNGjWlRk/UOc5AbVvz66xZtXlgp zyPvM/nckCnrgfTbmHhmcrK+ZHt7R2yf//lPNuwu7wwRxw/Oltbw1aFFR /jXa0YCDz2Pd+5BdcsrdR9vLa9d0knsmdJjwvqrAZVCiZZzPimnN7/tXl g==; X-IronPort-AV: E=McAfee;i="6500,9779,10571"; a="322503340" X-IronPort-AV: E=Sophos;i="5.96,274,1665471600"; d="scan'208";a="322503340" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Dec 2022 22:02:02 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10571"; a="685088939" X-IronPort-AV: E=Sophos;i="5.96,274,1665471600"; d="scan'208";a="685088939" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by orsmga001.jf.intel.com with ESMTP; 25 Dec 2022 22:02:02 -0800 From: wenbin.chen-at-intel.com@ffmpeg.org To: ffmpeg-devel@ffmpeg.org Date: Mon, 26 Dec 2022 14:02:00 +0800 Message-Id: <20221226060201.2081722-1-wenbin.chen@intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] libavcodec/qsvenc_av1: Add low_delay_brc support to av1_qsv encoder 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: f8sOZTi4UK2F From: Wenbin Chen Signed-off-by: Wenbin Chen --- doc/encoders.texi | 5 +++++ libavcodec/qsvenc.c | 4 ++++ libavcodec/qsvenc_av1.c | 1 + 3 files changed, 10 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index b8051cda3f..543b5e26a9 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3850,6 +3850,11 @@ Extended bitrate control. @item @var{look_ahead_depth} Depth of look ahead in number frames, available when extbrc option is enabled. + +@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 @end table @section snow diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 514a1e8148..f5c6a164bb 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -537,6 +537,7 @@ static void dump_video_av1_param(AVCodecContext *avctx, QSVEncContext *q, av_log(avctx, AV_LOG_VERBOSE, "WriteIVFHeaders: %s \n", print_threestate(av1_bs_param->WriteIVFHeaders)); + av_log(avctx, AV_LOG_VERBOSE, "LowDelayBRC: %s\n", print_threestate(co3->LowDelayBRC)); } #endif @@ -1090,6 +1091,9 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) q->extco3.MaxFrameSizeP = q->max_frame_size_p; q->extco3.ScenarioInfo = q->scenario; + } else if (avctx->codec_id == AV_CODEC_ID_AV1) { + if (q->low_delay_brc >= 0) + q->extco3.LowDelayBRC = q->low_delay_brc ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF; } if (avctx->codec_id == AV_CODEC_ID_HEVC) { diff --git a/libavcodec/qsvenc_av1.c b/libavcodec/qsvenc_av1.c index bb9ad16927..1e7801fefe 100644 --- a/libavcodec/qsvenc_av1.c +++ b/libavcodec/qsvenc_av1.c @@ -110,6 +110,7 @@ static const AVOption options[] = { QSV_OPTION_ADAPTIVE_I QSV_OPTION_ADAPTIVE_B QSV_OPTION_EXTBRC + QSV_OPTION_LOW_DELAY_BRC { "profile", NULL, OFFSET(qsv.profile), AV_OPT_TYPE_INT, { .i64 = MFX_PROFILE_UNKNOWN }, 0, INT_MAX, VE, "profile" }, { "unknown" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, VE, "profile" }, { "main" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_AV1_MAIN }, INT_MIN, INT_MAX, VE, "profile" }, From patchwork Mon Dec 26 06:02:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 39753 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2472271pzb; Sun, 25 Dec 2022 22:02:27 -0800 (PST) X-Google-Smtp-Source: AMrXdXs+a6p73DWM9gtmRNC/aCzqj71Ofc0UE4gZB0TYeR1n7gF2ITiFN8FVLyKoJRNrNUf23Bwg X-Received: by 2002:a05:6402:e83:b0:45c:a5f2:ffea with SMTP id h3-20020a0564020e8300b0045ca5f2ffeamr20290573eda.7.1672034546834; Sun, 25 Dec 2022 22:02:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672034546; cv=none; d=google.com; s=arc-20160816; b=S4zMDJ5stZ8Bw+VtwA4wn7EUsLr/woRBGIrM2FmpuepyPNMTWjQwc0r9JI+Q+66RuE adUPPn00DlG09PUuobm2yI0qUQinqVDKuVQpe5r2uoUm4noVsVm0xTRoKhkAry6WeSQv wKZYIrfvGTDy4+DUtsHZBfAddNRMLRHUsWkjbHFIbHeSdFs3Bx7/QGTULioJOP9dZYcX wplMmnwPtzZsZbRzTJPYLuUwwo958N0Wm6m79947XmR54shyoRgT4NJ9z07f7I/epuyZ CQvAF7bYXso7wBlFg9Yz4tBl0t0hS1/BRy/9cHtJN6pNTEBngPPe4KOh6Bw9yxErcysp E4yQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=Iul2zVsI976fP+ajtA/pTmO7S9f5RlV/EL+g8hb55GM=; b=ZGCNbfq4kS7RmOeIk5KkEOZcOtsiL1N2m3hbLVsak1GuCnWHllG4GVNnvuHeoHv2dR ZetsjE2C2jSGpeUoU48Pv2pZNOHrlG/4lBh1uPJ/gN6ipUUMQM88u7INj/0IFppbP+S6 wMxx4CLGBnKxhhB4/spwq7MdomcU4sEWOxLUbkl1BrgY38OYkngZfr3rwX1jQilI1y4g 0XNNxsVQ1TG082w1BZPsblva5R7LUAS7boTRMvVeR3y5jVQnPUBriidY//SIq7pFSmGU DSg5/9d7cCs+4ENHF1CGo0sM344YQjhCSeMWvJU6FlejY2oOLbjGOeL9Fi7gidwA+GTA Ocig== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=hiPVad46; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id cy22-20020a0564021c9600b0046de70ceea5si7657056edb.163.2022.12.25.22.02.26; Sun, 25 Dec 2022 22:02:26 -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=hiPVad46; 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 567E568B265; Mon, 26 Dec 2022 08:02:18 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 86E796891F1 for ; Mon, 26 Dec 2022 08:02:11 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1672034536; x=1703570536; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=zyE9AgJCt09+UXZRLiKVnp/ShpbDgToUkwHqUQUjHFc=; b=hiPVad46e4T7ujyL4jVF2sz2rtFCZ2iFgq39Ew9fDwrSaM9qcoxKYHFa BJ7t5LNJOFC0NPvF49jxtjKfEo3w7/OAwhSSoPCzidRTKIKE+c6/0IQKs NtL6oFaHvmUs8PwidNJDuU38529xhr5g34D82HNTBbdWnLS+5rYzM/KtQ DD580wAvi2wlpXuzSzGxFL50FIq9oYFXCBW+iSy17PTjcW3TGl24LIC8k 8Qh9bHyxLIj6d25nVeGr0Px+uIpCeyUwEbO17ZagWc6j1/FlK9uRQQ0ci ZUr9YChT2wGmorC2FyNdBHrVO3UgLI9pvettHtFT7UjX5Qa81Jk0596I4 A==; X-IronPort-AV: E=McAfee;i="6500,9779,10571"; a="322503343" X-IronPort-AV: E=Sophos;i="5.96,274,1665471600"; d="scan'208";a="322503343" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Dec 2022 22:02:03 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10571"; a="685088944" X-IronPort-AV: E=Sophos;i="5.96,274,1665471600"; d="scan'208";a="685088944" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by orsmga001.jf.intel.com with ESMTP; 25 Dec 2022 22:02:03 -0800 From: wenbin.chen-at-intel.com@ffmpeg.org To: ffmpeg-devel@ffmpeg.org Date: Mon, 26 Dec 2022 14:02:01 +0800 Message-Id: <20221226060201.2081722-2-wenbin.chen@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221226060201.2081722-1-wenbin.chen@intel.com> References: <20221226060201.2081722-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] libavcodec/qsvenc_av1: Add max_frame_size support to av1_qsv encoder 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 384LjhtOeABU From: Wenbin Chen Signed-off-by: Wenbin Chen --- doc/encoders.texi | 5 +++++ libavcodec/qsvenc.c | 3 +++ libavcodec/qsvenc_av1.c | 1 + 3 files changed, 9 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index 543b5e26a9..727f12a59d 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3855,6 +3855,11 @@ Depth of look ahead in number frames, available when extbrc option is enabled. 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 max_frame_size +Set the allowed max size in bytes for each frame. If the frame size exceeds +the limitation, encoder will adjust the QP value to control the frame size. +Invalid in CQP rate control mode. @end table @section snow diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index f5c6a164bb..93f1862a4b 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -538,6 +538,7 @@ static void dump_video_av1_param(AVCodecContext *avctx, QSVEncContext *q, av_log(avctx, AV_LOG_VERBOSE, "WriteIVFHeaders: %s \n", print_threestate(av1_bs_param->WriteIVFHeaders)); av_log(avctx, AV_LOG_VERBOSE, "LowDelayBRC: %s\n", print_threestate(co3->LowDelayBRC)); + av_log(avctx, AV_LOG_VERBOSE, "MaxFrameSize: %d;\n", co2->MaxFrameSize); } #endif @@ -1034,6 +1035,8 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) q->extco2.AdaptiveI = q->adaptive_i ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF; if (q->adaptive_b >= 0) q->extco2.AdaptiveB = q->adaptive_b ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF; + if (q->max_frame_size >= 0) + q->extco2.MaxFrameSize = q->max_frame_size; q->extco2.Header.BufferId = MFX_EXTBUFF_CODING_OPTION2; q->extco2.Header.BufferSz = sizeof(q->extco2); diff --git a/libavcodec/qsvenc_av1.c b/libavcodec/qsvenc_av1.c index 1e7801fefe..c697845d7b 100644 --- a/libavcodec/qsvenc_av1.c +++ b/libavcodec/qsvenc_av1.c @@ -111,6 +111,7 @@ static const AVOption options[] = { QSV_OPTION_ADAPTIVE_B QSV_OPTION_EXTBRC QSV_OPTION_LOW_DELAY_BRC + QSV_OPTION_MAX_FRAME_SIZE { "profile", NULL, OFFSET(qsv.profile), AV_OPT_TYPE_INT, { .i64 = MFX_PROFILE_UNKNOWN }, 0, INT_MAX, VE, "profile" }, { "unknown" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, VE, "profile" }, { "main" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_AV1_MAIN }, INT_MIN, INT_MAX, VE, "profile" },