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 4118F49E9A for ; Wed, 15 May 2024 14:14:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 76E5E68D5E1; Wed, 15 May 2024 17:14:47 +0300 (EEST) Received: from MM0P280CU005.outbound.protection.outlook.com (mail-swedensouthazon11020003.outbound.protection.outlook.com [52.101.74.3]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 09B1C68D366 for ; Wed, 15 May 2024 17:14:40 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K7XtHJkXi4D5KuaABn9Vwf/VS34zrj4Sg6zVd7J2J6IzJti2MI2SXUnBoB9zIkbVLXcfY1GwtPLwH30M/WmhDOu1IJduVb3kM7g6yH1jM6u0dDjuf4V6ZCrUVM0dCkqf2wbjSkF3vaWWWhGa0kfwGFNvp3+y/Eh7BxbdR5AoRicxcipdcauWQvRPYBGnTBrtBqVKhulaqWBjNNavL9DAPNcGFO4u8f9hTGHzPA0inAJ82PJIPsXE0X8PC0Weh6S8F/440tI9LU0u2Q+tP04TP5yQAzPFI6uOPadFSpCTzLQjx91oIck1lDyremW9bTKI67JWxvbs8ct6Sw2jIiT9xw== 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=o/xpQWaaQTVeaa4l+9kGPfWRAm5a0AbTMc67ppRGgWk=; b=jjBje/fqsfsjY6/nFympYP/cfbyeTB8GIQhZmpB8QKYd1wnSRZjAA0XDSnxLa8NCmElMo8MvUsDtA7c1knTSQFPN/9niSKOcLpGhMGY9FnZbGYwqZBtT2wH6YYQnFedBc5wKSZ+pVCMcsm1P8cuLAJg1VhfamhCmw5HI88QfsECWWBbWMGR0vDkWu60QYQ66obbhh0eUr8NKCdOHAT9NGe1cqTDme1XtIBGN/J0Hk0aw5vrYi545PLgwl0dejzt0wQu5x5ZdHmoJGLxz0fv2dKYllkAkQi7Cf0xcjcKysrNWqylKvOmA0ByhwP5VS442C8uZLPwe4tqvVWRCDS96Nw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=svt.se; dmarc=pass action=none header.from=svt.se; dkim=pass header.d=svt.se; arc=none Received: from MM0P280MB1023.SWEP280.PROD.OUTLOOK.COM (2603:10a6:190:3::6) by GVYP280MB0430.SWEP280.PROD.OUTLOOK.COM (2603:10a6:150:31::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.27; Wed, 15 May 2024 14:14:38 +0000 Received: from MM0P280MB1023.SWEP280.PROD.OUTLOOK.COM ([fe80::2a62:4773:ab07:b58]) by MM0P280MB1023.SWEP280.PROD.OUTLOOK.COM ([fe80::2a62:4773:ab07:b58%4]) with mapi id 15.20.7544.041; Wed, 15 May 2024 14:14:38 +0000 To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] libsvtav1: Enable 2-pass encoding Thread-Index: AQHaptI42w5O5ucxLkanlUp/4WRzow== Date: Wed, 15 May 2024 14:14:38 +0000 Message-ID: <59357F99-B77C-4ED5-96F9-9247AF91D0CD@svt.se> Accept-Language: sv-SE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MM0P280MB1023:EE_|GVYP280MB0430:EE_ x-ms-office365-filtering-correlation-id: 26f7074d-622d-4dba-9078-08dc74e95b3d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230031|366007|376005|1800799015|38070700009; x-microsoft-antispam-message-info: =?us-ascii?Q?aCi2gUvAtzA3bUaXFJBy1Yfwz1G2SGeKUzRwpnwcMc8cOv5opyt3nuRAwLTC?= =?us-ascii?Q?5fpOUkzA6Qh+9360fKzhRKooS0TmJw1W+pdO0XUv9vynro4v8kB0DxEFU0Dv?= =?us-ascii?Q?8b/leV4kAeCFoJGhPZjhOHLtJaKJ88BwpaBlKN7BSdQHDprbtMjEH4/vunly?= =?us-ascii?Q?nkPwfJS7YPqUNhkj3QYphW9ir+DrokrxwMJCnMa1zDQTjNlEbqKxmvtR/xiA?= =?us-ascii?Q?04y2xfB8AyuPJUHd5fKWdkXA68bil3BeqM/M0wMxqbMlr7UEc8gkci5xkAFR?= =?us-ascii?Q?8uurhrpo6Ga/Oabq5wPwnDFC1Xt1hM384Ak6U6TesF0IfmCPMNP09g5OYQie?= =?us-ascii?Q?h2x6Jz/WPXxiMliU6RVG7wwC8UG1CZuZpF/mFtXoPKiD1J8tte8Eh3NaPuMs?= =?us-ascii?Q?5vsaz11PY10fHu/DOHWA1twHG695zZ/Y4ItM9FmlePP6PKWuiEmIzG0rosju?= =?us-ascii?Q?RTESX8YI8g8imVBe3L0N7j3cez+BE8fXTw2hizI14KndkMuIRB/k9nnh8cQa?= =?us-ascii?Q?oikSAyYPpxqywJ5wY6L1Tw93uxUHfTiPz2nW4MMjg3LZR7KEZ4/1MG5i0v64?= =?us-ascii?Q?mUnfUYlozoDxu0cZQdWYasg2ATk7nfZYwZAmQyzW+Pe/U5vlGWncw5dRhXeJ?= =?us-ascii?Q?d+Yb1jVvJrTufdPCoev4ShOOxW6mW4Khw1mApFTLj2c2kx0JW1FAS0/AfIxN?= =?us-ascii?Q?n/bXg2UG+xC0UGqAoyiq07T2sNy4x4oODZ3NCwxfVR6Hv+dVnEwqjq/zEibF?= =?us-ascii?Q?i7TcwJwSDHShUyQYRCpQBdyi6KZKi1BL5B8u+ZUlXbjSYYPdah/ESTbcKRAU?= =?us-ascii?Q?e5qdZArTW7aZkwEVLZOlAr8E2OZ50CH1NQuFPpskiBhCaqKyCueqr5DffUEh?= =?us-ascii?Q?IiTmHUFI+uSBLOMb9IKGvPzf9H0mN3l2PKDqXHiOLyt3En3yYhit3Mhfylqe?= =?us-ascii?Q?7xZojqO/XWCX2dYpV0H3FVl1MaBKfP4uR7psM71grc3RQqN1ouYo+8Ejn3xR?= =?us-ascii?Q?DICBVqzbSfmyA0Ar2yjMdKm4HyKIlSqWOisIvsRRnMy+gUF07QHhCOcCpNBb?= =?us-ascii?Q?5lsRWT3ReiXjmNh9UWQNCmnG9a4u7d5NIF2Qyyy1R/rCE93BS5c2Bq4/DyRi?= =?us-ascii?Q?mXJx9MvKRrc3UB0Nb/WiZ9tmILk+TigEKIhkgvejfYk/L4ukVwOmDIfxrnHU?= =?us-ascii?Q?dHipEjUgqVLKoA9FVaL/JurS2LjIYn2dQUG1s+xY8Fq/TXDZt9n9sMehtRRb?= =?us-ascii?Q?gqU+JjouRasLr61XPcwynfzK5IVlkx/2BQJIXOftLILMh1pW3rdGljA46Y5g?= =?us-ascii?Q?7OIXVA+xVTIFdg5sgN9XgTWYfp96fNSD2Io3c3ro53Qssg=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MM0P280MB1023.SWEP280.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(1800799015)(38070700009); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?CTd1LyQ7F3rJjhc/Xlgosr/AhG0hWz+DwpreVIL4d0bd/MrAkqxWorG1qmaf?= =?us-ascii?Q?uBOujEB8ybiCG3iafXs4/o7wiixsndC5BWbSefTXRdcjp1YzKdAudgAbNMzE?= =?us-ascii?Q?FY0XJe+IQuoppWHyF8Ugg2kF4Mlzlt8LuWhhXcSHKfu/CxnEj4VvwuTAUJIA?= =?us-ascii?Q?29RP611to8ElLlaaA3QAqPfaCk7/mxF4sn0ne/1XPxd6BT8RZduK2vIiH3V+?= =?us-ascii?Q?6x7zS5LpJIibLSVTouz0Xgg80HifciYHkXMrFuW8egXQgvW2kNWCkrlhb/Ue?= =?us-ascii?Q?4/s7I0hAqIIAPIhfzNnfBngqEcmFPaO+8v2+0Bkh0ZWcdj89HeMEWKi/WHlQ?= =?us-ascii?Q?XzIFpyzNFbgHE2sv/BHhVR5jkvwKv7r/t0dTzxqMPHerrPHWDPaDzJCUWdok?= =?us-ascii?Q?dztwxUFV4SkrPhKKX0ly6oEfp0B2+SHzLF92tYyx2co5LQu5jzNRYBanMWxG?= =?us-ascii?Q?X7siBv9sx+hl7yiVdGqmtIXjGNGVMyf7I1K1w+QM2aY3lihx7hWNo1w9kiVf?= =?us-ascii?Q?uqSP/ZdFSY/YzhDCaWdj9x3Qpi9xemzPGU1pIEewUKovu2ji2ws6qRYEKbPO?= =?us-ascii?Q?5o3yNPkR+mU6egrtjsrJVrcMmFNoTw2/IB5LJ7lCXW+Vh6EpjUbgKRCOYDwv?= =?us-ascii?Q?kk4Hj8ikaS2hpxAnysRYVcl1PlKsoH+FLdkbQNZD4JR4A4hY891TkFR9vO5r?= =?us-ascii?Q?Wn0ukixwiTZBUJ2rwddpsovP2zNwPCjQnKR5s6qr3n+LTajKFVoM8whnXw0J?= =?us-ascii?Q?+hd8N0rh1DyM476mCvCPzanABuGdoUbd9MtIwgS4lkGrgcxxfawY18JUjSYl?= =?us-ascii?Q?yvYLAEpMZw21nvt3Wk9r4tC78VG5fILXpRDrFPTaON9m+Q5MwLP9pvU5rAoQ?= =?us-ascii?Q?0ZC5BxC0thlBfR7/dZJOOcKLAMhoXljVbTAqGANxVUEZgRSOHg5BIiQOK0cG?= =?us-ascii?Q?oSmOvj82tNTGeJiRIDgypZHNUJiJ48v+aNHVwKmpK7wMex51H9Yz/yTUXoZF?= =?us-ascii?Q?Q3n+5qjqNsraN2RJTVypYo0xruISs2qHY4TZX6lg7ia3JXR93HyapTx5fD8M?= =?us-ascii?Q?7Lf3B8wcJ9DZ+CGnGhPOKIzv9+d0ofXdiKjKFHAPRJnL8hYf9YgxH5fm8oeY?= =?us-ascii?Q?oMBzL+BwxJ0d4R82yKM/2mHC6COVo6Lru+g+8FUs3vDx1gVpZIXp2fSSElu9?= =?us-ascii?Q?Ub+KOy35ycKY0VXGU55+6gTxwTf4IbV2+LAqYe6nJNClL+JhAI6opq0F3UEt?= =?us-ascii?Q?MMgYc61G8W5LQU1SVXzLQ7oDwdvoZk5dPG8NDBN1yl1Yqxa/KvMFk3tV5tua?= =?us-ascii?Q?HQgJTMekXajjZTBdYn2wJCrFeCidMEcnJqMtI2NZ72rcoCPH1XLBRbxDZp6d?= =?us-ascii?Q?LJqI7QsN1yhSVqNOuge4+hFVnGH/kEv7kwq1RXKwHicxuW+ABNHKw5BTRFJC?= =?us-ascii?Q?mk41lM0SqzegzlSFgygOGj1WbGOtvStqHCYidpPwk5sjvhc2Lc70kEvmlltZ?= =?us-ascii?Q?dYA7HF3mbIjcNrjh7cJwWfoNL+Vyx6z+bt/FeU9r+sipXMgmvmoF5aN9zVb0?= =?us-ascii?Q?2T56amkzBWoxi4orHl0MrFBYgDhtIlvhfk5+WQbQ/a5JLnEy/68btOYmmkbC?= =?us-ascii?Q?pQ=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: svt.se X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MM0P280MB1023.SWEP280.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 26f7074d-622d-4dba-9078-08dc74e95b3d X-MS-Exchange-CrossTenant-originalarrivaltime: 15 May 2024 14:14:38.6119 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f5d227e4-4de5-4600-9015-df5f33e77f2f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: WAHSmDbU7rFOaKrYIWK01XGt6eCjmkyKQrDOEHaEBWVGH6SFQqWUFwJZR1B2g2QG4yF3m92eBGAXuaGtVeKzvr967H6r9gV5br6jvQuKXiM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVYP280MB0430 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] libsvtav1: Enable 2-pass encoding 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: , From: Fredrik Lundkvist via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Fredrik Lundkvist 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: Currently, libsvtav1 does not send pass number or stat buffer to SVT-AV1, which means that 2-pass encoding is not possible using FFMPEG; if a user wants to do 2-pass encoding using SVT-AV1, they have to use SvtAv1EncApp. This patch adds 2-pass encoding support to libsvtav1 using the stats buffers provided by the AVCodecContext. When encoding the first pass using SVT-AV1, the following should be logged: Svt[info]: SVT [config]: preset : Pass 1 Indicating that the encoder knows that it is performing the first pass, activating a special preset. With the patch applied: ffmpeg -i input.mp4 -c:v libsvtav1 -an -pass 1 -b:v 1M -f null /dev/null [...] Svt[info]: ------------------------------------------- Svt[info]: SVT [config]: preset : Pass 1 Svt[info]: ------------------------------------------- [...] Signed-off-by: Fredrik Lundkvist > --- libavcodec/libsvtav1.c | 47 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/libavcodec/libsvtav1.c b/libavcodec/libsvtav1.c index 9bc165f0cf..be2189399f 100644 --- a/libavcodec/libsvtav1.c +++ b/libavcodec/libsvtav1.c @@ -25,6 +25,7 @@ #include #include +#include "libavutil/base64.h" #include "libavutil/common.h" #include "libavutil/frame.h" #include "libavutil/imgutils.h" @@ -226,6 +227,34 @@ static int config_enc_params(EbSvtAv1EncConfiguration *param, param->max_qp_allowed = avctx->qmax; param->min_qp_allowed = avctx->qmin; } + + if (avctx->flags & AV_CODEC_FLAG_PASS2) { + int decode_size, ret; + if(!avctx->stats_in) { + av_log(avctx, AV_LOG_ERROR, "No stats file for second pass\n"); + return AVERROR_INVALIDDATA; + } + param->rc_stats_buffer.sz = strlen(avctx->stats_in) * 3 / 4; + ret = av_reallocp(¶m->rc_stats_buffer.buf, param->rc_stats_buffer.sz); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, + "Stat buffer alloc (%"SIZE_SPECIFIER" bytes) failed \n", + param->rc_stats_buffer.sz + ); + param->rc_stats_buffer.sz = 0; + return ret; + } + decode_size = av_base64_decode(param->rc_stats_buffer.buf, avctx->stats_in, param->rc_stats_buffer.sz); + if (decode_size < 0) { + av_log(avctx, AV_LOG_ERROR, "Stat buffer decode failed\n"); + return AVERROR_INVALIDDATA; + } + param->rc_stats_buffer.sz = decode_size; + param->pass = 2; + } else if (avctx->flags & AV_CODEC_FLAG_PASS1) { + param->pass = 1; + } + param->max_bit_rate = avctx->rc_max_rate; if ((avctx->bit_rate > 0 || avctx->rc_max_rate > 0) && avctx->rc_buffer_size) param->maximum_buffer_size_ms = @@ -618,6 +647,23 @@ static int eb_receive_packet(AVCodecContext *avctx, AVPacket *pkt) if (headerPtr->flags & EB_BUFFERFLAG_EOS) { svt_enc->eos_flag = EOS_RECEIVED; svt_av1_enc_release_out_buffer(&headerPtr); + if (avctx->flags & AV_CODEC_FLAG_PASS1) { + SvtAv1FixedBuf first_pass_stats; + EbErrorType ret = svt_av1_enc_get_stream_info(svt_enc->svt_handle, SVT_AV1_STREAM_INFO_FIRST_PASS_STATS_OUT, &first_pass_stats); + if (ret == EB_ErrorNone) { + size_t b64_size = AV_BASE64_SIZE(first_pass_stats.sz); + + avctx->stats_out = av_malloc(b64_size); + if(!avctx->stats_out) { + av_log(avctx, AV_LOG_ERROR, "Stat buffer alloc (%"SIZE_SPECIFIER" bytes) failed\n", + b64_size); + return AVERROR(ENOMEM); + } + av_base64_encode(avctx->stats_out, b64_size, first_pass_stats.buf, first_pass_stats.sz); + } else { + av_log(avctx, AV_LOG_ERROR, "Failed to get stream info"); + } + } return AVERROR_EOF; } #endif @@ -681,7 +727,6 @@ static av_cold int eb_enc_close(AVCodecContext *avctx) svt_metadata_array_free(&svt_enc->in_buf->metadata); av_freep(&svt_enc->in_buf); } - av_buffer_pool_uninit(&svt_enc->pool); av_frame_free(&svt_enc->frame); ff_dovi_ctx_unref(&svt_enc->dovi); -- 2.39.3 (Apple Git-145) _______________________________________________ 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".