From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id BC1E64E406 for ; Mon, 9 Jun 2025 15:11:54 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id B0DCA68D0D9; Mon, 9 Jun 2025 18:11:51 +0300 (EEST) Received: from MA0PR01CU012.outbound.protection.outlook.com (mail-southindiaazon11021138.outbound.protection.outlook.com [40.107.57.138]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 4F70068CEFE for ; Mon, 9 Jun 2025 18:11:44 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bQGK5ffZNjnJ4m+0htzWAGZGJ0uW6acTYf3tVnBDQO/BKFkam+IaJaVTvRFqwwrYA+OoHfNmc6pImZusdhWfYcJxT8qptL+WEv9GD2fwZLvwFjdvNXsJ4LQbCfYsaFLFGm0aty3U5kqrxJ/wyix0yCVOHumyFWiZq9op66binHOUVobH7qGySvBYU1uePlTVs35jIZ2MOD2TAU36gFR4pzov4WtQ5c4KWGZMgxAP0qA+w6H7OEeJSe8XOWyZoIWCr3sU3GljXKQpmN1TXFX4ysd5PyTwcikj+ZbmbhXJeldc8S+r0OKpGT/vaSnVK9AaUwc+sffo2iEKNbYTaVdVCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=UDYz19/rgr8RxYSP6euX9j7u8+ncDK18CWU/otWDwKs=; b=hbhK1e3zQNhL0G5YEGJVIrqQBr5fiIJQLk0w2dbzWED6l+wsikJFSIuqTYhY4psQImsVM82QSj40POlfeGcnsbVr0/gGL2JHGF5NEOf9+7Grb5nSBKLUeBzSQJKvXin2D1e/KoFth7nNoKTtfmsfjJHzGtR152p5frbh25XWTKdKwhQGxpHRLttkIIlnh2P6HHYEm3DxnZe9fxqJeKpMpDMBcpn/Yiw6jKDdS4Qr562EvncTqpY35leFO5XnvK8/QzBCpZFnDE/peaO9gk+YVY7+QKRV5AHDQ+zNUAlAgRdctG8x9NBa5VuXD1JgZ0z16pNK/dEWKsAViTPo/I5wRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=multicorewareinc.com; dmarc=pass action=none header.from=multicorewareinc.com; dkim=pass header.d=multicorewareinc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=multicorewareinc.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UDYz19/rgr8RxYSP6euX9j7u8+ncDK18CWU/otWDwKs=; b=Vjh3WaZxVh+WkJfjbWeG+yLOYtPJErbL4dX6QI6ieyNmH04XcmfyuuVN23W6o0g0WzAV0++XiCjOJb1xSF97haeY92W9N7OkyxHLVB+NZNLJJmpOX0sOYC6Md+KLAAbpJj/w5dBZcmDLfWmqhPf9WZpD5HyYmt6kCXkgzmwE6wWeJsdfsi5FQz6dJVKZwL9T9Bv8/uLU11/1Ep7wy32ObppTBgvkZ9z3APrZJQ48zM7gkSwIVYTWfqePk1RuJEUJO1DgJYRbOJWnTqSM6YxqJIBeWmWnZPP3kw+HG6f9GNcaM10IjPMPFe6bTzTyxe2+N7U1w7hzChUmt79LGY7QTw== Received: from MA0P287MB1158.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:e5::5) by PN1P287MB3776.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:254::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8813.29; Mon, 9 Jun 2025 15:11:39 +0000 Received: from MA0P287MB1158.INDP287.PROD.OUTLOOK.COM ([fe80::d173:abc7:2297:fdc8]) by MA0P287MB1158.INDP287.PROD.OUTLOOK.COM ([fe80::d173:abc7:2297:fdc8%6]) with mapi id 15.20.8813.024; Mon, 9 Jun 2025 15:11:39 +0000 From: Harshitha Sarangu Suresh To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH] swscale/aarch64/output: Implement neon assembly for yuv2nv12cX_c() [v2] Thread-Index: AQHb2VA+kwiCw0uxjUevoD1+l9jA9A== Date: Mon, 9 Jun 2025 15:11:39 +0000 Message-ID: Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=multicorewareinc.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MA0P287MB1158:EE_|PN1P287MB3776:EE_ x-ms-office365-filtering-correlation-id: be18d821-4406-4205-924d-08dda767ef0b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|10070799003|4053099003|8096899003|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?pC43FeqmLdIMeoLTBdIEuMTVLX2ym36JfVwibC9TZluY+cSyzaF2ciEoEW?= =?iso-8859-1?Q?kKL8K8NA/GbUsxucrBm+jQ9CBhQCjLLM9YvdrX1NMrr6skIxHcfywqDbII?= =?iso-8859-1?Q?AjWLU/AWlkjwsvuMPPAIrvk7T9pLzYsBuU9oHxcuc6QUH6KHbbXrOwPQIU?= =?iso-8859-1?Q?tG2HYS5iBqYV2gGv7H3jaB8vCNl1eJsZ9da4UYYFUPq1R4rf4pyAED1vpd?= =?iso-8859-1?Q?5VlbE7DN+DC7zkL3MuXVR+YBSf0c9ePIN7QYTQ1KyaZijxorXSWBvfJGFL?= =?iso-8859-1?Q?mCbrlZd5+gWeQ5/uJ/ZTMZPxgDPMDYDmYJh0YtKmcs+J07LtNuDoZKnnku?= =?iso-8859-1?Q?N3WWLmfcI82uxUBt9vHNwXDDvX0VeQERl0wG0XeZ6Bqp9P2nk7af0rDheo?= =?iso-8859-1?Q?un0m/bCxK9vEBsLo9NovdLV3sLOoxhQp3CalgNzrHe2d2WS+ApSko7M+m6?= =?iso-8859-1?Q?UxFxiP/N5xU9umtB79tW9j/z8Ag510tcjePa9L9oU46KcLBJApqus/YZ98?= =?iso-8859-1?Q?gxbYQKb6nyvifeFBiy4ocqxb75Wt4pAxpIMs83PYsrIiecrLwpELqNITyj?= =?iso-8859-1?Q?a2HvhuU2XBzZmEGcFh1A8ooNMwPYKea8IsiLzAyegBEuqq2csRPnglOEby?= =?iso-8859-1?Q?aicAsxBzsZPOQnQBCw+Fd+TIWH4gEdRpXAIz+LxHwuxNTzgZNCRL3x5cs3?= =?iso-8859-1?Q?mnWyv8jOGGYJwFEOS/dzAeTGB//oqtLMA4G7V64e66IGFg2TxORLkDXeOY?= =?iso-8859-1?Q?vMzKt1x8AIV7aDUJnC/zfmYoAZmY6TS7ViYKD07HbZct5D5MMiKWdXfpRX?= =?iso-8859-1?Q?EAN63rYQPFV4ipLxfsHv47+UexjDrAR81NApIlTB8IGBsmX2VIHXEPITR0?= =?iso-8859-1?Q?C4k+UuJHDDfYtJBUl9zuwcCr6fpOVWSkeW6W4KIeBBZdybVRto94XUmjx4?= =?iso-8859-1?Q?z0m7fyf9qIiNt030zRv242KtMQEQR3QHXdYqBHkaXGOqLd0jFrKGov0sJQ?= =?iso-8859-1?Q?wf4Ah0eYhec5U8YzPV2uUXu+58HHqlz85I44i6U05cyfn4Ng8SNmgmZjOz?= =?iso-8859-1?Q?CycM4TlQH1PKYTO2wtqEjDVTz4oUBNLx9VZ8PdTN38J2n+tdFoQTE0z+2D?= =?iso-8859-1?Q?NGG/Mc8Tl5YVsUeCD928scurMN4SBqTQ2REA2G99bAzVBN/rRa3A3N6zFQ?= =?iso-8859-1?Q?pAlJrw43y4kL9Ts22a1Gz4E9kaD4jsDCRErBYnzIsrlVMRm7BUPeDqhxKl?= =?iso-8859-1?Q?z4p15DyDpYmhClh+3yC7k06ekurA1cIPRmfThycEPWAs+26FQoc6EGI9HL?= =?iso-8859-1?Q?J2qrVm5fZhkSXP0JNf9Z9RUXoy5QDIBvvcU9G11jwT1u3PB/jL2cTmJRzK?= =?iso-8859-1?Q?ql07oMbNEu7gwkM0XX+DJil6wMR7kCLZ9m/4pvfUYI8ATGYKlG7vdMQIbd?= =?iso-8859-1?Q?fzFcqpMqEA2ASVz1u6NBzO8GLlmuWeBHXdwRCbdFcz1AI3AphAAFb8C0m4?= =?iso-8859-1?Q?Zy+zjxJVHWFxml26BxSGrqiM+g6BZTl8SPXuTKI8S5F9jKvzQI0eY6ztB7?= =?iso-8859-1?Q?rr2ckAU=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MA0P287MB1158.INDP287.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(10070799003)(4053099003)(8096899003)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ahXKgmGeUzOnrcXRA5mRCxZNDNeOW9cr7ifzqXZuv8CNSSSqWFmRNhyjhP?= =?iso-8859-1?Q?ieOgd0magOksWTEqAnHvDMDu3jsF+M0xrMFk9qhSuQpguDs8e7MNuT3Ixx?= =?iso-8859-1?Q?OWnzo7uvdIs+wti5LU69jQdleR/YMtgcd1I57Na0ZpbCvnZp+oE22fT/CY?= =?iso-8859-1?Q?rEoq/vgF5RBkFGms9vdZCsdHdWtv9+eXdb4NK3lChcRCcEL2fQp6JntdUy?= =?iso-8859-1?Q?TYSUmCrso2olP9fwt4Di2ONSK+yU8LwD6LqZVYzLG7uvyNPUIYIg44FyF8?= =?iso-8859-1?Q?SDisYHAIimhcJbq/g0pifiNiEjbT8U1jguVoZU4AT8qX8j87+dOYqeNJdJ?= =?iso-8859-1?Q?zzy0TIOLRn8iucNAVI/ZH3fl20isRGwia7WgKbQ50hsAKQocrpTOzJJt1y?= =?iso-8859-1?Q?PVI3E9LRgX4c3Fpy8kr4AZtDMIG7dVZROv26Utv+TcE22EZUQQqBJftCUT?= =?iso-8859-1?Q?pcaXcTfUzbAVOjLdybFDWiqEOYZ6Cz+SA3EokL0pjBFyuq6Tt0sfu8AEEd?= =?iso-8859-1?Q?FG8HH7Zy11VZCxXjPC8Ro65+T3F0ywJff3muT1V7/Uq1n7wZDZ4UkeSWca?= =?iso-8859-1?Q?yAKqA1uY4cobw1V/Uj2bknqVN0oiLm/b3riqDw30gnTOHNYFgdbUwebXw7?= =?iso-8859-1?Q?uSr31KDKOlNvkIocV7AhZ3dVLtlCP37jpSFw1fOwoI7spYwo13gbyWwhHM?= =?iso-8859-1?Q?9sVM3n2EZkd/vxhQvf/fuLyYqptOv02VhPy/raK9zGh1orLnX4vhU3Eydt?= =?iso-8859-1?Q?lwC8i0D/l8HQvCbmwquU3ON9ueaN5Ca7DBgl5KcESSMS1yI/SR2KD/+pZv?= =?iso-8859-1?Q?FDEUo9whU4uO6qcn8rlVb6/bXQhY+m2rXDwEd+c09lbxIfo7U2gYIv1Fce?= =?iso-8859-1?Q?uOIny0V9MosURuLx34W6GEHUoPj0JBSZ77vH+xRAzPIy5rAyi4nfLsO8Uc?= =?iso-8859-1?Q?EW4jwc+GMbfLxpUenP+dZ7NUuvVt5A5aqV7Vkmy02avV91ZoQKqqulMAPH?= =?iso-8859-1?Q?5x6cNk+S5hjiN3uK5Xvo7XbCeAFKhBux1o0aTrIThW6FyLyBWQ/s0qWzAL?= =?iso-8859-1?Q?FuxujLVi8C3yoU00d+Skp82Y8fdGx8jsGdNrSJjBuWeq32ZWN5eXzk1z2L?= =?iso-8859-1?Q?cglb88tFS8zMuVY3sLNt7UN74934m38F4lEdeRfkjGqe+fQl0oKAo1QUe2?= =?iso-8859-1?Q?Fvb9TnmF+YbJzzTdQmVJPYvUwDo9QVh7zizbyHck9QCR06oyNtZq5r6d6a?= =?iso-8859-1?Q?MzW4CiyT9TWGAwyWmhbaPvdHRJJdCkIQwL0zvAy+U8wbs7xo716in69K1Q?= =?iso-8859-1?Q?Y0+TGrRHFncSP8oWKSLKzDWYyhkmG5HkSITcuPqAsq1FHXUHuGDfcv21yJ?= =?iso-8859-1?Q?T6JhWPpH0nMwJbbnHFs3c04OYsidLzQHR+XmMyJeclHvFk57GPbivaUTvo?= =?iso-8859-1?Q?HBjO2GBPEjdTtIRtdAMfztblduIcBooO3uwY/KmpQm/eIMUyLI1ZyfMD2I?= =?iso-8859-1?Q?qb09AWKvYSvrBE5B6qbZluNQOCyh2UT+5TbL8Ur+OxqTATSSKTiep8EpWX?= =?iso-8859-1?Q?uejiAk4tfFSNuDImCLaFNKIYKyV4jp4undlwpfQD7EXpDueoiEZD+0OfZX?= =?iso-8859-1?Q?qQnqHWs+/tjutfrbhclUJGo8vclovErB++6FVtFp21BPy/a8yDaJWcx1PX?= =?iso-8859-1?Q?HYS/TSUuQA+h+jzL8VyaRUjZ9/jXXSvQCZztKZAsfx4/O1DB6IgMAjYC4R?= =?iso-8859-1?Q?sgoQ=3D=3D?= Content-Type: multipart/mixed; boundary="_004_MA0P287MB1158BA521247AE411CFF896DD66BAMA0P287MB1158INDP_" MIME-Version: 1.0 X-OriginatorOrg: multicorewareinc.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MA0P287MB1158.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: be18d821-4406-4205-924d-08dda767ef0b X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Jun 2025 15:11:39.0170 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: ffc5e88b-3fa2-4d69-a468-344b6b766e7d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: b8e8FVGHeQQrl9Ai+rIswGfTgD09YNLxxz/bkxxz9BhuSG4qTSZnh8fD9dH0gAMrzQvsyclLxg0bmfvMydYkAo0IK92H8Mga3ePQ6NKTTio= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN1P287MB3776 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] swscale/aarch64/output: Implement neon assembly for yuv2nv12cX_c() [v2] 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: Dash Santosh Sathyanarayanan , Logaprakash Ramajayam Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --_004_MA0P287MB1158BA521247AE411CFF896DD66BAMA0P287MB1158INDP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable >From 4ca5eae1e7164f78296719f19aef97239e5b046a Mon Sep 17 00:00:00 2001 From: Harshitha Suresh Date: Mon, 19 May 2025 22:37:20 +0530 Subject: [PATCH] swscale/aarch64/output: Implement neon assembly for yuv2nv= 12cX_c(). yuv2nv12cX_2_512_accurate_c: 3508.8 ( 1.00x) yuv2nv12cX_2_512_accurate_neon: 369.2 ( 9.50x) yuv2nv12cX_2_512_approximate_c: 3499.0 ( 1.00x) yuv2nv12cX_2_512_approximate_neon: 370.2 ( 9.45x) yuv2nv12cX_4_512_accurate_c: 4683.0 ( 1.00x) yuv2nv12cX_4_512_accurate_neon: 568.8 ( 8.23x) yuv2nv12cX_4_512_approximate_c: 4682.6 ( 1.00x) yuv2nv12cX_4_512_approximate_neon: 569.9 ( 8.22x) yuv2nv12cX_8_512_accurate_c: 7243.0 ( 1.00x) yuv2nv12cX_8_512_accurate_neon: 937.6 ( 7.72x) yuv2nv12cX_8_512_approximate_c: 7235.9 ( 1.00x) yuv2nv12cX_8_512_approximate_neon: 938.3 ( 7.71x) yuv2nv12cX_16_512_accurate_c: 13749.7 ( 1.00x) yuv2nv12cX_16_512_accurate_neon: 1708.1 ( 8.05x) yuv2nv12cX_16_512_approximate_c: 13750.0 ( 1.00x) yuv2nv12cX_16_512_approximate_neon: 1708.6 ( 8.05x) --- libswscale/aarch64/output.S | 306 +++++++++++++++++++++++++++++++++++ libswscale/aarch64/swscale.c | 19 +++ 2 files changed, 325 insertions(+) diff --git a/libswscale/aarch64/output.S b/libswscale/aarch64/output.S index 190c438870..2d87cc6a5e 100644 --- a/libswscale/aarch64/output.S +++ b/libswscale/aarch64/output.S @@ -226,3 +226,309 @@ function ff_yuv2plane1_8_neon, export=3D1 b.gt 2b // loop until widt= h consumed ret endfunc + +function ff_yuv2nv12cX_notswapped_neon, export=3D1 +// x0 - dstFormat (unused) +// x1 - uint8_t *chrDither +// x2 - int16_t *chrFilter +// x3 - int chrFilterSize +// x4 - int16_t **chrUSrc +// x5 - int16_t **chrVSrc +// x6 - uint8_t *dest +// x7 - int chrDstW + + // Load dither pattern and compute U and V dither vectors + ld1 {v0.8b}, [x1] // chrDither[0..7] + ext v1.8b, v0.8b, v0.8b, #3 // Rotate for V: (= i+3)&7 + + uxtl v0.8h, v0.8b + uxtl v1.8h, v1.8b + + ushll v2.4s, v0.4h, #12 // U dither low + ushll2 v3.4s, v0.8h, #12 // U dither high + ushll v4.4s, v1.4h, #12 // V dither low + ushll2 v5.4s, v1.8h, #12 // V dither high + + // Check if we can process 16 pixels at a time + tst w7, #15 // Check if chrDst= W % 16 =3D=3D 0 + b.ne .Lprocess_8_pixels // If not, use 8-p= ixel version + + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + // 16-pixel processing path + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + mov x8, #0 // i =3D 0 +.Lloop_16_pixels: + + mov v16.16b, v2.16b // U acc low + mov v17.16b, v3.16b // U acc high + mov v18.16b, v4.16b // V acc low + mov v19.16b, v5.16b // V acc high + + mov v20.16b, v2.16b + mov v21.16b, v3.16b + mov v22.16b, v4.16b + mov v23.16b, v5.16b + + mov w9, w3 // chrFilterSize c= ounter + mov x10, x2 // chrFilter point= er + mov x11, x4 // chrUSrc base + mov x12, x5 // chrVSrc base + +.Lfilter_loop_16: + ldr h6, [x10], #2 // Load filter coe= fficient + + ldr x13, [x11], #8 // chrUSrc[j] + ldr x14, [x12], #8 // chrVSrc[j] + add x13, x13, x8, lsl #1 // &chrUSrc[j][i] + add x14, x14, x8, lsl #1 // &chrVSrc[j][i] + add x15, x13, #16 // x15 =3D &chrUSr= c[j][i+8] (8 samples * 2 bytes) + add x16, x14, #16 + + ld1 {v24.8h}, [x13] // U samples 0-7 + ld1 {v25.8h}, [x14] // V samples 0-7 + + ld1 {v26.8h}, [x15] // U samples 8-15 + ld1 {v27.8h}, [x16] // V samples 8-15 + + smlal v16.4s, v24.4h, v6.h[0] + smlal2 v17.4s, v24.8h, v6.h[0] + smlal v18.4s, v25.4h, v6.h[0] + smlal2 v19.4s, v25.8h, v6.h[0] + + smlal v20.4s, v26.4h, v6.h[0] + smlal2 v21.4s, v26.8h, v6.h[0] + smlal v22.4s, v27.4h, v6.h[0] + smlal2 v23.4s, v27.8h, v6.h[0] + + subs w9, w9, #1 + b.gt .Lfilter_loop_16 + + // Process and store first 8 pixels + sqshrun v28.4h, v16.4s, #16 + sqshrun2 v28.8h, v17.4s, #16 + sqshrun v29.4h, v18.4s, #16 + sqshrun2 v29.8h, v19.4s, #16 + uqshrn v30.8b, v28.8h, #3 // U + uqshrn v31.8b, v29.8h, #3 // V + + // Process and store next 8 pixels + sqshrun v28.4h, v20.4s, #16 + sqshrun2 v28.8h, v21.4s, #16 + sqshrun v29.4h, v22.4s, #16 + sqshrun2 v29.8h, v23.4s, #16 + uqshrn v24.8b, v28.8h, #3 // U + uqshrn v25.8b, v29.8h, #3 // V + + // Store both 8-pixel blocks + st2 {v30.8b, v31.8b}, [x6], #16 + st2 {v24.8b, v25.8b}, [x6], #16 + + subs w7, w7, #16 + add x8, x8, #16 + b.gt .Lloop_16_pixels + ret + + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + // 8-pixel processing path (original code) + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +.Lprocess_8_pixels: + mov x8, #0 // i =3D 0 +.Lloop_8_pixels: + // Initialize accumulators with dither + mov v16.16b, v2.16b // U acc low + mov v17.16b, v3.16b // U acc high + mov v18.16b, v4.16b // V acc low + mov v19.16b, v5.16b // V acc high + + mov w9, w3 // chrFilterSize cou= nter + mov x10, x2 // chrFilter pointer + mov x11, x4 // chrUSrc base + mov x12, x5 // chrVSrc base + +.Lfilter_loop_8: + ldr h6, [x10], #2 // Load filter coeff= icient + + ldr x13, [x11], #8 // chrUSrc[j] + ldr x14, [x12], #8 // chrVSrc[j] + add x13, x13, x8, lsl #1 // &chrUSrc[j][i] + add x14, x14, x8, lsl #1 // &chrVSrc[j][i] + + ld1 {v20.8h}, [x13] // U samples + ld1 {v21.8h}, [x14] // V samples + + smlal v16.4s, v20.4h, v6.h[0] + smlal2 v17.4s, v20.8h, v6.h[0] + smlal v18.4s, v21.4h, v6.h[0] + smlal2 v19.4s, v21.8h, v6.h[0] + + subs w9, w9, #1 + b.gt .Lfilter_loop_8 + + // Final processing and store + sqshrun v26.4h, v16.4s, #16 + sqshrun2 v26.8h, v17.4s, #16 + sqshrun v27.4h, v18.4s, #16 + sqshrun2 v27.8h, v19.4s, #16 + uqshrn v28.8b, v26.8h, #3 // U + uqshrn v29.8b, v27.8h, #3 // V + + st2 {v28.8b, v29.8b}, [x6], #16 + + subs w7, w7, #8 + add x8, x8, #8 + b.gt .Lloop_8_pixels + ret +endfunc + +function ff_yuv2nv12cX_swapped_neon, export=3D1 +// x0 - dstFormat (unused) +// x1 - uint8_t *chrDither +// x2 - int16_t *chrFilter +// x3 - int chrFilterSize +// x4 - int16_t **chrUSrc +// x5 - int16_t **chrVSrc +// x6 - uint8_t *dest +// x7 - int chrDstW + + // Load dither pattern and compute U and V dither vectors + ld1 {v0.8b}, [x1] // chrDither[0..7] + ext v1.8b, v0.8b, v0.8b, #3 // Rotate for V: (= i+3)&7 + + uxtl v0.8h, v0.8b + uxtl v1.8h, v1.8b + + ushll v2.4s, v0.4h, #12 // U dither low + ushll2 v3.4s, v0.8h, #12 // U dither high + ushll v4.4s, v1.4h, #12 // V dither low + ushll2 v5.4s, v1.8h, #12 // V dither high + + // Check if we can process 16 pixels at a time + tst w7, #15 // Check if chrDst= W % 16 =3D=3D 0 + b.ne .Lprocess_swapped_8_pixels // If not,= use 8-pixel version + + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + // 16-pixel processing path + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + mov x8, #0 // i =3D 0 +.Lloop_swapped_16_pixels: + + mov v16.16b, v2.16b // U acc low + mov v17.16b, v3.16b // U acc high + mov v18.16b, v4.16b // V acc low + mov v19.16b, v5.16b // V acc high + + mov v20.16b, v2.16b + mov v21.16b, v3.16b + mov v22.16b, v4.16b + mov v23.16b, v5.16b + + mov w9, w3 // chrFilterSize c= ounter + mov x10, x2 // chrFilter point= er + mov x11, x4 // chrUSrc base + mov x12, x5 // chrVSrc base + +.Lfilter_swapped_loop_16: + ldr h6, [x10], #2 // Load filter coe= fficient + + ldr x13, [x11], #8 // chrUSrc[j] + ldr x14, [x12], #8 // chrVSrc[j] + add x13, x13, x8, lsl #1 // &chrUSrc[j][i] + add x14, x14, x8, lsl #1 // &chrVSrc[j][i] + add x15, x13, #16 // x15 =3D &chrUSr= c[j][i+8] (8 samples * 2 bytes) + add x16, x14, #16 + + ld1 {v24.8h}, [x13] // U samples 0-7 + ld1 {v25.8h}, [x14] // V samples 0-7 + + ld1 {v26.8h}, [x15] // U samples 8-15 + ld1 {v27.8h}, [x16] // V samples 8-15 + + smlal v16.4s, v24.4h, v6.h[0] + smlal2 v17.4s, v24.8h, v6.h[0] + smlal v18.4s, v25.4h, v6.h[0] + smlal2 v19.4s, v25.8h, v6.h[0] + + smlal v20.4s, v26.4h, v6.h[0] + smlal2 v21.4s, v26.8h, v6.h[0] + smlal v22.4s, v27.4h, v6.h[0] + smlal2 v23.4s, v27.8h, v6.h[0] + + subs w9, w9, #1 + b.gt .Lfilter_swapped_loop_16 + + // Process and store first 8 pixels + sqshrun v28.4h, v16.4s, #16 + sqshrun2 v28.8h, v17.4s, #16 + sqshrun v29.4h, v18.4s, #16 + sqshrun2 v29.8h, v19.4s, #16 + uqshrn v30.8b, v29.8h, #3 // V + uqshrn v31.8b, v28.8h, #3 // U + + // Process and store next 8 pixels + sqshrun v28.4h, v20.4s, #16 + sqshrun2 v28.8h, v21.4s, #16 + sqshrun v29.4h, v22.4s, #16 + sqshrun2 v29.8h, v23.4s, #16 + uqshrn v24.8b, v29.8h, #3 // V + uqshrn v25.8b, v28.8h, #3 // U + + // Store both 8-pixel blocks + st2 {v30.8b, v31.8b}, [x6], #16 + st2 {v24.8b, v25.8b}, [x6], #16 + + subs w7, w7, #16 + add x8, x8, #16 + b.gt .Lloop_swapped_16_pixels + ret + + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + // 8-pixel processing path (original code) + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +.Lprocess_swapped_8_pixels: + mov x8, #0 // i =3D 0 +.Lloop_swapped_8_pixels: + // Initialize accumulators with dither + mov v16.16b, v2.16b // U acc low + mov v17.16b, v3.16b // U acc high + mov v18.16b, v4.16b // V acc low + mov v19.16b, v5.16b // V acc high + + mov w9, w3 // chrFilterSize cou= nter + mov x10, x2 // chrFilter pointer + mov x11, x4 // chrUSrc base + mov x12, x5 // chrVSrc base + +.Lfilter_swapped_loop_8: + ldr h6, [x10], #2 // Load filter coeff= icient + + ldr x13, [x11], #8 // chrUSrc[j] + ldr x14, [x12], #8 // chrVSrc[j] + add x13, x13, x8, lsl #1 // &chrUSrc[j][i] + add x14, x14, x8, lsl #1 // &chrVSrc[j][i] + + ld1 {v20.8h}, [x13] // U samples + ld1 {v21.8h}, [x14] // V samples + + smlal v16.4s, v20.4h, v6.h[0] + smlal2 v17.4s, v20.8h, v6.h[0] + smlal v18.4s, v21.4h, v6.h[0] + smlal2 v19.4s, v21.8h, v6.h[0] + + subs w9, w9, #1 + b.gt .Lfilter_swapped_loop_8 + + // Final processing and store + sqshrun v26.4h, v16.4s, #16 + sqshrun2 v26.8h, v17.4s, #16 + sqshrun v27.4h, v18.4s, #16 + sqshrun2 v27.8h, v19.4s, #16 + uqshrn v28.8b, v27.8h, #3 // V + uqshrn v29.8b, v26.8h, #3 // U + + st2 {v28.8b, v29.8b}, [x6], #16 + + subs w7, w7, #8 + add x8, x8, #8 + b.gt .Lloop_swapped_8_pixels + ret +endfunc diff --git a/libswscale/aarch64/swscale.c b/libswscale/aarch64/swscale.c index 6e5a721c1f..5246d53a16 100644 --- a/libswscale/aarch64/swscale.c +++ b/libswscale/aarch64/swscale.c @@ -168,6 +168,16 @@ void ff_yuv2plane1_8_neon( const uint8_t *dither, int offset); +void ff_yuv2nv12cX_notswapped_neon(enum AVPixelFormat dstFormat, const uin= t8_t *chrDither, + const int16_t *chrFilter, int chrFilterSize, + const int16_t **chrUSrc, const int16_t **chrVSrc, + uint8_t *dest, int chrDstW); + +void ff_yuv2nv12cX_swapped_neon(enum AVPixelFormat dstFormat, const uint8_= t *chrDither, + const int16_t *chrFilter, int chrFilterSize, + const int16_t **chrUSrc, const int16_t **chrVSrc, + uint8_t *dest, int chrDstW); + #define ASSIGN_SCALE_FUNC2(hscalefn, filtersize, opt) do { \ if (c->srcBpc =3D=3D 8) { = \ if(c->dstBpc <=3D 14) { = \ @@ -201,6 +211,12 @@ void ff_yuv2plane1_8_neon( default: break; \ } +#define ASSIGN_YUV2NV12_FUNC(yuv2nv12fn, opt, dstFormat) \ + if(!isSwappedChroma(dstFormat)) \ + yuv2nv12fn =3D ff_yuv2nv12cX_notswapped_ ## opt; \ + else \ + yuv2nv12fn =3D ff_yuv2nv12cX_swapped_ ## opt; + #define NEON_INPUT(name) \ void ff_##name##ToY_neon(uint8_t *dst, const uint8_t *src, const uint8_t *= , \ const uint8_t *, int w, uint32_t *coeffs, void *);= \ @@ -275,7 +291,10 @@ av_cold void ff_sws_init_swscale_aarch64(SwsInternal *= c) ASSIGN_VSCALE_FUNC(c->yuv2plane1, neon); if (c->dstBpc =3D=3D 8) { c->yuv2planeX =3D ff_yuv2planeX_8_neon; + if(isSemiPlanarYUV(c->opts.dst_format)) + ASSIGN_YUV2NV12_FUNC(c->yuv2nv12cX, neon, c->opts.dst_forma= t); } + switch (c->opts.src_format) { case AV_PIX_FMT_ABGR: c->lumToYV12 =3D ff_abgr32ToY_neon; -- 2.34.1 2.3 --_004_MA0P287MB1158BA521247AE411CFF896DD66BAMA0P287MB1158INDP_ Content-Type: application/octet-stream; name="swscale-aarch64-output-Implement-neon-assembly-.patch" Content-Description: swscale-aarch64-output-Implement-neon-assembly-.patch Content-Disposition: attachment; filename="swscale-aarch64-output-Implement-neon-assembly-.patch"; size=17316; creation-date="Mon, 09 Jun 2025 15:08:57 GMT"; modification-date="Mon, 09 Jun 2025 15:11:26 GMT" Content-Transfer-Encoding: base64 RnJvbSA0Y2E1ZWFlMWU3MTY0Zjc4Mjk2NzE5ZjE5YWVmOTcyMzllNWIwNDZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYXJzaGl0aGEgU3VyZXNoIDxoYXJzaGl0aGFAbXVsdGljb3Jl d2FyZWluYy5jb20+CkRhdGU6IE1vbiwgMTkgTWF5IDIwMjUgMjI6Mzc6MjAgKzA1MzAKU3ViamVj dDogW1BBVENIXSBzd3NjYWxlL2FhcmNoNjQvb3V0cHV0OiBJbXBsZW1lbnQgbmVvbiBhc3NlbWJs eSBmb3IgeXV2Mm52MTJjWF9jKCkuCgp5dXYybnYxMmNYXzJfNTEyX2FjY3VyYXRlX2M6ICAgICAg ICAgICAgICAgICAgICAgICAgICAzNTA4LjggKCAxLjAweCkKeXV2Mm52MTJjWF8yXzUxMl9hY2N1 cmF0ZV9uZW9uOiAgICAgICAgICAgICAgICAgICAgICAgIDM2OS4yICggOS41MHgpCnl1djJudjEy Y1hfMl81MTJfYXBwcm94aW1hdGVfYzogICAgICAgICAgICAgICAgICAgICAgIDM0OTkuMCAoIDEu MDB4KQp5dXYybnYxMmNYXzJfNTEyX2FwcHJveGltYXRlX25lb246ICAgICAgICAgICAgICAgICAg ICAgMzcwLjIgKCA5LjQ1eCkKeXV2Mm52MTJjWF80XzUxMl9hY2N1cmF0ZV9jOiAgICAgICAgICAg ICAgICAgICAgICAgICAgNDY4My4wICggMS4wMHgpCnl1djJudjEyY1hfNF81MTJfYWNjdXJhdGVf bmVvbjogICAgICAgICAgICAgICAgICAgICAgICA1NjguOCAoIDguMjN4KQp5dXYybnYxMmNYXzRf NTEyX2FwcHJveGltYXRlX2M6ICAgICAgICAgICAgICAgICAgICAgICA0NjgyLjYgKCAxLjAweCkK eXV2Mm52MTJjWF80XzUxMl9hcHByb3hpbWF0ZV9uZW9uOiAgICAgICAgICAgICAgICAgICAgIDU2 OS45ICggOC4yMngpCnl1djJudjEyY1hfOF81MTJfYWNjdXJhdGVfYzogICAgICAgICAgICAgICAg ICAgICAgICAgIDcyNDMuMCAoIDEuMDB4KQp5dXYybnYxMmNYXzhfNTEyX2FjY3VyYXRlX25lb246 ICAgICAgICAgICAgICAgICAgICAgICAgOTM3LjYgKCA3LjcyeCkKeXV2Mm52MTJjWF84XzUxMl9h cHByb3hpbWF0ZV9jOiAgICAgICAgICAgICAgICAgICAgICAgNzIzNS45ICggMS4wMHgpCnl1djJu djEyY1hfOF81MTJfYXBwcm94aW1hdGVfbmVvbjogICAgICAgICAgICAgICAgICAgICA5MzguMyAo IDcuNzF4KQp5dXYybnYxMmNYXzE2XzUxMl9hY2N1cmF0ZV9jOiAgICAgICAgICAgICAgICAgICAg ICAgIDEzNzQ5LjcgKCAxLjAweCkKeXV2Mm52MTJjWF8xNl81MTJfYWNjdXJhdGVfbmVvbjogICAg ICAgICAgICAgICAgICAgICAgMTcwOC4xICggOC4wNXgpCnl1djJudjEyY1hfMTZfNTEyX2FwcHJv eGltYXRlX2M6ICAgICAgICAgICAgICAgICAgICAgMTM3NTAuMCAoIDEuMDB4KQp5dXYybnYxMmNY XzE2XzUxMl9hcHByb3hpbWF0ZV9uZW9uOiAgICAgICAgICAgICAgICAgICAxNzA4LjYgKCA4LjA1 eCkKLS0tCiBsaWJzd3NjYWxlL2FhcmNoNjQvb3V0cHV0LlMgIHwgMzA2ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBsaWJzd3NjYWxlL2FhcmNoNjQvc3dzY2FsZS5jIHwgIDE5 ICsrKwogMiBmaWxlcyBjaGFuZ2VkLCAzMjUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2xp YnN3c2NhbGUvYWFyY2g2NC9vdXRwdXQuUyBiL2xpYnN3c2NhbGUvYWFyY2g2NC9vdXRwdXQuUwpp bmRleCAxOTBjNDM4ODcwLi4yZDg3Y2M2YTVlIDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL2FhcmNo NjQvb3V0cHV0LlMKKysrIGIvbGlic3dzY2FsZS9hYXJjaDY0L291dHB1dC5TCkBAIC0yMjYsMyAr MjI2LDMwOSBAQCBmdW5jdGlvbiBmZl95dXYycGxhbmUxXzhfbmVvbiwgZXhwb3J0PTEKICAgICAg ICAgYi5ndCAgICAgICAgICAgIDJiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9v cCB1bnRpbCB3aWR0aCBjb25zdW1lZAogICAgICAgICByZXQKIGVuZGZ1bmMKKworZnVuY3Rpb24g ZmZfeXV2Mm52MTJjWF9ub3Rzd2FwcGVkX25lb24sIGV4cG9ydD0xCisvLyB4MCAtIGRzdEZvcm1h dCAodW51c2VkKQorLy8geDEgLSB1aW50OF90ICpjaHJEaXRoZXIKKy8vIHgyIC0gaW50MTZfdCAq Y2hyRmlsdGVyCisvLyB4MyAtIGludCBjaHJGaWx0ZXJTaXplCisvLyB4NCAtIGludDE2X3QgKipj aHJVU3JjCisvLyB4NSAtIGludDE2X3QgKipjaHJWU3JjCisvLyB4NiAtIHVpbnQ4X3QgKmRlc3QK Ky8vIHg3IC0gaW50IGNockRzdFcKKworICAgICAgICAvLyBMb2FkIGRpdGhlciBwYXR0ZXJuIGFu ZCBjb21wdXRlIFUgYW5kIFYgZGl0aGVyIHZlY3RvcnMKKyAgICAgICAgbGQxICAgICAgICAgICAg IHt2MC44Yn0sIFt4MV0gICAgICAgICAgICAgICAgICAgLy8gY2hyRGl0aGVyWzAuLjddCisgICAg ICAgIGV4dCAgICAgICAgICAgICB2MS44YiwgdjAuOGIsIHYwLjhiLCAjMyAgICAgICAgIC8vIFJv dGF0ZSBmb3IgVjogKGkrMykmNworCisgICAgICAgIHV4dGwgICAgICAgICAgICB2MC44aCwgdjAu OGIKKyAgICAgICAgdXh0bCAgICAgICAgICAgIHYxLjhoLCB2MS44YgorCisgICAgICAgIHVzaGxs ICAgICAgICAgICB2Mi40cywgdjAuNGgsICMxMiAgICAgICAgICAgICAgIC8vIFUgZGl0aGVyIGxv dworICAgICAgICB1c2hsbDIgICAgICAgICAgdjMuNHMsIHYwLjhoLCAjMTIgICAgICAgICAgICAg ICAvLyBVIGRpdGhlciBoaWdoCisgICAgICAgIHVzaGxsICAgICAgICAgICB2NC40cywgdjEuNGgs ICMxMiAgICAgICAgICAgICAgIC8vIFYgZGl0aGVyIGxvdworICAgICAgICB1c2hsbDIgICAgICAg ICAgdjUuNHMsIHYxLjhoLCAjMTIgICAgICAgICAgICAgICAvLyBWIGRpdGhlciBoaWdoCisKKyAg ICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIHByb2Nlc3MgMTYgcGl4ZWxzIGF0IGEgdGltZQorICAg ICAgICB0c3QgICAgICAgICAgICAgdzcsICMxNSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBD aGVjayBpZiBjaHJEc3RXICUgMTYgPT0gMAorICAgICAgICBiLm5lICAgICAgICAgICAgLkxwcm9j ZXNzXzhfcGl4ZWxzICAgICAgICAgICAgICAvLyBJZiBub3QsIHVzZSA4LXBpeGVsIHZlcnNpb24K KworICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKyAgICAgICAgLy8gMTYtcGl4ZWwgcHJvY2Vzc2luZyBwYXRoCisgICAgICAgIC8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICBtb3YgICAg ICAgICAgICAgeDgsICMwICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpID0gMAorLkxsb29w XzE2X3BpeGVsczoKKworICAgICAgICBtb3YgICAgICAgICAgICAgdjE2LjE2YiwgdjIuMTZiICAg ICAgICAgICAgICAgICAvLyBVIGFjYyBsb3cKKyAgICAgICAgbW92ICAgICAgICAgICAgIHYxNy4x NmIsIHYzLjE2YiAgICAgICAgICAgICAgICAgLy8gVSBhY2MgaGlnaAorICAgICAgICBtb3YgICAg ICAgICAgICAgdjE4LjE2YiwgdjQuMTZiICAgICAgICAgICAgICAgICAvLyBWIGFjYyBsb3cKKyAg ICAgICAgbW92ICAgICAgICAgICAgIHYxOS4xNmIsIHY1LjE2YiAgICAgICAgICAgICAgICAgLy8g ViBhY2MgaGlnaAorCisgICAgICAgIG1vdiAgICAgICAgICAgICB2MjAuMTZiLCB2Mi4xNmIKKyAg ICAgICAgbW92ICAgICAgICAgICAgIHYyMS4xNmIsIHYzLjE2YgorICAgICAgICBtb3YgICAgICAg ICAgICAgdjIyLjE2YiwgdjQuMTZiCisgICAgICAgIG1vdiAgICAgICAgICAgICB2MjMuMTZiLCB2 NS4xNmIKKworICAgICAgICBtb3YgICAgICAgICAgICAgdzksIHczICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBjaHJGaWx0ZXJTaXplIGNvdW50ZXIKKyAgICAgICAgbW92ICAgICAgICAgICAg IHgxMCwgeDIgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hyRmlsdGVyIHBvaW50ZXIKKyAg ICAgICAgbW92ICAgICAgICAgICAgIHgxMSwgeDQgICAgICAgICAgICAgICAgICAgICAgICAgLy8g Y2hyVVNyYyBiYXNlCisgICAgICAgIG1vdiAgICAgICAgICAgICB4MTIsIHg1ICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIGNoclZTcmMgYmFzZQorCisuTGZpbHRlcl9sb29wXzE2OgorICAgICAg ICBsZHIgICAgICAgICAgICAgaDYsIFt4MTBdLCAjMiAgICAgICAgICAgICAgICAgICAvLyBMb2Fk IGZpbHRlciBjb2VmZmljaWVudAorCisgICAgICAgIGxkciAgICAgICAgICAgICB4MTMsIFt4MTFd LCAjOCAgICAgICAgICAgICAgICAgIC8vIGNoclVTcmNbal0KKyAgICAgICAgbGRyICAgICAgICAg ICAgIHgxNCwgW3gxMl0sICM4ICAgICAgICAgICAgICAgICAgLy8gY2hyVlNyY1tqXQorICAgICAg ICBhZGQgICAgICAgICAgICAgeDEzLCB4MTMsIHg4LCBsc2wgIzEgICAgICAgICAgICAvLyAmY2hy VVNyY1tqXVtpXQorICAgICAgICBhZGQgICAgICAgICAgICAgeDE0LCB4MTQsIHg4LCBsc2wgIzEg ICAgICAgICAgICAvLyAmY2hyVlNyY1tqXVtpXQorICAgICAgICBhZGQgICAgICAgICAgICAgeDE1 LCB4MTMsICMxNiAgICAgICAgICAgICAgICAgICAvLyB4MTUgPSAmY2hyVVNyY1tqXVtpKzhdICg4 IHNhbXBsZXMgKiAyIGJ5dGVzKQorICAgICAgICBhZGQgICAgICAgICAgICAgeDE2LCB4MTQsICMx NgorCisgICAgICAgIGxkMSAgICAgICAgICAgICB7djI0LjhofSwgW3gxM10gICAgICAgICAgICAg ICAgIC8vIFUgc2FtcGxlcyAwLTcKKyAgICAgICAgbGQxICAgICAgICAgICAgIHt2MjUuOGh9LCBb eDE0XSAgICAgICAgICAgICAgICAgLy8gViBzYW1wbGVzIDAtNworCisgICAgICAgIGxkMSAgICAg ICAgICAgICB7djI2LjhofSwgW3gxNV0gICAgICAgICAgICAgICAgIC8vIFUgc2FtcGxlcyA4LTE1 CisgICAgICAgIGxkMSAgICAgICAgICAgICB7djI3LjhofSwgW3gxNl0gICAgICAgICAgICAgICAg IC8vIFYgc2FtcGxlcyA4LTE1CisKKyAgICAgICAgc21sYWwgICAgICAgICAgIHYxNi40cywgdjI0 LjRoLCB2Ni5oWzBdCisgICAgICAgIHNtbGFsMiAgICAgICAgICB2MTcuNHMsIHYyNC44aCwgdjYu aFswXQorICAgICAgICBzbWxhbCAgICAgICAgICAgdjE4LjRzLCB2MjUuNGgsIHY2LmhbMF0KKyAg ICAgICAgc21sYWwyICAgICAgICAgIHYxOS40cywgdjI1LjhoLCB2Ni5oWzBdCisKKyAgICAgICAg c21sYWwgICAgICAgICAgIHYyMC40cywgdjI2LjRoLCB2Ni5oWzBdCisgICAgICAgIHNtbGFsMiAg ICAgICAgICB2MjEuNHMsIHYyNi44aCwgdjYuaFswXQorICAgICAgICBzbWxhbCAgICAgICAgICAg djIyLjRzLCB2MjcuNGgsIHY2LmhbMF0KKyAgICAgICAgc21sYWwyICAgICAgICAgIHYyMy40cywg djI3LjhoLCB2Ni5oWzBdCisKKyAgICAgICAgc3VicyAgICAgICAgICAgIHc5LCB3OSwgIzEKKyAg ICAgICAgYi5ndCAgICAgICAgICAgIC5MZmlsdGVyX2xvb3BfMTYKKworICAgICAgICAvLyBQcm9j ZXNzIGFuZCBzdG9yZSBmaXJzdCA4IHBpeGVscworICAgICAgICBzcXNocnVuICAgICAgICAgdjI4 LjRoLCB2MTYuNHMsICMxNgorICAgICAgICBzcXNocnVuMiAgICAgICAgdjI4LjhoLCB2MTcuNHMs ICMxNgorICAgICAgICBzcXNocnVuICAgICAgICAgdjI5LjRoLCB2MTguNHMsICMxNgorICAgICAg ICBzcXNocnVuMiAgICAgICAgdjI5LjhoLCB2MTkuNHMsICMxNgorICAgICAgICB1cXNocm4gICAg ICAgICAgdjMwLjhiLCB2MjguOGgsICMzICAgICAgICAgICAgICAvLyBVCisgICAgICAgIHVxc2hy biAgICAgICAgICB2MzEuOGIsIHYyOS44aCwgIzMgICAgICAgICAgICAgIC8vIFYKKworICAgICAg ICAvLyBQcm9jZXNzIGFuZCBzdG9yZSBuZXh0IDggcGl4ZWxzCisgICAgICAgIHNxc2hydW4gICAg ICAgICB2MjguNGgsIHYyMC40cywgIzE2CisgICAgICAgIHNxc2hydW4yICAgICAgICB2MjguOGgs IHYyMS40cywgIzE2CisgICAgICAgIHNxc2hydW4gICAgICAgICB2MjkuNGgsIHYyMi40cywgIzE2 CisgICAgICAgIHNxc2hydW4yICAgICAgICB2MjkuOGgsIHYyMy40cywgIzE2CisgICAgICAgIHVx c2hybiAgICAgICAgICB2MjQuOGIsIHYyOC44aCwgIzMgICAgICAgICAgICAgIC8vIFUKKyAgICAg ICAgdXFzaHJuICAgICAgICAgIHYyNS44YiwgdjI5LjhoLCAjMyAgICAgICAgICAgICAgLy8gVgor CisgICAgICAgIC8vIFN0b3JlIGJvdGggOC1waXhlbCBibG9ja3MKKyAgICAgICAgc3QyICAgICAg ICAgICAgIHt2MzAuOGIsIHYzMS44Yn0sIFt4Nl0sICMxNgorICAgICAgICBzdDIgICAgICAgICAg ICAge3YyNC44YiwgdjI1LjhifSwgW3g2XSwgIzE2CisKKyAgICAgICAgc3VicyAgICAgICAgICAg IHc3LCB3NywgIzE2CisgICAgICAgIGFkZCAgICAgICAgICAgICB4OCwgeDgsICMxNgorICAgICAg ICBiLmd0ICAgICAgICAgICAgLkxsb29wXzE2X3BpeGVscworICAgICAgICByZXQKKworICAgICAg ICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAg ICAgLy8gOC1waXhlbCBwcm9jZXNzaW5nIHBhdGggKG9yaWdpbmFsIGNvZGUpCisgICAgICAgIC8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLkxwcm9jZXNz XzhfcGl4ZWxzOgorICAgICAgICBtb3YgICAgICAgICAgICAgeDgsICMwICAgICAgICAgICAgICAg ICAgICAgICAgLy8gaSA9IDAKKy5MbG9vcF84X3BpeGVsczoKKyAgICAgICAgLy8gSW5pdGlhbGl6 ZSBhY2N1bXVsYXRvcnMgd2l0aCBkaXRoZXIKKyAgICAgICAgbW92ICAgICAgICAgICAgIHYxNi4x NmIsIHYyLjE2YiAgICAgICAgICAgICAgIC8vIFUgYWNjIGxvdworICAgICAgICBtb3YgICAgICAg ICAgICAgdjE3LjE2YiwgdjMuMTZiICAgICAgICAgICAgICAgLy8gVSBhY2MgaGlnaAorICAgICAg ICBtb3YgICAgICAgICAgICAgdjE4LjE2YiwgdjQuMTZiICAgICAgICAgICAgICAgLy8gViBhY2Mg bG93CisgICAgICAgIG1vdiAgICAgICAgICAgICB2MTkuMTZiLCB2NS4xNmIgICAgICAgICAgICAg ICAvLyBWIGFjYyBoaWdoCisKKyAgICAgICAgbW92ICAgICAgICAgICAgIHc5LCB3MyAgICAgICAg ICAgICAgICAgICAgICAgIC8vIGNockZpbHRlclNpemUgY291bnRlcgorICAgICAgICBtb3YgICAg ICAgICAgICAgeDEwLCB4MiAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hyRmlsdGVyIHBvaW50 ZXIKKyAgICAgICAgbW92ICAgICAgICAgICAgIHgxMSwgeDQgICAgICAgICAgICAgICAgICAgICAg IC8vIGNoclVTcmMgYmFzZQorICAgICAgICBtb3YgICAgICAgICAgICAgeDEyLCB4NSAgICAgICAg ICAgICAgICAgICAgICAgLy8gY2hyVlNyYyBiYXNlCisKKy5MZmlsdGVyX2xvb3BfODoKKyAgICAg ICAgbGRyICAgICAgICAgICAgIGg2LCBbeDEwXSwgIzIgICAgICAgICAgICAgICAgIC8vIExvYWQg ZmlsdGVyIGNvZWZmaWNpZW50CisKKyAgICAgICAgbGRyICAgICAgICAgICAgIHgxMywgW3gxMV0s ICM4ICAgICAgICAgICAgICAgIC8vIGNoclVTcmNbal0KKyAgICAgICAgbGRyICAgICAgICAgICAg IHgxNCwgW3gxMl0sICM4ICAgICAgICAgICAgICAgIC8vIGNoclZTcmNbal0KKyAgICAgICAgYWRk ICAgICAgICAgICAgIHgxMywgeDEzLCB4OCwgbHNsICMxICAgICAgICAgIC8vICZjaHJVU3JjW2pd W2ldCisgICAgICAgIGFkZCAgICAgICAgICAgICB4MTQsIHgxNCwgeDgsIGxzbCAjMSAgICAgICAg ICAvLyAmY2hyVlNyY1tqXVtpXQorCisgICAgICAgIGxkMSAgICAgICAgICAgICB7djIwLjhofSwg W3gxM10gICAgICAgICAgICAgICAvLyBVIHNhbXBsZXMKKyAgICAgICAgbGQxICAgICAgICAgICAg IHt2MjEuOGh9LCBbeDE0XSAgICAgICAgICAgICAgIC8vIFYgc2FtcGxlcworCisgICAgICAgIHNt bGFsICAgICAgICAgICB2MTYuNHMsIHYyMC40aCwgdjYuaFswXQorICAgICAgICBzbWxhbDIgICAg ICAgICAgdjE3LjRzLCB2MjAuOGgsIHY2LmhbMF0KKyAgICAgICAgc21sYWwgICAgICAgICAgIHYx OC40cywgdjIxLjRoLCB2Ni5oWzBdCisgICAgICAgIHNtbGFsMiAgICAgICAgICB2MTkuNHMsIHYy MS44aCwgdjYuaFswXQorCisgICAgICAgIHN1YnMgICAgICAgICAgICB3OSwgdzksICMxCisgICAg ICAgIGIuZ3QgICAgICAgICAgICAuTGZpbHRlcl9sb29wXzgKKworICAgICAgICAvLyBGaW5hbCBw cm9jZXNzaW5nIGFuZCBzdG9yZQorICAgICAgICBzcXNocnVuICAgICAgICAgdjI2LjRoLCB2MTYu NHMsICMxNgorICAgICAgICBzcXNocnVuMiAgICAgICAgdjI2LjhoLCB2MTcuNHMsICMxNgorICAg ICAgICBzcXNocnVuICAgICAgICAgdjI3LjRoLCB2MTguNHMsICMxNgorICAgICAgICBzcXNocnVu MiAgICAgICAgdjI3LjhoLCB2MTkuNHMsICMxNgorICAgICAgICB1cXNocm4gICAgICAgICAgdjI4 LjhiLCB2MjYuOGgsICMzICAgICAgICAgICAgLy8gVQorICAgICAgICB1cXNocm4gICAgICAgICAg djI5LjhiLCB2MjcuOGgsICMzICAgICAgICAgICAgLy8gVgorCisgICAgICAgIHN0MiAgICAgICAg ICAgICB7djI4LjhiLCB2MjkuOGJ9LCBbeDZdLCAjMTYKKworICAgICAgICBzdWJzICAgICAgICAg ICAgdzcsIHc3LCAjOAorICAgICAgICBhZGQgICAgICAgICAgICAgeDgsIHg4LCAjOAorICAgICAg ICBiLmd0ICAgICAgICAgICAgLkxsb29wXzhfcGl4ZWxzCisgICAgICAgIHJldAorZW5kZnVuYwor CitmdW5jdGlvbiBmZl95dXYybnYxMmNYX3N3YXBwZWRfbmVvbiwgZXhwb3J0PTEKKy8vIHgwIC0g ZHN0Rm9ybWF0ICh1bnVzZWQpCisvLyB4MSAtIHVpbnQ4X3QgKmNockRpdGhlcgorLy8geDIgLSBp bnQxNl90ICpjaHJGaWx0ZXIKKy8vIHgzIC0gaW50IGNockZpbHRlclNpemUKKy8vIHg0IC0gaW50 MTZfdCAqKmNoclVTcmMKKy8vIHg1IC0gaW50MTZfdCAqKmNoclZTcmMKKy8vIHg2IC0gdWludDhf dCAqZGVzdAorLy8geDcgLSBpbnQgY2hyRHN0VworCisgICAgICAgIC8vIExvYWQgZGl0aGVyIHBh dHRlcm4gYW5kIGNvbXB1dGUgVSBhbmQgViBkaXRoZXIgdmVjdG9ycworICAgICAgICBsZDEgICAg ICAgICAgICAge3YwLjhifSwgW3gxXSAgICAgICAgICAgICAgICAgICAvLyBjaHJEaXRoZXJbMC4u N10KKyAgICAgICAgZXh0ICAgICAgICAgICAgIHYxLjhiLCB2MC44YiwgdjAuOGIsICMzICAgICAg ICAgLy8gUm90YXRlIGZvciBWOiAoaSszKSY3CisKKyAgICAgICAgdXh0bCAgICAgICAgICAgIHYw LjhoLCB2MC44YgorICAgICAgICB1eHRsICAgICAgICAgICAgdjEuOGgsIHYxLjhiCisKKyAgICAg ICAgdXNobGwgICAgICAgICAgIHYyLjRzLCB2MC40aCwgIzEyICAgICAgICAgICAgICAgLy8gVSBk aXRoZXIgbG93CisgICAgICAgIHVzaGxsMiAgICAgICAgICB2My40cywgdjAuOGgsICMxMiAgICAg ICAgICAgICAgIC8vIFUgZGl0aGVyIGhpZ2gKKyAgICAgICAgdXNobGwgICAgICAgICAgIHY0LjRz LCB2MS40aCwgIzEyICAgICAgICAgICAgICAgLy8gViBkaXRoZXIgbG93CisgICAgICAgIHVzaGxs MiAgICAgICAgICB2NS40cywgdjEuOGgsICMxMiAgICAgICAgICAgICAgIC8vIFYgZGl0aGVyIGhp Z2gKKworICAgICAgICAvLyBDaGVjayBpZiB3ZSBjYW4gcHJvY2VzcyAxNiBwaXhlbHMgYXQgYSB0 aW1lCisgICAgICAgIHRzdCAgICAgICAgICAgICB3NywgIzE1ICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIENoZWNrIGlmIGNockRzdFcgJSAxNiA9PSAwCisgICAgICAgIGIubmUgICAgICAgICAg ICAuTHByb2Nlc3Nfc3dhcHBlZF84X3BpeGVscyAgICAgICAgICAgICAgLy8gSWYgbm90LCB1c2Ug OC1waXhlbCB2ZXJzaW9uCisKKyAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vIDE2LXBpeGVsIHByb2Nlc3NpbmcgcGF0aAor ICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KyAgICAgICAgbW92ICAgICAgICAgICAgIHg4LCAjMCAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gaSA9IDAKKy5MbG9vcF9zd2FwcGVkXzE2X3BpeGVsczoKKworICAgICAgICBtb3YgICAgICAg ICAgICAgdjE2LjE2YiwgdjIuMTZiICAgICAgICAgICAgICAgICAvLyBVIGFjYyBsb3cKKyAgICAg ICAgbW92ICAgICAgICAgICAgIHYxNy4xNmIsIHYzLjE2YiAgICAgICAgICAgICAgICAgLy8gVSBh Y2MgaGlnaAorICAgICAgICBtb3YgICAgICAgICAgICAgdjE4LjE2YiwgdjQuMTZiICAgICAgICAg ICAgICAgICAvLyBWIGFjYyBsb3cKKyAgICAgICAgbW92ICAgICAgICAgICAgIHYxOS4xNmIsIHY1 LjE2YiAgICAgICAgICAgICAgICAgLy8gViBhY2MgaGlnaAorCisgICAgICAgIG1vdiAgICAgICAg ICAgICB2MjAuMTZiLCB2Mi4xNmIKKyAgICAgICAgbW92ICAgICAgICAgICAgIHYyMS4xNmIsIHYz LjE2YgorICAgICAgICBtb3YgICAgICAgICAgICAgdjIyLjE2YiwgdjQuMTZiCisgICAgICAgIG1v diAgICAgICAgICAgICB2MjMuMTZiLCB2NS4xNmIKKworICAgICAgICBtb3YgICAgICAgICAgICAg dzksIHczICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaHJGaWx0ZXJTaXplIGNvdW50ZXIK KyAgICAgICAgbW92ICAgICAgICAgICAgIHgxMCwgeDIgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gY2hyRmlsdGVyIHBvaW50ZXIKKyAgICAgICAgbW92ICAgICAgICAgICAgIHgxMSwgeDQgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gY2hyVVNyYyBiYXNlCisgICAgICAgIG1vdiAgICAgICAg ICAgICB4MTIsIHg1ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoclZTcmMgYmFzZQorCisu TGZpbHRlcl9zd2FwcGVkX2xvb3BfMTY6CisgICAgICAgIGxkciAgICAgICAgICAgICBoNiwgW3gx MF0sICMyICAgICAgICAgICAgICAgICAgIC8vIExvYWQgZmlsdGVyIGNvZWZmaWNpZW50CisKKyAg ICAgICAgbGRyICAgICAgICAgICAgIHgxMywgW3gxMV0sICM4ICAgICAgICAgICAgICAgICAgLy8g Y2hyVVNyY1tqXQorICAgICAgICBsZHIgICAgICAgICAgICAgeDE0LCBbeDEyXSwgIzggICAgICAg ICAgICAgICAgICAvLyBjaHJWU3JjW2pdCisgICAgICAgIGFkZCAgICAgICAgICAgICB4MTMsIHgx MywgeDgsIGxzbCAjMSAgICAgICAgICAgIC8vICZjaHJVU3JjW2pdW2ldCisgICAgICAgIGFkZCAg ICAgICAgICAgICB4MTQsIHgxNCwgeDgsIGxzbCAjMSAgICAgICAgICAgIC8vICZjaHJWU3JjW2pd W2ldCisgICAgICAgIGFkZCAgICAgICAgICAgICB4MTUsIHgxMywgIzE2ICAgICAgICAgICAgICAg ICAgIC8vIHgxNSA9ICZjaHJVU3JjW2pdW2krOF0gKDggc2FtcGxlcyAqIDIgYnl0ZXMpCisgICAg ICAgIGFkZCAgICAgICAgICAgICB4MTYsIHgxNCwgIzE2CisKKyAgICAgICAgbGQxICAgICAgICAg ICAgIHt2MjQuOGh9LCBbeDEzXSAgICAgICAgICAgICAgICAgLy8gVSBzYW1wbGVzIDAtNworICAg ICAgICBsZDEgICAgICAgICAgICAge3YyNS44aH0sIFt4MTRdICAgICAgICAgICAgICAgICAvLyBW IHNhbXBsZXMgMC03CisKKyAgICAgICAgbGQxICAgICAgICAgICAgIHt2MjYuOGh9LCBbeDE1XSAg ICAgICAgICAgICAgICAgLy8gVSBzYW1wbGVzIDgtMTUKKyAgICAgICAgbGQxICAgICAgICAgICAg IHt2MjcuOGh9LCBbeDE2XSAgICAgICAgICAgICAgICAgLy8gViBzYW1wbGVzIDgtMTUKKworICAg ICAgICBzbWxhbCAgICAgICAgICAgdjE2LjRzLCB2MjQuNGgsIHY2LmhbMF0KKyAgICAgICAgc21s YWwyICAgICAgICAgIHYxNy40cywgdjI0LjhoLCB2Ni5oWzBdCisgICAgICAgIHNtbGFsICAgICAg ICAgICB2MTguNHMsIHYyNS40aCwgdjYuaFswXQorICAgICAgICBzbWxhbDIgICAgICAgICAgdjE5 LjRzLCB2MjUuOGgsIHY2LmhbMF0KKworICAgICAgICBzbWxhbCAgICAgICAgICAgdjIwLjRzLCB2 MjYuNGgsIHY2LmhbMF0KKyAgICAgICAgc21sYWwyICAgICAgICAgIHYyMS40cywgdjI2LjhoLCB2 Ni5oWzBdCisgICAgICAgIHNtbGFsICAgICAgICAgICB2MjIuNHMsIHYyNy40aCwgdjYuaFswXQor ICAgICAgICBzbWxhbDIgICAgICAgICAgdjIzLjRzLCB2MjcuOGgsIHY2LmhbMF0KKworICAgICAg ICBzdWJzICAgICAgICAgICAgdzksIHc5LCAjMQorICAgICAgICBiLmd0ICAgICAgICAgICAgLkxm aWx0ZXJfc3dhcHBlZF9sb29wXzE2CisKKyAgICAgICAgLy8gUHJvY2VzcyBhbmQgc3RvcmUgZmly c3QgOCBwaXhlbHMKKyAgICAgICAgc3FzaHJ1biAgICAgICAgIHYyOC40aCwgdjE2LjRzLCAjMTYK KyAgICAgICAgc3FzaHJ1bjIgICAgICAgIHYyOC44aCwgdjE3LjRzLCAjMTYKKyAgICAgICAgc3Fz aHJ1biAgICAgICAgIHYyOS40aCwgdjE4LjRzLCAjMTYKKyAgICAgICAgc3FzaHJ1bjIgICAgICAg IHYyOS44aCwgdjE5LjRzLCAjMTYKKyAgICAgICAgdXFzaHJuICAgICAgICAgIHYzMC44YiwgdjI5 LjhoLCAjMyAgICAgICAgICAgICAgLy8gVgorICAgICAgICB1cXNocm4gICAgICAgICAgdjMxLjhi LCB2MjguOGgsICMzICAgICAgICAgICAgICAvLyBVCisKKyAgICAgICAgLy8gUHJvY2VzcyBhbmQg c3RvcmUgbmV4dCA4IHBpeGVscworICAgICAgICBzcXNocnVuICAgICAgICAgdjI4LjRoLCB2MjAu NHMsICMxNgorICAgICAgICBzcXNocnVuMiAgICAgICAgdjI4LjhoLCB2MjEuNHMsICMxNgorICAg ICAgICBzcXNocnVuICAgICAgICAgdjI5LjRoLCB2MjIuNHMsICMxNgorICAgICAgICBzcXNocnVu MiAgICAgICAgdjI5LjhoLCB2MjMuNHMsICMxNgorICAgICAgICB1cXNocm4gICAgICAgICAgdjI0 LjhiLCB2MjkuOGgsICMzICAgICAgICAgICAgICAvLyBWCisgICAgICAgIHVxc2hybiAgICAgICAg ICB2MjUuOGIsIHYyOC44aCwgIzMgICAgICAgICAgICAgIC8vIFUKKworICAgICAgICAvLyBTdG9y ZSBib3RoIDgtcGl4ZWwgYmxvY2tzCisgICAgICAgIHN0MiAgICAgICAgICAgICB7djMwLjhiLCB2 MzEuOGJ9LCBbeDZdLCAjMTYKKyAgICAgICAgc3QyICAgICAgICAgICAgIHt2MjQuOGIsIHYyNS44 Yn0sIFt4Nl0sICMxNgorCisgICAgICAgIHN1YnMgICAgICAgICAgICB3NywgdzcsICMxNgorICAg ICAgICBhZGQgICAgICAgICAgICAgeDgsIHg4LCAjMTYKKyAgICAgICAgYi5ndCAgICAgICAgICAg IC5MbG9vcF9zd2FwcGVkXzE2X3BpeGVscworICAgICAgICByZXQKKworICAgICAgICAvLyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgLy8gOC1w aXhlbCBwcm9jZXNzaW5nIHBhdGggKG9yaWdpbmFsIGNvZGUpCisgICAgICAgIC8vID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLkxwcm9jZXNzX3N3YXBwZWRf OF9waXhlbHM6CisgICAgICAgIG1vdiAgICAgICAgICAgICB4OCwgIzAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBpID0gMAorLkxsb29wX3N3YXBwZWRfOF9waXhlbHM6CisgICAgICAgIC8vIElu aXRpYWxpemUgYWNjdW11bGF0b3JzIHdpdGggZGl0aGVyCisgICAgICAgIG1vdiAgICAgICAgICAg ICB2MTYuMTZiLCB2Mi4xNmIgICAgICAgICAgICAgICAvLyBVIGFjYyBsb3cKKyAgICAgICAgbW92 ICAgICAgICAgICAgIHYxNy4xNmIsIHYzLjE2YiAgICAgICAgICAgICAgIC8vIFUgYWNjIGhpZ2gK KyAgICAgICAgbW92ICAgICAgICAgICAgIHYxOC4xNmIsIHY0LjE2YiAgICAgICAgICAgICAgIC8v IFYgYWNjIGxvdworICAgICAgICBtb3YgICAgICAgICAgICAgdjE5LjE2YiwgdjUuMTZiICAgICAg ICAgICAgICAgLy8gViBhY2MgaGlnaAorCisgICAgICAgIG1vdiAgICAgICAgICAgICB3OSwgdzMg ICAgICAgICAgICAgICAgICAgICAgICAvLyBjaHJGaWx0ZXJTaXplIGNvdW50ZXIKKyAgICAgICAg bW92ICAgICAgICAgICAgIHgxMCwgeDIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNockZpbHRl ciBwb2ludGVyCisgICAgICAgIG1vdiAgICAgICAgICAgICB4MTEsIHg0ICAgICAgICAgICAgICAg ICAgICAgICAvLyBjaHJVU3JjIGJhc2UKKyAgICAgICAgbW92ICAgICAgICAgICAgIHgxMiwgeDUg ICAgICAgICAgICAgICAgICAgICAgIC8vIGNoclZTcmMgYmFzZQorCisuTGZpbHRlcl9zd2FwcGVk X2xvb3BfODoKKyAgICAgICAgbGRyICAgICAgICAgICAgIGg2LCBbeDEwXSwgIzIgICAgICAgICAg ICAgICAgIC8vIExvYWQgZmlsdGVyIGNvZWZmaWNpZW50CisKKyAgICAgICAgbGRyICAgICAgICAg ICAgIHgxMywgW3gxMV0sICM4ICAgICAgICAgICAgICAgIC8vIGNoclVTcmNbal0KKyAgICAgICAg bGRyICAgICAgICAgICAgIHgxNCwgW3gxMl0sICM4ICAgICAgICAgICAgICAgIC8vIGNoclZTcmNb al0KKyAgICAgICAgYWRkICAgICAgICAgICAgIHgxMywgeDEzLCB4OCwgbHNsICMxICAgICAgICAg IC8vICZjaHJVU3JjW2pdW2ldCisgICAgICAgIGFkZCAgICAgICAgICAgICB4MTQsIHgxNCwgeDgs IGxzbCAjMSAgICAgICAgICAvLyAmY2hyVlNyY1tqXVtpXQorCisgICAgICAgIGxkMSAgICAgICAg ICAgICB7djIwLjhofSwgW3gxM10gICAgICAgICAgICAgICAvLyBVIHNhbXBsZXMKKyAgICAgICAg bGQxICAgICAgICAgICAgIHt2MjEuOGh9LCBbeDE0XSAgICAgICAgICAgICAgIC8vIFYgc2FtcGxl cworCisgICAgICAgIHNtbGFsICAgICAgICAgICB2MTYuNHMsIHYyMC40aCwgdjYuaFswXQorICAg ICAgICBzbWxhbDIgICAgICAgICAgdjE3LjRzLCB2MjAuOGgsIHY2LmhbMF0KKyAgICAgICAgc21s YWwgICAgICAgICAgIHYxOC40cywgdjIxLjRoLCB2Ni5oWzBdCisgICAgICAgIHNtbGFsMiAgICAg ICAgICB2MTkuNHMsIHYyMS44aCwgdjYuaFswXQorCisgICAgICAgIHN1YnMgICAgICAgICAgICB3 OSwgdzksICMxCisgICAgICAgIGIuZ3QgICAgICAgICAgICAuTGZpbHRlcl9zd2FwcGVkX2xvb3Bf OAorCisgICAgICAgIC8vIEZpbmFsIHByb2Nlc3NpbmcgYW5kIHN0b3JlCisgICAgICAgIHNxc2hy dW4gICAgICAgICB2MjYuNGgsIHYxNi40cywgIzE2CisgICAgICAgIHNxc2hydW4yICAgICAgICB2 MjYuOGgsIHYxNy40cywgIzE2CisgICAgICAgIHNxc2hydW4gICAgICAgICB2MjcuNGgsIHYxOC40 cywgIzE2CisgICAgICAgIHNxc2hydW4yICAgICAgICB2MjcuOGgsIHYxOS40cywgIzE2CisgICAg ICAgIHVxc2hybiAgICAgICAgICB2MjguOGIsIHYyNy44aCwgIzMgICAgICAgICAgICAvLyBWCisg ICAgICAgIHVxc2hybiAgICAgICAgICB2MjkuOGIsIHYyNi44aCwgIzMgICAgICAgICAgICAvLyBV CisKKyAgICAgICAgc3QyICAgICAgICAgICAgIHt2MjguOGIsIHYyOS44Yn0sIFt4Nl0sICMxNgor CisgICAgICAgIHN1YnMgICAgICAgICAgICB3NywgdzcsICM4CisgICAgICAgIGFkZCAgICAgICAg ICAgICB4OCwgeDgsICM4CisgICAgICAgIGIuZ3QgICAgICAgICAgICAuTGxvb3Bfc3dhcHBlZF84 X3BpeGVscworICAgICAgICByZXQKK2VuZGZ1bmMKZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUvYWFy Y2g2NC9zd3NjYWxlLmMgYi9saWJzd3NjYWxlL2FhcmNoNjQvc3dzY2FsZS5jCmluZGV4IDZlNWE3 MjFjMWYuLjUyNDZkNTNhMTYgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvYWFyY2g2NC9zd3NjYWxl LmMKKysrIGIvbGlic3dzY2FsZS9hYXJjaDY0L3N3c2NhbGUuYwpAQCAtMTY4LDYgKzE2OCwxNiBA QCB2b2lkIGZmX3l1djJwbGFuZTFfOF9uZW9uKAogICAgICAgICBjb25zdCB1aW50OF90ICpkaXRo ZXIsCiAgICAgICAgIGludCBvZmZzZXQpOwogCit2b2lkIGZmX3l1djJudjEyY1hfbm90c3dhcHBl ZF9uZW9uKGVudW0gQVZQaXhlbEZvcm1hdCBkc3RGb3JtYXQsIGNvbnN0IHVpbnQ4X3QgKmNockRp dGhlciwKKyAgICBjb25zdCBpbnQxNl90ICpjaHJGaWx0ZXIsIGludCBjaHJGaWx0ZXJTaXplLAor ICAgIGNvbnN0IGludDE2X3QgKipjaHJVU3JjLCBjb25zdCBpbnQxNl90ICoqY2hyVlNyYywKKyAg ICB1aW50OF90ICpkZXN0LCBpbnQgY2hyRHN0Vyk7CisKK3ZvaWQgZmZfeXV2Mm52MTJjWF9zd2Fw cGVkX25lb24oZW51bSBBVlBpeGVsRm9ybWF0IGRzdEZvcm1hdCwgY29uc3QgdWludDhfdCAqY2hy RGl0aGVyLAorICAgIGNvbnN0IGludDE2X3QgKmNockZpbHRlciwgaW50IGNockZpbHRlclNpemUs CisgICAgY29uc3QgaW50MTZfdCAqKmNoclVTcmMsIGNvbnN0IGludDE2X3QgKipjaHJWU3JjLAor ICAgIHVpbnQ4X3QgKmRlc3QsIGludCBjaHJEc3RXKTsKKwogI2RlZmluZSBBU1NJR05fU0NBTEVf RlVOQzIoaHNjYWxlZm4sIGZpbHRlcnNpemUsIG9wdCkgZG8geyAgICAgICAgICAgICAgXAogICAg IGlmIChjLT5zcmNCcGMgPT0gOCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAogICAgICAgICBpZihjLT5kc3RCcGMgPD0gMTQpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjAxLDYgKzIxMSwxMiBAQCB2b2lk IGZmX3l1djJwbGFuZTFfOF9uZW9uKAogICAgIGRlZmF1bHQ6IGJyZWFrOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIAorI2RlZmlu ZSBBU1NJR05fWVVWMk5WMTJfRlVOQyh5dXYybnYxMmZuLCBvcHQsIGRzdEZvcm1hdCkgICAgICAg ICAgICAgICBcCisgICAgaWYoIWlzU3dhcHBlZENocm9tYShkc3RGb3JtYXQpKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXV2Mm52MTJmbiA9IGZmX3l1djJu djEyY1hfbm90c3dhcHBlZF8gICMjIG9wdDsgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIHl1djJudjEyZm4gPSBmZl95dXYybnYxMmNYX3N3YXBwZWRfICAjIyBvcHQ7 CisKICNkZWZpbmUgTkVPTl9JTlBVVChuYW1lKSBcCiB2b2lkIGZmXyMjbmFtZSMjVG9ZX25lb24o dWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IHVpbnQ4X3QgKiwgXAogICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqLCBpbnQgdywgdWludDMyX3QgKmNv ZWZmcywgdm9pZCAqKTsgXApAQCAtMjc1LDcgKzI5MSwxMCBAQCBhdl9jb2xkIHZvaWQgZmZfc3dz X2luaXRfc3dzY2FsZV9hYXJjaDY0KFN3c0ludGVybmFsICpjKQogICAgICAgICBBU1NJR05fVlND QUxFX0ZVTkMoYy0+eXV2MnBsYW5lMSwgbmVvbik7CiAgICAgICAgIGlmIChjLT5kc3RCcGMgPT0g OCkgewogICAgICAgICAgICAgYy0+eXV2MnBsYW5lWCA9IGZmX3l1djJwbGFuZVhfOF9uZW9uOwor ICAgICAgICAgICAgaWYoaXNTZW1pUGxhbmFyWVVWKGMtPm9wdHMuZHN0X2Zvcm1hdCkpCisgICAg ICAgICAgICAgICBBU1NJR05fWVVWMk5WMTJfRlVOQyhjLT55dXYybnYxMmNYLCBuZW9uLCBjLT5v cHRzLmRzdF9mb3JtYXQpOwogICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChjLT5vcHRzLnNy Y19mb3JtYXQpIHsKICAgICAgICAgY2FzZSBBVl9QSVhfRk1UX0FCR1I6CiAgICAgICAgICAgICBj LT5sdW1Ub1lWMTIgPSBmZl9hYmdyMzJUb1lfbmVvbjsKLS0gCjIuMzQuMQoK --_004_MA0P287MB1158BA521247AE411CFF896DD66BAMA0P287MB1158INDP_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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". --_004_MA0P287MB1158BA521247AE411CFF896DD66BAMA0P287MB1158INDP_--