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 396034E00C for ; Fri, 6 Jun 2025 06:52:21 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 48F1D68C257; Fri, 6 Jun 2025 09:52:17 +0300 (EEST) Received: from MA0PR01CU009.outbound.protection.outlook.com (mail-southindiaazon11020124.outbound.protection.outlook.com [52.101.227.124]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 7D7D868C05A for ; Fri, 6 Jun 2025 09:52:08 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nLa0dSVc/mDNfvuty2KLv5H1f27SLsf4p6Hs1MLhsYqkk+dB2MZ7V0wHzSaTouUyfPfqGBLoPnVPeePf0cf2xWO47QN+Jsc29ayEpPgWuvr3y2zODzokX0xaupOFKMGOVzfMo0IIkH7gaOvc7bnLmbYwgYQC4QOsialEnDtZS4wElyahMzh/mMAZHbwkhlz/FQPD2rWpAFDmewFEPk42MlMqLN9RwKMcVOw4B7WuafnJ1R9BfqLJFjhSkmO8F7wR/HUbQ4ggWqNON9wZeC8PmAPnoqGZCaU93IFWTGcz4M/eya3wDxlI3IhVY0LosTYqm+8Fm5g0QIAzJgxvw3b0QA== 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=05hxGrINegg3vbRNnTcuM/YNX68UDL5bxjolsXFu9VE=; b=dyzS0oHjI/0cwK2bcVJ07c6siIF/jz/ewxRwZ7e4wuFvQqiumtJ6iSDmQ8Aj1hiyh8PNy7ote0iqlIf2QgFTlEXqWgeQAuHiHE+WJBRjFrquSE4b7IihgYrI5LEPCVimzd5uuYK026cNGjpOTnexiax4fB+Kb0Av9ePlg/yN9FhvqVvXPg7FAmDwXswshC4MwjR0HH//DVrzCgaPHaQC7E/qKIfAdXF3uIIbuLc/sWv9pSxNXMe7fDZhAj/+Jhy4iKLDjOJNsvPKnej6nLaJHL7We1dUnEzOU/FW7Hal2qC7sQLmfJSD4Clf4vWM+/kzp53SlvVZ57WTghg/eWam/A== 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=05hxGrINegg3vbRNnTcuM/YNX68UDL5bxjolsXFu9VE=; b=149C8F7y5JXBOeWIX0xCtYAtgiCNh32bQ/CRptx1qoUQ4mFIpdD5iphjUn8E2fTaH9wLLliLc3TtU1bd/pjFl0qHXr04V42qOZlwrGmO7NXyMeG6bpFD/PUprg8qrisK4fGSxwRJ7JH+h5GfK9fsot9778gHXpNYCK68Ap0yLr1ytt8lT5InnSHnMhPgnJOHMcYTBgDhzUmT9zqzgUAkSYG8Nb5H5PQmzNBq+/nQ2FwQSSdZFXdToRiD+QpBEWhUk9WBx1MraAxDYon3IzH927Rf+ppJDhFFz27L0RgrGNNO7fRaLOjBi94pEMi9J4mPxgtPkGNrFlAEfJhE5GDR2g== Received: from PN2P287MB1165.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:154::10) by PN3P287MB1085.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:179::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8813.21; Fri, 6 Jun 2025 06:52:01 +0000 Received: from PN2P287MB1165.INDP287.PROD.OUTLOOK.COM ([fe80::c146:9404:f8bd:6b70]) by PN2P287MB1165.INDP287.PROD.OUTLOOK.COM ([fe80::c146:9404:f8bd:6b70%6]) with mapi id 15.20.8813.020; Fri, 6 Jun 2025 06:52:01 +0000 From: Harshitha Sarangu Suresh To: Kieran Kunhya via ffmpeg-devel Thread-Topic: [FFmpeg-devel] [PATCH] swscale/aarch64/output: Implement neon assembly for yuv2nv12cX_c() Thread-Index: AQHb1qw5yypuO2bvaEG8dD6RXHDvXw== Date: Fri, 6 Jun 2025 06:52:01 +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: PN2P287MB1165:EE_|PN3P287MB1085:EE_ x-ms-office365-filtering-correlation-id: 12633bff-5d8e-41c1-f419-08dda4c6a3dc x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|8096899003|4053099003|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?5tAG0VEPf2J0dy9tGXxKMMbmWGSaonuxvxBsywlcbz4uNGgEAU3JhE+Uvx?= =?iso-8859-1?Q?qZ5Akg+tfeT+r9qpLs2vFwlbFN6CE1suBXNYDr+nWV39dVw0Q5ukCOJjqN?= =?iso-8859-1?Q?6/nCiKj8jiC3S4/Is0gou7WZee/esrLzv9SCmMb87PW0IOCSegJud1I/OF?= =?iso-8859-1?Q?BJCcO5NUjT3aX9iwVzqG074Q4jPSVu7R4pSGp9UYAjyJFXaU7zAF6ydgZW?= =?iso-8859-1?Q?syYYXtaqYRkEOarIMinEO3QdUbno6AfupuLTn/coefTlziicuTHnBrx3ow?= =?iso-8859-1?Q?xIiogwYgnuntE4Uqj8/q8qzawpCmWsYf3QaRmaA4ZP51msjah5D4TH7WHl?= =?iso-8859-1?Q?aOfKLLHiIRDht4uWGsU6L+ni5b1cuhV/nTjoO0Zr6EUq9NerknV7uGPGzu?= =?iso-8859-1?Q?WhE+4wzacP5VA8Q33I2D18tjPK50T0RclocLWa0QlgLhrZ5TJnZw1ut8bg?= =?iso-8859-1?Q?6tS5ecS6J4i+TyKq+cQFAoWp4PFAiTFRLE8gxLVqATOPRERJjrzZRKv0n7?= =?iso-8859-1?Q?zqNmesXDz63XfcTzcq5WbUgueOPXJZYVNJDUs3X7tgnII3FtGSF/Vh4IGX?= =?iso-8859-1?Q?DJFnfyfn3DtHLkq426zi9O6tYBHDdp1Rgw0bR1Ql23NPjzl1mmWlhqtcxN?= =?iso-8859-1?Q?c1g6LEOFSNcWTYcmNhWJFSjaEMVs3Ivhm+F+1pis5O/4d3vEZE2iYIxOfl?= =?iso-8859-1?Q?QtBktvLK2cNZnP6wqI+chdmCEHo3rj0nfWTXlyfp5E7Y1jglSbJSBNSwrP?= =?iso-8859-1?Q?QiUhe/zcd4xi6FFVBYVYU8iKac9+0tnB4jgAO6lxKu/286j72MybbAISPk?= =?iso-8859-1?Q?G6z8qI6vX85vKUQPuWbDRg7f6prC1gPtZnkshMQi4tDKtN1FwnaabBGUMk?= =?iso-8859-1?Q?uO8gdZV+/PIlX0W9O7/4fLCJ+5UIpUk1VKNdvFu5T2R4reTg1BW6/dAxTN?= =?iso-8859-1?Q?/6NP7GcEMIve9yARawhuLbT5DbctgV5XlXY+cA+h3A5zT4mHMNchFFKWh1?= =?iso-8859-1?Q?604HZHksDgiSpIyYx0DbjwJuocYtUrPWx1kA4f0914ftfvDypy9yXrSD7D?= =?iso-8859-1?Q?bFPbfozSSX2r7jHVc1CrcjIDz+NA3A400awHnM8nswvsbIorbmKa4Q6X99?= =?iso-8859-1?Q?nDNajKHQWNso0JYhQoybbH+G2bhO2UXrsqT846iVkK/treegnnFByRtL/L?= =?iso-8859-1?Q?tfqiKCCnpVAQT0n0hv0dyJG8Xx51M5dOzz3qtIP0YX7B2b7B0DfqoNw3tb?= =?iso-8859-1?Q?Jd5aWrHLzJHwYnpwqFbKwto3xOMUylEoF/9Gr8YU+CP6ScCc+uRhsDQHHe?= =?iso-8859-1?Q?JMcs/3jSxoJZOhJBah5myIxBZzdJR91TqAwhBU5qy8Ave0OQwf+A0uv20a?= =?iso-8859-1?Q?UR2tzNrsj8tUoL91KADb4xkMHc+n48M/81sXIV+Sk8m9gcX59qbbBKgEkc?= =?iso-8859-1?Q?cmxINrvrwFVgMAKAY85MZbpIzGDN+hikWGTF5/NWgGb+fMQFPbHdW7gMbW?= =?iso-8859-1?Q?CY2/jVKV45PkobjC6dYdx9A8nnUF2QlBCb4BnglBenGBXmDGndQuTH8K2+?= =?iso-8859-1?Q?ZgkNxj8=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PN2P287MB1165.INDP287.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(8096899003)(4053099003)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?lXjpXz9js1A2egn2gh1NyqLmlcXaMsaD8Gx/JDocxIclsi7c61ptxe8sDD?= =?iso-8859-1?Q?2ozfcDk4fD4jGqKtF0mkfVU1PUKmhGptJRio4EwsCKkF7ZB6hLH/l0P9gI?= =?iso-8859-1?Q?vgeRn0AbTKcuaE23UtqIxR2WN0/IPCeWS+2g3HDjJxQHLKmJibcDNqaHWK?= =?iso-8859-1?Q?abs7f7j9w9TWAl6tAr1njIZaITYSYzHPrdOjIcfni7acHRhd35KDrBJ1PM?= =?iso-8859-1?Q?eKuqfA0GF6NFl7Ojn9q1RNMxX3Z64ngFZUffJfLkbBd0HtbqHfNGkE39JE?= =?iso-8859-1?Q?hK4EdGoJwwOHqzla8vvcs1gtiwnXJqDUrJ/58Et1hHsn22r+iWaC/+bgc4?= =?iso-8859-1?Q?g8na3M6CgunaDPfkM8Pxw79xoe56rcQ00bhdPy1AaAm9o9N/a5QWsQPABh?= =?iso-8859-1?Q?MZIcMOrDuwHtYVYnJoEi9voJjxpXOzyNdeqwLHkC/4gAB+9DU1jh7oOCdB?= =?iso-8859-1?Q?JcfeWipbNTsE0xUVyf31JcWNhD6r/N+d13CMLVw4CWKxG3MKj8uzpTSSKD?= =?iso-8859-1?Q?B2vDStUn9ykhyFqCTmQ19EXFZRz1/UXkOGakux5NNjT6eUKmASBnSJO0aF?= =?iso-8859-1?Q?F8uvfCn00TtGqHTyl1FurcBbIXDTHavHKoWjPkK7752DiN4BVFtwny6fpJ?= =?iso-8859-1?Q?YzK+lXSi1kRmKF7pJkruypjKLfYbPvZ7TgMKh0i6PMYLMzvwXMAuYtDFAp?= =?iso-8859-1?Q?EO8Mioniyow3rS6CfOaMU65D1jySaJoLMpdZzGNJ+ne8q46hN2CHbcQq5v?= =?iso-8859-1?Q?JorJ4mtR6RctqLJkBbQI8RrwD0INopOUHqcLtMCzXpTYAumVAYv0eXqmkM?= =?iso-8859-1?Q?P2SxCBS7ygWd47z+3LAlVHC4fLyvThm37em8ZWEibQhYjp5yE5NweHr2Pm?= =?iso-8859-1?Q?3wU5QJnLu+Njinuqo7llLdS+QeeWt/5gET95ZzW7YSt/5FhODjpe6p+VHA?= =?iso-8859-1?Q?jLC0H9TgyI8CT0r45QT0AG/sODx9MgfK7ITkrgFouNXfHtQIGiiTWQHtvO?= =?iso-8859-1?Q?Arq1Bzmjogid89fQTlnrU4afDWvfnXizKSdS/1ooEJplCidYBGAnn7LcI9?= =?iso-8859-1?Q?toANWxaHTgHOwbw9nyoGUY/Y/l0AvZi4U6Q88PrAuTipeCd4SB4iQEfqYH?= =?iso-8859-1?Q?Igc5nc8sLpb9L4PVN3TwWN1py0Xflz/duHMTcU9tboxH92EmXvPKxSz/Sm?= =?iso-8859-1?Q?sHeCYkIgiNrZWOmj1jUm0lHyq+DcOR15Utqz94vF9IEhLUp1BV+EvVTHqO?= =?iso-8859-1?Q?K2DRTIkzddKDC+Fj9FhJN9c4iTd+TUWzrCFl0I6KvYTiT0TemgKlzVipsf?= =?iso-8859-1?Q?dsYrE55XxTq0kOB3hN3qrNPqrkvpWjVZKZn9NEPVMa24ZjUjJxAlMqoUYZ?= =?iso-8859-1?Q?30qic9xxRSqYENXHtgKyFSqsMuGrFQMEejhZ6VZQROn4ZvDac/Dka4yKa7?= =?iso-8859-1?Q?QevqXJZy/dMWIWzpMfbABR5yEZCrvTc5SNbfEK6WJCQ1OxH2ka6FGzPpRg?= =?iso-8859-1?Q?gWU5YnR5z0bczYhuwAkQeX/V+Ev+hMYnzDKWWtPWpIcBT/Vq8xgiK4oL7A?= =?iso-8859-1?Q?KzXdh9oKh6m/ccxM5ev9H8/aWKxnxolDDdlVNthsbsZ0sPeVjmIaRbE0Yd?= =?iso-8859-1?Q?MpjAQuJWroOsysthVYVUT98/8cWEWMBrdpJpIfYf9Vwstph2EFRcjVyg?= =?iso-8859-1?Q?=3D=3D?= Content-Type: multipart/mixed; boundary="_004_PN2P287MB1165DAC8027869113203CB14D66EAPN2P287MB1165INDP_" MIME-Version: 1.0 X-OriginatorOrg: multicorewareinc.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PN2P287MB1165.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 12633bff-5d8e-41c1-f419-08dda4c6a3dc X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Jun 2025 06:52:01.5914 (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: lIdDPZ/2uN/Waslt1mzozPdntcM8qZZi1EHro+1pYSxpjraK+EFlt4pxMsmO/4huygruQdmbUELX5qXLxZw6pk6q9WmBxylpt28ZX3+qDxU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN3P287MB1085 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] swscale/aarch64/output: Implement neon assembly for yuv2nv12cX_c() 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_PN2P287MB1165DAC8027869113203CB14D66EAPN2P287MB1165INDP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Changed indentation, checked for FATE tests and gha-aarch64 git workflow. E= verything passed. >From 4a590438d61a10d4f75c7a567af2890bc08332ca 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..c07e375025 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.36.0.windows.1 --_004_PN2P287MB1165DAC8027869113203CB14D66EAPN2P287MB1165INDP_ 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=17326; creation-date="Fri, 06 Jun 2025 06:48:23 GMT"; modification-date="Fri, 06 Jun 2025 06:52:01 GMT" Content-Transfer-Encoding: base64 RnJvbSA0YTU5MDQzOGQ2MWExMGQ0Zjc1YzdhNTY3YWYyODkwYmMwODMzMmNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYXJzaGl0aGEgU3VyZXNoIDxoYXJzaGl0aGFAbXVsdGljb3Jl d2FyZWluYy5jb20+CkRhdGU6IE1vbiwgMTkgTWF5IDIwMjUgMjI6Mzc6MjAgKzA1MzAKU3ViamVj dDogW1BBVENIXSBzd3NjYWxlL2FhcmNoNjQvb3V0cHV0OiBJbXBsZW1lbnQgbmVvbiBhc3NlbWJs eSBmb3IKIHl1djJudjEyY1hfYygpLgoKeXV2Mm52MTJjWF8yXzUxMl9hY2N1cmF0ZV9jOiAgICAg ICAgICAgICAgICAgICAgICAgICAgMzUwOC44ICggMS4wMHgpCnl1djJudjEyY1hfMl81MTJfYWNj dXJhdGVfbmVvbjogICAgICAgICAgICAgICAgICAgICAgICAzNjkuMiAoIDkuNTB4KQp5dXYybnYx MmNYXzJfNTEyX2FwcHJveGltYXRlX2M6ICAgICAgICAgICAgICAgICAgICAgICAzNDk5LjAgKCAx LjAweCkKeXV2Mm52MTJjWF8yXzUxMl9hcHByb3hpbWF0ZV9uZW9uOiAgICAgICAgICAgICAgICAg ICAgIDM3MC4yICggOS40NXgpCnl1djJudjEyY1hfNF81MTJfYWNjdXJhdGVfYzogICAgICAgICAg ICAgICAgICAgICAgICAgIDQ2ODMuMCAoIDEuMDB4KQp5dXYybnYxMmNYXzRfNTEyX2FjY3VyYXRl X25lb246ICAgICAgICAgICAgICAgICAgICAgICAgNTY4LjggKCA4LjIzeCkKeXV2Mm52MTJjWF80 XzUxMl9hcHByb3hpbWF0ZV9jOiAgICAgICAgICAgICAgICAgICAgICAgNDY4Mi42ICggMS4wMHgp Cnl1djJudjEyY1hfNF81MTJfYXBwcm94aW1hdGVfbmVvbjogICAgICAgICAgICAgICAgICAgICA1 NjkuOSAoIDguMjJ4KQp5dXYybnYxMmNYXzhfNTEyX2FjY3VyYXRlX2M6ICAgICAgICAgICAgICAg ICAgICAgICAgICA3MjQzLjAgKCAxLjAweCkKeXV2Mm52MTJjWF84XzUxMl9hY2N1cmF0ZV9uZW9u OiAgICAgICAgICAgICAgICAgICAgICAgIDkzNy42ICggNy43MngpCnl1djJudjEyY1hfOF81MTJf YXBwcm94aW1hdGVfYzogICAgICAgICAgICAgICAgICAgICAgIDcyMzUuOSAoIDEuMDB4KQp5dXYy bnYxMmNYXzhfNTEyX2FwcHJveGltYXRlX25lb246ICAgICAgICAgICAgICAgICAgICAgOTM4LjMg KCA3LjcxeCkKeXV2Mm52MTJjWF8xNl81MTJfYWNjdXJhdGVfYzogICAgICAgICAgICAgICAgICAg ICAgICAxMzc0OS43ICggMS4wMHgpCnl1djJudjEyY1hfMTZfNTEyX2FjY3VyYXRlX25lb246ICAg ICAgICAgICAgICAgICAgICAgIDE3MDguMSAoIDguMDV4KQp5dXYybnYxMmNYXzE2XzUxMl9hcHBy b3hpbWF0ZV9jOiAgICAgICAgICAgICAgICAgICAgIDEzNzUwLjAgKCAxLjAweCkKeXV2Mm52MTJj WF8xNl81MTJfYXBwcm94aW1hdGVfbmVvbjogICAgICAgICAgICAgICAgICAgMTcwOC42ICggOC4w NXgpCi0tLQogbGlic3dzY2FsZS9hYXJjaDY0L291dHB1dC5TICB8IDMwNiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogbGlic3dzY2FsZS9hYXJjaDY0L3N3c2NhbGUuYyB8ICAx OSArKysKIDIgZmlsZXMgY2hhbmdlZCwgMzI1IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9s aWJzd3NjYWxlL2FhcmNoNjQvb3V0cHV0LlMgYi9saWJzd3NjYWxlL2FhcmNoNjQvb3V0cHV0LlMK aW5kZXggMTkwYzQzODg3MC4uMmQ4N2NjNmE1ZSAxMDA2NDQKLS0tIGEvbGlic3dzY2FsZS9hYXJj aDY0L291dHB1dC5TCisrKyBiL2xpYnN3c2NhbGUvYWFyY2g2NC9vdXRwdXQuUwpAQCAtMjI2LDMg KzIyNiwzMDkgQEAgZnVuY3Rpb24gZmZfeXV2MnBsYW5lMV84X25lb24sIGV4cG9ydD0xCiAgICAg ICAgIGIuZ3QgICAgICAgICAgICAyYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxv b3AgdW50aWwgd2lkdGggY29uc3VtZWQKICAgICAgICAgcmV0CiBlbmRmdW5jCisKK2Z1bmN0aW9u IGZmX3l1djJudjEyY1hfbm90c3dhcHBlZF9uZW9uLCBleHBvcnQ9MQorLy8geDAgLSBkc3RGb3Jt YXQgKHVudXNlZCkKKy8vIHgxIC0gdWludDhfdCAqY2hyRGl0aGVyCisvLyB4MiAtIGludDE2X3Qg KmNockZpbHRlcgorLy8geDMgLSBpbnQgY2hyRmlsdGVyU2l6ZQorLy8geDQgLSBpbnQxNl90ICoq Y2hyVVNyYworLy8geDUgLSBpbnQxNl90ICoqY2hyVlNyYworLy8geDYgLSB1aW50OF90ICpkZXN0 CisvLyB4NyAtIGludCBjaHJEc3RXCisKKyAgICAgICAgLy8gTG9hZCBkaXRoZXIgcGF0dGVybiBh bmQgY29tcHV0ZSBVIGFuZCBWIGRpdGhlciB2ZWN0b3JzCisgICAgICAgIGxkMSAgICAgICAgICAg ICB7djAuOGJ9LCBbeDFdICAgICAgICAgICAgICAgICAgIC8vIGNockRpdGhlclswLi43XQorICAg ICAgICBleHQgICAgICAgICAgICAgdjEuOGIsIHYwLjhiLCB2MC44YiwgIzMgICAgICAgICAvLyBS b3RhdGUgZm9yIFY6IChpKzMpJjcKKworICAgICAgICB1eHRsICAgICAgICAgICAgdjAuOGgsIHYw LjhiCisgICAgICAgIHV4dGwgICAgICAgICAgICB2MS44aCwgdjEuOGIKKworICAgICAgICB1c2hs bCAgICAgICAgICAgdjIuNHMsIHYwLjRoLCAjMTIgICAgICAgICAgICAgICAvLyBVIGRpdGhlciBs b3cKKyAgICAgICAgdXNobGwyICAgICAgICAgIHYzLjRzLCB2MC44aCwgIzEyICAgICAgICAgICAg ICAgLy8gVSBkaXRoZXIgaGlnaAorICAgICAgICB1c2hsbCAgICAgICAgICAgdjQuNHMsIHYxLjRo LCAjMTIgICAgICAgICAgICAgICAvLyBWIGRpdGhlciBsb3cKKyAgICAgICAgdXNobGwyICAgICAg ICAgIHY1LjRzLCB2MS44aCwgIzEyICAgICAgICAgICAgICAgLy8gViBkaXRoZXIgaGlnaAorCisg ICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBwcm9jZXNzIDE2IHBpeGVscyBhdCBhIHRpbWUKKyAg ICAgICAgdHN0ICAgICAgICAgICAgIHc3LCAjMTUgICAgICAgICAgICAgICAgICAgICAgICAgLy8g Q2hlY2sgaWYgY2hyRHN0VyAlIDE2ID09IDAKKyAgICAgICAgYi5uZSAgICAgICAgICAgIC5McHJv Y2Vzc184X3BpeGVscyAgICAgICAgICAgICAgLy8gSWYgbm90LCB1c2UgOC1waXhlbCB2ZXJzaW9u CisKKyAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisgICAgICAgIC8vIDE2LXBpeGVsIHByb2Nlc3NpbmcgcGF0aAorICAgICAgICAvLyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgbW92ICAg ICAgICAgICAgIHg4LCAjMCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaSA9IDAKKy5MbG9v cF8xNl9waXhlbHM6CisKKyAgICAgICAgbW92ICAgICAgICAgICAgIHYxNi4xNmIsIHYyLjE2YiAg ICAgICAgICAgICAgICAgLy8gVSBhY2MgbG93CisgICAgICAgIG1vdiAgICAgICAgICAgICB2MTcu MTZiLCB2My4xNmIgICAgICAgICAgICAgICAgIC8vIFUgYWNjIGhpZ2gKKyAgICAgICAgbW92ICAg ICAgICAgICAgIHYxOC4xNmIsIHY0LjE2YiAgICAgICAgICAgICAgICAgLy8gViBhY2MgbG93Cisg ICAgICAgIG1vdiAgICAgICAgICAgICB2MTkuMTZiLCB2NS4xNmIgICAgICAgICAgICAgICAgIC8v IFYgYWNjIGhpZ2gKKworICAgICAgICBtb3YgICAgICAgICAgICAgdjIwLjE2YiwgdjIuMTZiCisg ICAgICAgIG1vdiAgICAgICAgICAgICB2MjEuMTZiLCB2My4xNmIKKyAgICAgICAgbW92ICAgICAg ICAgICAgIHYyMi4xNmIsIHY0LjE2YgorICAgICAgICBtb3YgICAgICAgICAgICAgdjIzLjE2Yiwg djUuMTZiCisKKyAgICAgICAgbW92ICAgICAgICAgICAgIHc5LCB3MyAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gY2hyRmlsdGVyU2l6ZSBjb3VudGVyCisgICAgICAgIG1vdiAgICAgICAgICAg ICB4MTAsIHgyICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNockZpbHRlciBwb2ludGVyCisg ICAgICAgIG1vdiAgICAgICAgICAgICB4MTEsIHg0ICAgICAgICAgICAgICAgICAgICAgICAgIC8v IGNoclVTcmMgYmFzZQorICAgICAgICBtb3YgICAgICAgICAgICAgeDEyLCB4NSAgICAgICAgICAg ICAgICAgICAgICAgICAvLyBjaHJWU3JjIGJhc2UKKworLkxmaWx0ZXJfbG9vcF8xNjoKKyAgICAg ICAgbGRyICAgICAgICAgICAgIGg2LCBbeDEwXSwgIzIgICAgICAgICAgICAgICAgICAgLy8gTG9h ZCBmaWx0ZXIgY29lZmZpY2llbnQKKworICAgICAgICBsZHIgICAgICAgICAgICAgeDEzLCBbeDEx XSwgIzggICAgICAgICAgICAgICAgICAvLyBjaHJVU3JjW2pdCisgICAgICAgIGxkciAgICAgICAg ICAgICB4MTQsIFt4MTJdLCAjOCAgICAgICAgICAgICAgICAgIC8vIGNoclZTcmNbal0KKyAgICAg ICAgYWRkICAgICAgICAgICAgIHgxMywgeDEzLCB4OCwgbHNsICMxICAgICAgICAgICAgLy8gJmNo clVTcmNbal1baV0KKyAgICAgICAgYWRkICAgICAgICAgICAgIHgxNCwgeDE0LCB4OCwgbHNsICMx ICAgICAgICAgICAgLy8gJmNoclZTcmNbal1baV0KKyAgICAgICAgYWRkICAgICAgICAgICAgIHgx NSwgeDEzLCAjMTYgICAgICAgICAgICAgICAgICAgLy8geDE1ID0gJmNoclVTcmNbal1baSs4XSAo OCBzYW1wbGVzICogMiBieXRlcykKKyAgICAgICAgYWRkICAgICAgICAgICAgIHgxNiwgeDE0LCAj MTYKKworICAgICAgICBsZDEgICAgICAgICAgICAge3YyNC44aH0sIFt4MTNdICAgICAgICAgICAg ICAgICAvLyBVIHNhbXBsZXMgMC03CisgICAgICAgIGxkMSAgICAgICAgICAgICB7djI1LjhofSwg W3gxNF0gICAgICAgICAgICAgICAgIC8vIFYgc2FtcGxlcyAwLTcKKworICAgICAgICBsZDEgICAg ICAgICAgICAge3YyNi44aH0sIFt4MTVdICAgICAgICAgICAgICAgICAvLyBVIHNhbXBsZXMgOC0x NQorICAgICAgICBsZDEgICAgICAgICAgICAge3YyNy44aH0sIFt4MTZdICAgICAgICAgICAgICAg ICAvLyBWIHNhbXBsZXMgOC0xNQorCisgICAgICAgIHNtbGFsICAgICAgICAgICB2MTYuNHMsIHYy NC40aCwgdjYuaFswXQorICAgICAgICBzbWxhbDIgICAgICAgICAgdjE3LjRzLCB2MjQuOGgsIHY2 LmhbMF0KKyAgICAgICAgc21sYWwgICAgICAgICAgIHYxOC40cywgdjI1LjRoLCB2Ni5oWzBdCisg ICAgICAgIHNtbGFsMiAgICAgICAgICB2MTkuNHMsIHYyNS44aCwgdjYuaFswXQorCisgICAgICAg IHNtbGFsICAgICAgICAgICB2MjAuNHMsIHYyNi40aCwgdjYuaFswXQorICAgICAgICBzbWxhbDIg ICAgICAgICAgdjIxLjRzLCB2MjYuOGgsIHY2LmhbMF0KKyAgICAgICAgc21sYWwgICAgICAgICAg IHYyMi40cywgdjI3LjRoLCB2Ni5oWzBdCisgICAgICAgIHNtbGFsMiAgICAgICAgICB2MjMuNHMs IHYyNy44aCwgdjYuaFswXQorCisgICAgICAgIHN1YnMgICAgICAgICAgICB3OSwgdzksICMxCisg ICAgICAgIGIuZ3QgICAgICAgICAgICAuTGZpbHRlcl9sb29wXzE2CisKKyAgICAgICAgLy8gUHJv Y2VzcyBhbmQgc3RvcmUgZmlyc3QgOCBwaXhlbHMKKyAgICAgICAgc3FzaHJ1biAgICAgICAgIHYy OC40aCwgdjE2LjRzLCAjMTYKKyAgICAgICAgc3FzaHJ1bjIgICAgICAgIHYyOC44aCwgdjE3LjRz LCAjMTYKKyAgICAgICAgc3FzaHJ1biAgICAgICAgIHYyOS40aCwgdjE4LjRzLCAjMTYKKyAgICAg ICAgc3FzaHJ1bjIgICAgICAgIHYyOS44aCwgdjE5LjRzLCAjMTYKKyAgICAgICAgdXFzaHJuICAg ICAgICAgIHYzMC44YiwgdjI4LjhoLCAjMyAgICAgICAgICAgICAgLy8gVQorICAgICAgICB1cXNo cm4gICAgICAgICAgdjMxLjhiLCB2MjkuOGgsICMzICAgICAgICAgICAgICAvLyBWCisKKyAgICAg ICAgLy8gUHJvY2VzcyBhbmQgc3RvcmUgbmV4dCA4IHBpeGVscworICAgICAgICBzcXNocnVuICAg ICAgICAgdjI4LjRoLCB2MjAuNHMsICMxNgorICAgICAgICBzcXNocnVuMiAgICAgICAgdjI4Ljho LCB2MjEuNHMsICMxNgorICAgICAgICBzcXNocnVuICAgICAgICAgdjI5LjRoLCB2MjIuNHMsICMx NgorICAgICAgICBzcXNocnVuMiAgICAgICAgdjI5LjhoLCB2MjMuNHMsICMxNgorICAgICAgICB1 cXNocm4gICAgICAgICAgdjI0LjhiLCB2MjguOGgsICMzICAgICAgICAgICAgICAvLyBVCisgICAg ICAgIHVxc2hybiAgICAgICAgICB2MjUuOGIsIHYyOS44aCwgIzMgICAgICAgICAgICAgIC8vIFYK KworICAgICAgICAvLyBTdG9yZSBib3RoIDgtcGl4ZWwgYmxvY2tzCisgICAgICAgIHN0MiAgICAg ICAgICAgICB7djMwLjhiLCB2MzEuOGJ9LCBbeDZdLCAjMTYKKyAgICAgICAgc3QyICAgICAgICAg ICAgIHt2MjQuOGIsIHYyNS44Yn0sIFt4Nl0sICMxNgorCisgICAgICAgIHN1YnMgICAgICAgICAg ICB3NywgdzcsICMxNgorICAgICAgICBhZGQgICAgICAgICAgICAgeDgsIHg4LCAjMTYKKyAgICAg ICAgYi5ndCAgICAgICAgICAgIC5MbG9vcF8xNl9waXhlbHMKKyAgICAgICAgcmV0CisKKyAgICAg ICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAg ICAgIC8vIDgtcGl4ZWwgcHJvY2Vzc2luZyBwYXRoIChvcmlnaW5hbCBjb2RlKQorICAgICAgICAv LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5McHJvY2Vz c184X3BpeGVsczoKKyAgICAgICAgbW92ICAgICAgICAgICAgIHg4LCAjMCAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGkgPSAwCisuTGxvb3BfOF9waXhlbHM6CisgICAgICAgIC8vIEluaXRpYWxp emUgYWNjdW11bGF0b3JzIHdpdGggZGl0aGVyCisgICAgICAgIG1vdiAgICAgICAgICAgICB2MTYu MTZiLCB2Mi4xNmIgICAgICAgICAgICAgICAvLyBVIGFjYyBsb3cKKyAgICAgICAgbW92ICAgICAg ICAgICAgIHYxNy4xNmIsIHYzLjE2YiAgICAgICAgICAgICAgIC8vIFUgYWNjIGhpZ2gKKyAgICAg ICAgbW92ICAgICAgICAgICAgIHYxOC4xNmIsIHY0LjE2YiAgICAgICAgICAgICAgIC8vIFYgYWNj IGxvdworICAgICAgICBtb3YgICAgICAgICAgICAgdjE5LjE2YiwgdjUuMTZiICAgICAgICAgICAg ICAgLy8gViBhY2MgaGlnaAorCisgICAgICAgIG1vdiAgICAgICAgICAgICB3OSwgdzMgICAgICAg ICAgICAgICAgICAgICAgICAvLyBjaHJGaWx0ZXJTaXplIGNvdW50ZXIKKyAgICAgICAgbW92ICAg ICAgICAgICAgIHgxMCwgeDIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNockZpbHRlciBwb2lu dGVyCisgICAgICAgIG1vdiAgICAgICAgICAgICB4MTEsIHg0ICAgICAgICAgICAgICAgICAgICAg ICAvLyBjaHJVU3JjIGJhc2UKKyAgICAgICAgbW92ICAgICAgICAgICAgIHgxMiwgeDUgICAgICAg ICAgICAgICAgICAgICAgIC8vIGNoclZTcmMgYmFzZQorCisuTGZpbHRlcl9sb29wXzg6CisgICAg ICAgIGxkciAgICAgICAgICAgICBoNiwgW3gxMF0sICMyICAgICAgICAgICAgICAgICAvLyBMb2Fk IGZpbHRlciBjb2VmZmljaWVudAorCisgICAgICAgIGxkciAgICAgICAgICAgICB4MTMsIFt4MTFd LCAjOCAgICAgICAgICAgICAgICAvLyBjaHJVU3JjW2pdCisgICAgICAgIGxkciAgICAgICAgICAg ICB4MTQsIFt4MTJdLCAjOCAgICAgICAgICAgICAgICAvLyBjaHJWU3JjW2pdCisgICAgICAgIGFk ZCAgICAgICAgICAgICB4MTMsIHgxMywgeDgsIGxzbCAjMSAgICAgICAgICAvLyAmY2hyVVNyY1tq XVtpXQorICAgICAgICBhZGQgICAgICAgICAgICAgeDE0LCB4MTQsIHg4LCBsc2wgIzEgICAgICAg ICAgLy8gJmNoclZTcmNbal1baV0KKworICAgICAgICBsZDEgICAgICAgICAgICAge3YyMC44aH0s IFt4MTNdICAgICAgICAgICAgICAgLy8gVSBzYW1wbGVzCisgICAgICAgIGxkMSAgICAgICAgICAg ICB7djIxLjhofSwgW3gxNF0gICAgICAgICAgICAgICAvLyBWIHNhbXBsZXMKKworICAgICAgICBz bWxhbCAgICAgICAgICAgdjE2LjRzLCB2MjAuNGgsIHY2LmhbMF0KKyAgICAgICAgc21sYWwyICAg ICAgICAgIHYxNy40cywgdjIwLjhoLCB2Ni5oWzBdCisgICAgICAgIHNtbGFsICAgICAgICAgICB2 MTguNHMsIHYyMS40aCwgdjYuaFswXQorICAgICAgICBzbWxhbDIgICAgICAgICAgdjE5LjRzLCB2 MjEuOGgsIHY2LmhbMF0KKworICAgICAgICBzdWJzICAgICAgICAgICAgdzksIHc5LCAjMQorICAg ICAgICBiLmd0ICAgICAgICAgICAgLkxmaWx0ZXJfbG9vcF84CisKKyAgICAgICAgLy8gRmluYWwg cHJvY2Vzc2luZyBhbmQgc3RvcmUKKyAgICAgICAgc3FzaHJ1biAgICAgICAgIHYyNi40aCwgdjE2 LjRzLCAjMTYKKyAgICAgICAgc3FzaHJ1bjIgICAgICAgIHYyNi44aCwgdjE3LjRzLCAjMTYKKyAg ICAgICAgc3FzaHJ1biAgICAgICAgIHYyNy40aCwgdjE4LjRzLCAjMTYKKyAgICAgICAgc3FzaHJ1 bjIgICAgICAgIHYyNy44aCwgdjE5LjRzLCAjMTYKKyAgICAgICAgdXFzaHJuICAgICAgICAgIHYy OC44YiwgdjI2LjhoLCAjMyAgICAgICAgICAgIC8vIFUKKyAgICAgICAgdXFzaHJuICAgICAgICAg IHYyOS44YiwgdjI3LjhoLCAjMyAgICAgICAgICAgIC8vIFYKKworICAgICAgICBzdDIgICAgICAg ICAgICAge3YyOC44YiwgdjI5LjhifSwgW3g2XSwgIzE2CisKKyAgICAgICAgc3VicyAgICAgICAg ICAgIHc3LCB3NywgIzgKKyAgICAgICAgYWRkICAgICAgICAgICAgIHg4LCB4OCwgIzgKKyAgICAg ICAgYi5ndCAgICAgICAgICAgIC5MbG9vcF84X3BpeGVscworICAgICAgICByZXQKK2VuZGZ1bmMK KworZnVuY3Rpb24gZmZfeXV2Mm52MTJjWF9zd2FwcGVkX25lb24sIGV4cG9ydD0xCisvLyB4MCAt IGRzdEZvcm1hdCAodW51c2VkKQorLy8geDEgLSB1aW50OF90ICpjaHJEaXRoZXIKKy8vIHgyIC0g aW50MTZfdCAqY2hyRmlsdGVyCisvLyB4MyAtIGludCBjaHJGaWx0ZXJTaXplCisvLyB4NCAtIGlu dDE2X3QgKipjaHJVU3JjCisvLyB4NSAtIGludDE2X3QgKipjaHJWU3JjCisvLyB4NiAtIHVpbnQ4 X3QgKmRlc3QKKy8vIHg3IC0gaW50IGNockRzdFcKKworICAgICAgICAvLyBMb2FkIGRpdGhlciBw YXR0ZXJuIGFuZCBjb21wdXRlIFUgYW5kIFYgZGl0aGVyIHZlY3RvcnMKKyAgICAgICAgbGQxICAg ICAgICAgICAgIHt2MC44Yn0sIFt4MV0gICAgICAgICAgICAgICAgICAgLy8gY2hyRGl0aGVyWzAu LjddCisgICAgICAgIGV4dCAgICAgICAgICAgICB2MS44YiwgdjAuOGIsIHYwLjhiLCAjMyAgICAg ICAgIC8vIFJvdGF0ZSBmb3IgVjogKGkrMykmNworCisgICAgICAgIHV4dGwgICAgICAgICAgICB2 MC44aCwgdjAuOGIKKyAgICAgICAgdXh0bCAgICAgICAgICAgIHYxLjhoLCB2MS44YgorCisgICAg ICAgIHVzaGxsICAgICAgICAgICB2Mi40cywgdjAuNGgsICMxMiAgICAgICAgICAgICAgIC8vIFUg ZGl0aGVyIGxvdworICAgICAgICB1c2hsbDIgICAgICAgICAgdjMuNHMsIHYwLjhoLCAjMTIgICAg ICAgICAgICAgICAvLyBVIGRpdGhlciBoaWdoCisgICAgICAgIHVzaGxsICAgICAgICAgICB2NC40 cywgdjEuNGgsICMxMiAgICAgICAgICAgICAgIC8vIFYgZGl0aGVyIGxvdworICAgICAgICB1c2hs bDIgICAgICAgICAgdjUuNHMsIHYxLjhoLCAjMTIgICAgICAgICAgICAgICAvLyBWIGRpdGhlciBo aWdoCisKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIHByb2Nlc3MgMTYgcGl4ZWxzIGF0IGEg dGltZQorICAgICAgICB0c3QgICAgICAgICAgICAgdzcsICMxNSAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBDaGVjayBpZiBjaHJEc3RXICUgMTYgPT0gMAorICAgICAgICBiLm5lICAgICAgICAg ICAgLkxwcm9jZXNzX3N3YXBwZWRfOF9waXhlbHMgICAgICAgICAgICAgIC8vIElmIG5vdCwgdXNl IDgtcGl4ZWwgdmVyc2lvbgorCisgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLyAxNi1waXhlbCBwcm9jZXNzaW5nIHBhdGgK KyAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisgICAgICAgIG1vdiAgICAgICAgICAgICB4OCwgIzAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIGkgPSAwCisuTGxvb3Bfc3dhcHBlZF8xNl9waXhlbHM6CisKKyAgICAgICAgbW92ICAgICAg ICAgICAgIHYxNi4xNmIsIHYyLjE2YiAgICAgICAgICAgICAgICAgLy8gVSBhY2MgbG93CisgICAg ICAgIG1vdiAgICAgICAgICAgICB2MTcuMTZiLCB2My4xNmIgICAgICAgICAgICAgICAgIC8vIFUg YWNjIGhpZ2gKKyAgICAgICAgbW92ICAgICAgICAgICAgIHYxOC4xNmIsIHY0LjE2YiAgICAgICAg ICAgICAgICAgLy8gViBhY2MgbG93CisgICAgICAgIG1vdiAgICAgICAgICAgICB2MTkuMTZiLCB2 NS4xNmIgICAgICAgICAgICAgICAgIC8vIFYgYWNjIGhpZ2gKKworICAgICAgICBtb3YgICAgICAg ICAgICAgdjIwLjE2YiwgdjIuMTZiCisgICAgICAgIG1vdiAgICAgICAgICAgICB2MjEuMTZiLCB2 My4xNmIKKyAgICAgICAgbW92ICAgICAgICAgICAgIHYyMi4xNmIsIHY0LjE2YgorICAgICAgICBt b3YgICAgICAgICAgICAgdjIzLjE2YiwgdjUuMTZiCisKKyAgICAgICAgbW92ICAgICAgICAgICAg IHc5LCB3MyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hyRmlsdGVyU2l6ZSBjb3VudGVy CisgICAgICAgIG1vdiAgICAgICAgICAgICB4MTAsIHgyICAgICAgICAgICAgICAgICAgICAgICAg IC8vIGNockZpbHRlciBwb2ludGVyCisgICAgICAgIG1vdiAgICAgICAgICAgICB4MTEsIHg0ICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIGNoclVTcmMgYmFzZQorICAgICAgICBtb3YgICAgICAg ICAgICAgeDEyLCB4NSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaHJWU3JjIGJhc2UKKwor LkxmaWx0ZXJfc3dhcHBlZF9sb29wXzE2OgorICAgICAgICBsZHIgICAgICAgICAgICAgaDYsIFt4 MTBdLCAjMiAgICAgICAgICAgICAgICAgICAvLyBMb2FkIGZpbHRlciBjb2VmZmljaWVudAorCisg ICAgICAgIGxkciAgICAgICAgICAgICB4MTMsIFt4MTFdLCAjOCAgICAgICAgICAgICAgICAgIC8v IGNoclVTcmNbal0KKyAgICAgICAgbGRyICAgICAgICAgICAgIHgxNCwgW3gxMl0sICM4ICAgICAg ICAgICAgICAgICAgLy8gY2hyVlNyY1tqXQorICAgICAgICBhZGQgICAgICAgICAgICAgeDEzLCB4 MTMsIHg4LCBsc2wgIzEgICAgICAgICAgICAvLyAmY2hyVVNyY1tqXVtpXQorICAgICAgICBhZGQg ICAgICAgICAgICAgeDE0LCB4MTQsIHg4LCBsc2wgIzEgICAgICAgICAgICAvLyAmY2hyVlNyY1tq XVtpXQorICAgICAgICBhZGQgICAgICAgICAgICAgeDE1LCB4MTMsICMxNiAgICAgICAgICAgICAg ICAgICAvLyB4MTUgPSAmY2hyVVNyY1tqXVtpKzhdICg4IHNhbXBsZXMgKiAyIGJ5dGVzKQorICAg ICAgICBhZGQgICAgICAgICAgICAgeDE2LCB4MTQsICMxNgorCisgICAgICAgIGxkMSAgICAgICAg ICAgICB7djI0LjhofSwgW3gxM10gICAgICAgICAgICAgICAgIC8vIFUgc2FtcGxlcyAwLTcKKyAg ICAgICAgbGQxICAgICAgICAgICAgIHt2MjUuOGh9LCBbeDE0XSAgICAgICAgICAgICAgICAgLy8g ViBzYW1wbGVzIDAtNworCisgICAgICAgIGxkMSAgICAgICAgICAgICB7djI2LjhofSwgW3gxNV0g ICAgICAgICAgICAgICAgIC8vIFUgc2FtcGxlcyA4LTE1CisgICAgICAgIGxkMSAgICAgICAgICAg ICB7djI3LjhofSwgW3gxNl0gICAgICAgICAgICAgICAgIC8vIFYgc2FtcGxlcyA4LTE1CisKKyAg ICAgICAgc21sYWwgICAgICAgICAgIHYxNi40cywgdjI0LjRoLCB2Ni5oWzBdCisgICAgICAgIHNt bGFsMiAgICAgICAgICB2MTcuNHMsIHYyNC44aCwgdjYuaFswXQorICAgICAgICBzbWxhbCAgICAg ICAgICAgdjE4LjRzLCB2MjUuNGgsIHY2LmhbMF0KKyAgICAgICAgc21sYWwyICAgICAgICAgIHYx OS40cywgdjI1LjhoLCB2Ni5oWzBdCisKKyAgICAgICAgc21sYWwgICAgICAgICAgIHYyMC40cywg djI2LjRoLCB2Ni5oWzBdCisgICAgICAgIHNtbGFsMiAgICAgICAgICB2MjEuNHMsIHYyNi44aCwg djYuaFswXQorICAgICAgICBzbWxhbCAgICAgICAgICAgdjIyLjRzLCB2MjcuNGgsIHY2LmhbMF0K KyAgICAgICAgc21sYWwyICAgICAgICAgIHYyMy40cywgdjI3LjhoLCB2Ni5oWzBdCisKKyAgICAg ICAgc3VicyAgICAgICAgICAgIHc5LCB3OSwgIzEKKyAgICAgICAgYi5ndCAgICAgICAgICAgIC5M ZmlsdGVyX3N3YXBwZWRfbG9vcF8xNgorCisgICAgICAgIC8vIFByb2Nlc3MgYW5kIHN0b3JlIGZp cnN0IDggcGl4ZWxzCisgICAgICAgIHNxc2hydW4gICAgICAgICB2MjguNGgsIHYxNi40cywgIzE2 CisgICAgICAgIHNxc2hydW4yICAgICAgICB2MjguOGgsIHYxNy40cywgIzE2CisgICAgICAgIHNx c2hydW4gICAgICAgICB2MjkuNGgsIHYxOC40cywgIzE2CisgICAgICAgIHNxc2hydW4yICAgICAg ICB2MjkuOGgsIHYxOS40cywgIzE2CisgICAgICAgIHVxc2hybiAgICAgICAgICB2MzAuOGIsIHYy OS44aCwgIzMgICAgICAgICAgICAgIC8vIFYKKyAgICAgICAgdXFzaHJuICAgICAgICAgIHYzMS44 YiwgdjI4LjhoLCAjMyAgICAgICAgICAgICAgLy8gVQorCisgICAgICAgIC8vIFByb2Nlc3MgYW5k IHN0b3JlIG5leHQgOCBwaXhlbHMKKyAgICAgICAgc3FzaHJ1biAgICAgICAgIHYyOC40aCwgdjIw LjRzLCAjMTYKKyAgICAgICAgc3FzaHJ1bjIgICAgICAgIHYyOC44aCwgdjIxLjRzLCAjMTYKKyAg ICAgICAgc3FzaHJ1biAgICAgICAgIHYyOS40aCwgdjIyLjRzLCAjMTYKKyAgICAgICAgc3FzaHJ1 bjIgICAgICAgIHYyOS44aCwgdjIzLjRzLCAjMTYKKyAgICAgICAgdXFzaHJuICAgICAgICAgIHYy NC44YiwgdjI5LjhoLCAjMyAgICAgICAgICAgICAgLy8gVgorICAgICAgICB1cXNocm4gICAgICAg ICAgdjI1LjhiLCB2MjguOGgsICMzICAgICAgICAgICAgICAvLyBVCisKKyAgICAgICAgLy8gU3Rv cmUgYm90aCA4LXBpeGVsIGJsb2NrcworICAgICAgICBzdDIgICAgICAgICAgICAge3YzMC44Yiwg djMxLjhifSwgW3g2XSwgIzE2CisgICAgICAgIHN0MiAgICAgICAgICAgICB7djI0LjhiLCB2MjUu OGJ9LCBbeDZdLCAjMTYKKworICAgICAgICBzdWJzICAgICAgICAgICAgdzcsIHc3LCAjMTYKKyAg ICAgICAgYWRkICAgICAgICAgICAgIHg4LCB4OCwgIzE2CisgICAgICAgIGIuZ3QgICAgICAgICAg ICAuTGxvb3Bfc3dhcHBlZF8xNl9waXhlbHMKKyAgICAgICAgcmV0CisKKyAgICAgICAgLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vIDgt cGl4ZWwgcHJvY2Vzc2luZyBwYXRoIChvcmlnaW5hbCBjb2RlKQorICAgICAgICAvLyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5McHJvY2Vzc19zd2FwcGVk XzhfcGl4ZWxzOgorICAgICAgICBtb3YgICAgICAgICAgICAgeDgsICMwICAgICAgICAgICAgICAg ICAgICAgICAgLy8gaSA9IDAKKy5MbG9vcF9zd2FwcGVkXzhfcGl4ZWxzOgorICAgICAgICAvLyBJ bml0aWFsaXplIGFjY3VtdWxhdG9ycyB3aXRoIGRpdGhlcgorICAgICAgICBtb3YgICAgICAgICAg ICAgdjE2LjE2YiwgdjIuMTZiICAgICAgICAgICAgICAgLy8gVSBhY2MgbG93CisgICAgICAgIG1v diAgICAgICAgICAgICB2MTcuMTZiLCB2My4xNmIgICAgICAgICAgICAgICAvLyBVIGFjYyBoaWdo CisgICAgICAgIG1vdiAgICAgICAgICAgICB2MTguMTZiLCB2NC4xNmIgICAgICAgICAgICAgICAv LyBWIGFjYyBsb3cKKyAgICAgICAgbW92ICAgICAgICAgICAgIHYxOS4xNmIsIHY1LjE2YiAgICAg ICAgICAgICAgIC8vIFYgYWNjIGhpZ2gKKworICAgICAgICBtb3YgICAgICAgICAgICAgdzksIHcz ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hyRmlsdGVyU2l6ZSBjb3VudGVyCisgICAgICAg IG1vdiAgICAgICAgICAgICB4MTAsIHgyICAgICAgICAgICAgICAgICAgICAgICAvLyBjaHJGaWx0 ZXIgcG9pbnRlcgorICAgICAgICBtb3YgICAgICAgICAgICAgeDExLCB4NCAgICAgICAgICAgICAg ICAgICAgICAgLy8gY2hyVVNyYyBiYXNlCisgICAgICAgIG1vdiAgICAgICAgICAgICB4MTIsIHg1 ICAgICAgICAgICAgICAgICAgICAgICAvLyBjaHJWU3JjIGJhc2UKKworLkxmaWx0ZXJfc3dhcHBl ZF9sb29wXzg6CisgICAgICAgIGxkciAgICAgICAgICAgICBoNiwgW3gxMF0sICMyICAgICAgICAg ICAgICAgICAvLyBMb2FkIGZpbHRlciBjb2VmZmljaWVudAorCisgICAgICAgIGxkciAgICAgICAg ICAgICB4MTMsIFt4MTFdLCAjOCAgICAgICAgICAgICAgICAvLyBjaHJVU3JjW2pdCisgICAgICAg IGxkciAgICAgICAgICAgICB4MTQsIFt4MTJdLCAjOCAgICAgICAgICAgICAgICAvLyBjaHJWU3Jj W2pdCisgICAgICAgIGFkZCAgICAgICAgICAgICB4MTMsIHgxMywgeDgsIGxzbCAjMSAgICAgICAg ICAvLyAmY2hyVVNyY1tqXVtpXQorICAgICAgICBhZGQgICAgICAgICAgICAgeDE0LCB4MTQsIHg4 LCBsc2wgIzEgICAgICAgICAgLy8gJmNoclZTcmNbal1baV0KKworICAgICAgICBsZDEgICAgICAg ICAgICAge3YyMC44aH0sIFt4MTNdICAgICAgICAgICAgICAgLy8gVSBzYW1wbGVzCisgICAgICAg IGxkMSAgICAgICAgICAgICB7djIxLjhofSwgW3gxNF0gICAgICAgICAgICAgICAvLyBWIHNhbXBs ZXMKKworICAgICAgICBzbWxhbCAgICAgICAgICAgdjE2LjRzLCB2MjAuNGgsIHY2LmhbMF0KKyAg ICAgICAgc21sYWwyICAgICAgICAgIHYxNy40cywgdjIwLjhoLCB2Ni5oWzBdCisgICAgICAgIHNt bGFsICAgICAgICAgICB2MTguNHMsIHYyMS40aCwgdjYuaFswXQorICAgICAgICBzbWxhbDIgICAg ICAgICAgdjE5LjRzLCB2MjEuOGgsIHY2LmhbMF0KKworICAgICAgICBzdWJzICAgICAgICAgICAg dzksIHc5LCAjMQorICAgICAgICBiLmd0ICAgICAgICAgICAgLkxmaWx0ZXJfc3dhcHBlZF9sb29w XzgKKworICAgICAgICAvLyBGaW5hbCBwcm9jZXNzaW5nIGFuZCBzdG9yZQorICAgICAgICBzcXNo cnVuICAgICAgICAgdjI2LjRoLCB2MTYuNHMsICMxNgorICAgICAgICBzcXNocnVuMiAgICAgICAg djI2LjhoLCB2MTcuNHMsICMxNgorICAgICAgICBzcXNocnVuICAgICAgICAgdjI3LjRoLCB2MTgu NHMsICMxNgorICAgICAgICBzcXNocnVuMiAgICAgICAgdjI3LjhoLCB2MTkuNHMsICMxNgorICAg ICAgICB1cXNocm4gICAgICAgICAgdjI4LjhiLCB2MjcuOGgsICMzICAgICAgICAgICAgLy8gVgor ICAgICAgICB1cXNocm4gICAgICAgICAgdjI5LjhiLCB2MjYuOGgsICMzICAgICAgICAgICAgLy8g VQorCisgICAgICAgIHN0MiAgICAgICAgICAgICB7djI4LjhiLCB2MjkuOGJ9LCBbeDZdLCAjMTYK KworICAgICAgICBzdWJzICAgICAgICAgICAgdzcsIHc3LCAjOAorICAgICAgICBhZGQgICAgICAg ICAgICAgeDgsIHg4LCAjOAorICAgICAgICBiLmd0ICAgICAgICAgICAgLkxsb29wX3N3YXBwZWRf OF9waXhlbHMKKyAgICAgICAgcmV0CitlbmRmdW5jCmRpZmYgLS1naXQgYS9saWJzd3NjYWxlL2Fh cmNoNjQvc3dzY2FsZS5jIGIvbGlic3dzY2FsZS9hYXJjaDY0L3N3c2NhbGUuYwppbmRleCA2ZTVh NzIxYzFmLi5jMDdlMzc1MDI1IDEwMDY0NAotLS0gYS9saWJzd3NjYWxlL2FhcmNoNjQvc3dzY2Fs ZS5jCisrKyBiL2xpYnN3c2NhbGUvYWFyY2g2NC9zd3NjYWxlLmMKQEAgLTE2OCw2ICsxNjgsMTYg QEAgdm9pZCBmZl95dXYycGxhbmUxXzhfbmVvbigKICAgICAgICAgY29uc3QgdWludDhfdCAqZGl0 aGVyLAogICAgICAgICBpbnQgb2Zmc2V0KTsKIAordm9pZCBmZl95dXYybnYxMmNYX25vdHN3YXBw ZWRfbmVvbihlbnVtIEFWUGl4ZWxGb3JtYXQgZHN0Rm9ybWF0LCBjb25zdCB1aW50OF90ICpjaHJE aXRoZXIsCisgICAgY29uc3QgaW50MTZfdCAqY2hyRmlsdGVyLCBpbnQgY2hyRmlsdGVyU2l6ZSwK KyAgICBjb25zdCBpbnQxNl90ICoqY2hyVVNyYywgY29uc3QgaW50MTZfdCAqKmNoclZTcmMsCisg ICAgdWludDhfdCAqZGVzdCwgaW50IGNockRzdFcpOworCit2b2lkIGZmX3l1djJudjEyY1hfc3dh cHBlZF9uZW9uKGVudW0gQVZQaXhlbEZvcm1hdCBkc3RGb3JtYXQsIGNvbnN0IHVpbnQ4X3QgKmNo ckRpdGhlciwKKyAgICBjb25zdCBpbnQxNl90ICpjaHJGaWx0ZXIsIGludCBjaHJGaWx0ZXJTaXpl LAorICAgIGNvbnN0IGludDE2X3QgKipjaHJVU3JjLCBjb25zdCBpbnQxNl90ICoqY2hyVlNyYywK KyAgICB1aW50OF90ICpkZXN0LCBpbnQgY2hyRHN0Vyk7CisKICNkZWZpbmUgQVNTSUdOX1NDQUxF X0ZVTkMyKGhzY2FsZWZuLCBmaWx0ZXJzaXplLCBvcHQpIGRvIHsgICAgICAgICAgICAgIFwKICAg ICBpZiAoYy0+c3JjQnBjID09IDgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKICAgICAgICAgaWYoYy0+ZHN0QnBjIDw9IDE0KSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTIwMSw2ICsyMTEsMTIgQEAgdm9p ZCBmZl95dXYycGxhbmUxXzhfbmVvbigKICAgICBkZWZhdWx0OiBicmVhazsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKKyNkZWZp bmUgQVNTSUdOX1lVVjJOVjEyX0ZVTkMoeXV2Mm52MTJmbiwgb3B0LCBkc3RGb3JtYXQpICAgICAg ICAgICAgICAgXAorICAgIGlmKCFpc1N3YXBwZWRDaHJvbWEoZHN0Rm9ybWF0KSkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl1djJudjEyZm4gPSBmZl95dXYy bnYxMmNYX25vdHN3YXBwZWRfICAjIyBvcHQ7ICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICB5dXYybnYxMmZuID0gZmZfeXV2Mm52MTJjWF9zd2FwcGVkXyAgIyMgb3B0 OworCiAjZGVmaW5lIE5FT05fSU5QVVQobmFtZSkgXAogdm9pZCBmZl8jI25hbWUjI1RvWV9uZW9u KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCB1aW50OF90ICosIFwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKiwgaW50IHcsIHVpbnQzMl90ICpj b2VmZnMsIHZvaWQgKik7IFwKQEAgLTI3NSw3ICsyOTEsMTAgQEAgYXZfY29sZCB2b2lkIGZmX3N3 c19pbml0X3N3c2NhbGVfYWFyY2g2NChTd3NJbnRlcm5hbCAqYykKICAgICAgICAgQVNTSUdOX1ZT Q0FMRV9GVU5DKGMtPnl1djJwbGFuZTEsIG5lb24pOwogICAgICAgICBpZiAoYy0+ZHN0QnBjID09 IDgpIHsKICAgICAgICAgICAgIGMtPnl1djJwbGFuZVggPSBmZl95dXYycGxhbmVYXzhfbmVvbjsK KyAgICAgICAgICAgIGlmKGlzU2VtaVBsYW5hcllVVihjLT5vcHRzLmRzdF9mb3JtYXQpCisgICAg ICAgICAgICAgICBBU1NJR05fWVVWMk5WMTJfRlVOQyhjLT55dXYybnYxMmNYLCBuZW9uLCBjLT5v cHRzLmRzdF9mb3JtYXQpOwogICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChjLT5vcHRzLnNy Y19mb3JtYXQpIHsKICAgICAgICAgY2FzZSBBVl9QSVhfRk1UX0FCR1I6CiAgICAgICAgICAgICBj LT5sdW1Ub1lWMTIgPSBmZl9hYmdyMzJUb1lfbmVvbjsKLS0gCjIuMzYuMC53aW5kb3dzLjEKCg== --_004_PN2P287MB1165DAC8027869113203CB14D66EAPN2P287MB1165INDP_ 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_PN2P287MB1165DAC8027869113203CB14D66EAPN2P287MB1165INDP_--