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 6EFC34D819 for ; Mon, 2 Jun 2025 04:36:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 8A19F68D867; Mon, 2 Jun 2025 07:36:27 +0300 (EEST) Received: from PNYPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11020129.outbound.protection.outlook.com [52.101.225.129]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 0DB0C68D6E7 for ; Mon, 2 Jun 2025 07:36:21 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=P58+RYckyRlLpcMnpVyUmNgBEHIHmaL2dHNIyzDD3IuQ5cPKru3EwFawHlwsbUeOP70IT7LkbyhcyqKtC4ihibk7/Ib3beUB1KyJ/xIcvw+qAwuy0eno1izCCmoyjehkMSr0hViBmePhlewQ+ETKdYG3CVqDPN1irYfe+vhlg2gutVkFuI9jDU9mqbJWko99q71BSJeqnrDu2Rt3AMgYZxWZ8XhN4E8TgtlHYBio9ckeQE6LTfKMdUU2Cwc1dctbpiMH/uUWMKuBBYHcf8tN6saklv0fg4YFrEWSIDodyxqSu1OqOc2eRlM6U6v/IUg+OVznsOI7JyCXk6FuRT7syg== 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=7jwsAtFXnA4NhGCsKwVHPQaRLnfHC+D3u+a/NoL8Syw=; b=jUqh75rQqzg5bY+f7rjOIPM2SDUlwHOTQMIsbn7l410LoaKe1a5fXdjhIT0h31wt2e/cqbZuQXTYPcIS6lOm85Jf8Y48t4c1TehuCRKIrsrpTpiZ3yWrRK/MAhZvXsjuP7rC92ic6stkwrL8rzB7U07Sxqd3rqE60Em+1p9XUWUz8IaMDgCjz8bJmMtndaEYlEp8uQc15/tUPr9s8ZfiZ/bw+ZvDt40fn0ohDah4hsgjQfeJoLjsVEqbyRh+ZelYFT3/amwnKvcl42j2TVXNjywjKVEMw/uHYhGsIMvtiuygpnzFMQBSlBV1UypzHmx6uNTcfIzCyB107Xkeo+j77g== 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=7jwsAtFXnA4NhGCsKwVHPQaRLnfHC+D3u+a/NoL8Syw=; b=MLxeSTc8CgeyvIGP91m3C6sfuQuQpAmfsJbiMlNFaI/jPk89HIRw9xJ1BcVKglexBNGEbIld2iA+QTtJmHdVrRBy3Q145vbrxJS+KYNRsu4zgPLTUx2f01QWU7Rv1vbU9stCfjg/R4SxHijT1MRYCTWKMX1nmSKABV8E6B29r9bUZKp+T1MaDUGunla4xbJaR6j1Erq11sruIfSWR6oLPoEbbb2mrBZ8aHOolfxtt3KsmB2zxFHDg89Dsd/e3fhAw8uzfAgIXSGCdIjLf9oJkuOG0Jzpi8G1BMMnpSwYJLE7sYQ6RDf8rhz4657gHtOip3JRID+OXeMT+85TudaIIQ== Received: from PN2P287MB1165.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:154::10) by PN0P287MB1733.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:181::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.37; Mon, 2 Jun 2025 04:36:14 +0000 Received: from PN2P287MB1165.INDP287.PROD.OUTLOOK.COM ([fe80::c146:9404:f8bd:6b70]) by PN2P287MB1165.INDP287.PROD.OUTLOOK.COM ([fe80::c146:9404:f8bd:6b70%4]) with mapi id 15.20.8769.037; Mon, 2 Jun 2025 04:36:14 +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: AQHb03diOh0/yDva8Eqjdyrjf0HXcQ== Date: Mon, 2 Jun 2025 04:36:14 +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_|PN0P287MB1733:EE_ x-ms-office365-filtering-correlation-id: 0e9db3d7-1dac-4b3f-6189-08dda18f0253 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|10070799003|376014|366016|8096899003|38070700018|4053099003; x-microsoft-antispam-message-info: =?iso-8859-1?Q?wcS0LdeIqEeo82UpVFPyB2AQ+jvmo9tclXnSLFtFDE4gFhH+mA+EM79xaq?= =?iso-8859-1?Q?GHIPN/3bFbT9g8nww/J+YK5aayeaH4lGOvwsEKEdeDJpyDergGRItjXRB+?= =?iso-8859-1?Q?PovoNDOdscfGztgu9wwT5oABdxfq2Pc3ecwbyxVHYHajEuLUDVVBkQ7PoH?= =?iso-8859-1?Q?+QQccDtpwloCgTpn3Bjmb6EW0rBhowwZKwhmESoTIyMAKO8h0LUaCgPStC?= =?iso-8859-1?Q?X8ZaV3Bl9DsHZL2pe7E3vG9vx3C9lXXiXJeLa4Hh80kmoI26OsOYxJ/wy/?= =?iso-8859-1?Q?20zxl2zYLNSBtSG65ZmD3FXgLhJroNTPPtHGxiDkyKkBEYQRnJ8vCk+cXb?= =?iso-8859-1?Q?s5yTdnnTbp04AlT3O149ZW6kguTxzVyCVLNH1t8FSwO85t+a1CAoT/o+la?= =?iso-8859-1?Q?Tsdpr7T8drG0fHoqSF80CeDKY6xziajkgMuXwQpJr3wKMmuyrJ7+u74SY0?= =?iso-8859-1?Q?3gHrB56xCSch64oLuXRiPNeeFqkhnTaIdhYlPEI0oVNTqFij4HqzpFd2d5?= =?iso-8859-1?Q?j3QNbDIEZxbaY3n9ymfIv8OBOppDE5zFsN7IkIlLGbZSxyaxZLgigy0Eh8?= =?iso-8859-1?Q?+GPYoBZL/kiXnw50XgtYwWYTm5BWQ0cWVof/TYl0ffGuCJ0Kp69PMJSzir?= =?iso-8859-1?Q?s3Fza2wCIccr1wlF3y6k9ZVMVSQeFvpepK9OobV/uW8IXDXnJLbInZ6PBS?= =?iso-8859-1?Q?XbELqHwB/tVlUprPpDritkTllCQy+Tdu/xcLX06IQyjXjEwaHR7hy4Fyip?= =?iso-8859-1?Q?NnuQDGfyVUTcjMdHZeRr4JpIVv71wlR/IiFfBlBF6VKMHhp+R5/BBQnkyF?= =?iso-8859-1?Q?ryWAxqB+rRThV8jxZcX1Cu91cNnf1ZGNp+jO+KTzowVuQ0Lmkc/YCMz+iD?= =?iso-8859-1?Q?KtcjfW0Wi3Y/Ltqsfi8aNSU+dpByq9bG5DPXSHyFi5t7+tApPe5v80zrUt?= =?iso-8859-1?Q?FUWHT4vgEuVIgqPC/8BWTqn88FCTnKFX31wqKmgfhQVXVAlau9ungKw57x?= =?iso-8859-1?Q?1Lk0SJiVszjieVqsYouaq5FuPtAlmQvwtZE3yLyMxOaJMMCXRalYtvhKQf?= =?iso-8859-1?Q?/yc+O4MM3RJI7RDw5gESZznqA+ny06y9hY4xCrC9YP8IBC8vOZPepm74XW?= =?iso-8859-1?Q?NVSV3DjYGLUSbZorB7Ek9SxmTmKqW5Eiuo+T8sPTkXgOKpe7uANRvL+LGz?= =?iso-8859-1?Q?wayRK9b1oPPr5hIG25UgZWjHAqPWTln+Rf4Trj+f0mdEoRPqiEh+ynA+8p?= =?iso-8859-1?Q?Tw6jvl+/TQ9aCPAUkpDphXlPCRCIOMKpk/ZGG5UmlED6QA0DMAhJwNdqff?= =?iso-8859-1?Q?kNrQGtGaG7WK8U1oCHNpPY4KdNMpJgRX+5ztoU7dC0sav2Ow138gVw3uHJ?= =?iso-8859-1?Q?mUybDr/XiVBW5L6aj0mNGoT2Dg1QUNbUuwDGpWe/k421HiS3uRgqATkVZ2?= =?iso-8859-1?Q?9FkQWLf3GLLzEiclcj0fP/SIiJO46n3g/lC9qZ5wBuQSaWEd3qXmzhAwf8?= =?iso-8859-1?Q?yVqIHsc+q1Krvr5tzwkYpqa8XL3DYSjEIwedTHIsIhjUpPRbXyuZgTANFA?= =?iso-8859-1?Q?NqwcKX4=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)(1800799024)(10070799003)(376014)(366016)(8096899003)(38070700018)(4053099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?zi6Ycguf97ii3n5C3j9Ljowg6pPzbCDY694Rsee+jA1tKSyso+R9p3WBRE?= =?iso-8859-1?Q?HjENDKeI+2prHbZaqW4r5CJUK29+4KlN97irGceYnu9A/duEvNLuV8WvOH?= =?iso-8859-1?Q?gfLOWbCVNlnIOsjRABiluBmBt/OY5Uf/O4jazOyluMZR7HdwMFM+56uglk?= =?iso-8859-1?Q?mdCU0go3YtVpvAlIqQrD5nsk6cQorl+15N0seocBXkWGjjDZpdBVyACGho?= =?iso-8859-1?Q?aFilmdiGaJ84e2g90kTOtRRjlraSNP/SXbBDipG2I798Nw/3eGq48Q2+WB?= =?iso-8859-1?Q?wporEUpgOcuRJLcq1V9J9hySkgqi9srOTgfCWt7NUxNuRSyTmZkkvLqkKf?= =?iso-8859-1?Q?CmqgSLFxpImcpPF5SKxyj0i2LJRlDrJmoyM7d0iWrb2XB+qRCx0NRRtDmY?= =?iso-8859-1?Q?nb0dx/fO4zA6FFcLpPp3kJ0yovu1h6/6NUOT0FUQYvd3jna9Dbfh1In93g?= =?iso-8859-1?Q?qQksWsJ0sV6W5HzjHdrwwugAUJYv2fu5SCsl64i57fAM0mrqWDrPxG2Dgi?= =?iso-8859-1?Q?rOXFMl7/J/gxRwx++nU/w3IMu9yXd5etafKSAKkYc+D1yK/xf5dK+6poii?= =?iso-8859-1?Q?kFp1edu1YAmBIBWHIkDXtJOhrhOfR/ikmTkHHk+whYBXvfJDbApGMWD8md?= =?iso-8859-1?Q?9U3VeJxG66bWt9kfIQsu7eMKTL0IgAL1iOSU5+MyDrDMMlPTNlivO8DB1c?= =?iso-8859-1?Q?kK3wrWHyWKVlqk+xatswksRyKyg8r2gmDF6RdvAMWSZIbpDn+SluBC75rZ?= =?iso-8859-1?Q?NSd5v53CltPGM4MqE0YyJJbFm1h2W0WGFhJx+Ts2f6yIrmm1ZIADm3PMTP?= =?iso-8859-1?Q?Vmi9jTaaWMpnkP6+sD4keGJDdpY7T2kOJJNLggyI0ejB034XeNM79Dtlft?= =?iso-8859-1?Q?aLmVpt9dEGrbezYEk4Wed1qJc3iAUo7ihrzKTDngvfRbh917p0qKf47WIj?= =?iso-8859-1?Q?hfl4Rswvrpq/qNk9crpZv6X/csUUSFjBcFYGbH4JU4MozlkLIqzZvV8nt6?= =?iso-8859-1?Q?NSBtoI+TgvTL3ePPHZ9zKzbBVoftD2XSumAGN0RJ2gp1SPbSLU6mT7BLUb?= =?iso-8859-1?Q?07ZxbGOHp3Z3t3YSPHWcwr+IYP49921NEJHft9TsFQMDbsjLxQU9BhCSsZ?= =?iso-8859-1?Q?04j8TXyZUEkLi8G5VHzhdbfYMSdBaT4lAY85utYhq9dmU+cUzqk3lx2Ljl?= =?iso-8859-1?Q?Drm4wInTFgFrfB/69fcSPydSoyq2FhZddeVz7GmmbC5QW6pVoSuKEtYBRP?= =?iso-8859-1?Q?zjPAaDPLH9WS2ndLsZcYsSrkBVckBkptSZMLYMiDoiYnHgC9IjfVVd1sK+?= =?iso-8859-1?Q?3KVVnYyvKM8vJXYf1J1zKCA2fh5ylcfICdfc883fEtA01IexB5e0YFXWLI?= =?iso-8859-1?Q?Fw2J8leNUsPDzPEzqJ0O8TCvKSjFRd4AvW3Iwo0mJK8UkFBqidT5Po/lvU?= =?iso-8859-1?Q?BXnq/ZI+fU3stTM3rQ+NbrZPqkdKovTpUhbwMPRuiWbg9PIT9nJl76nUid?= =?iso-8859-1?Q?oPYYZx/ZoU4TTLmukeKCAKPbf0AvSR8xshSchY+lq6jlhLWqJIcqhLPl3B?= =?iso-8859-1?Q?F/A/1pgO4KNQnfKwQkm7rG5CIPdutRmpUMlszdz3IJiEVwkFsGZplS5izQ?= =?iso-8859-1?Q?22UrJAQB1rFLnsY61r8lRQIOfKu9QGhdF9mW8X3+p0gbMtO4XN0t5NWcU1?= =?iso-8859-1?Q?2NoBAmxSKvu+TN+xQCUaNdeVh10D+LIZI8mxhaoAQjWcC+Aa1u8lFm2Q+O?= =?iso-8859-1?Q?Ln5w=3D=3D?= Content-Type: multipart/mixed; boundary="_004_PN2P287MB11658545ACDE2C3F246E5568D662APN2P287MB1165INDP_" 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: 0e9db3d7-1dac-4b3f-6189-08dda18f0253 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jun 2025 04:36:14.7621 (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: akYcq9/USZ1iKeK4LtMhk+kc+Tv6WYctOD1ZbHd4OVYdBFBmJjJi8nomGXfoRH8cGzATSCsdYrL59pMTVF1H33CRDdvyoJyNMZNVc8hzR88= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1733 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --_004_PN2P287MB11658545ACDE2C3F246E5568D662APN2P287MB1165INDP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable >From 7260822a578130a713c1455cca6cdd06f1540db8 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 | 308 +++++++++++++++++++++++++++++++++++ libswscale/aarch64/swscale.c | 18 ++ 2 files changed, 326 insertions(+) diff --git a/libswscale/aarch64/output.S b/libswscale/aarch64/output.S index 190c438870..8eb89e8b54 100644 --- a/libswscale/aarch64/output.S +++ b/libswscale/aarch64/output.S @@ -226,3 +226,311 @@ function ff_yuv2plane1_8_neon, export=3D1 b.gt 2b // loop until widt= h consumed ret endfunc + +// void ff_yuv2nv12cX_neon(enum AVPixelFormat dstFormat, const uint8_t *ch= rDither, +// const int16_t *chrFilter, int chrFilterSize, +// const int16_t **chrUSrc, const int16_t **chrVSr= c, +// uint8_t *dest, int chrDstW) + +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 chrDstW % 16 =3D=3D 0 + b.ne .Lprocess_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_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 counter + mov x10, x2 // chrFilter pointer + mov x11, x4 // chrUSrc base + mov x12, x5 // chrVSrc base + +.Lfilter_loop_16: + ldr h6, [x10], #2 // Load filter coefficient + + 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 &chrUSrc[j][i+8] (8 sam= ples * 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 counter + mov x10, x2 // chrFilter pointer + mov x11, x4 // chrUSrc base + mov x12, x5 // chrVSrc base + +.Lfilter_loop_8: + ldr h6, [x10], #2 // Load filter coefficient + + 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 + + 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 chrDstW % 16 =3D=3D 0 + b.ne .Lswapped_process_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 +.Lswapped_loop_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 counter + mov x10, x2 // chrFilter pointer + mov x11, x4 // chrUSrc base + mov x12, x5 // chrVSrc base + +.Lswapped_filter_loop_16: + ldr h6, [x10], #2 // Load filter coefficient + + // Load pointers for first 8 pixels + 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 &chrUSrc[j][i+8] (8 sam= ples * 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 .Lswapped_filter_loop_16 + + 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 + + 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 .Lswapped_loop_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 + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +.Lswapped_process_8_pixels: + mov x8, #0 // i =3D 0 +.Lswapped_loop_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 counter + mov x10, x2 // chrFilter pointer + mov x11, x4 // chrUSrc base + mov x12, x5 // chrVSrc base + +.Lswapped_filter_loop_8: + ldr h6, [x10], #2 // Load filter coefficient + + 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 .Lswapped_filter_loop_8 + + 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 .Lswapped_loop_8_pixels + ret +endfunc diff --git a/libswscale/aarch64/swscale.c b/libswscale/aarch64/swscale.c index 6e5a721c1f..0e57112f42 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,9 @@ 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; + ASSIGN_YUV2NV12_FUNC(c->yuv2nv12cX, neon, c->opts.dst_format); } + switch (c->opts.src_format) { case AV_PIX_FMT_ABGR: c->lumToYV12 =3D ff_abgr32ToY_neon; -- 2.36.0.windows.1 --_004_PN2P287MB11658545ACDE2C3F246E5568D662APN2P287MB1165INDP_ Content-Type: application/octet-stream; name="swscale-aarch64-output-Implement-neon-assembly-fo.patch" Content-Description: swscale-aarch64-output-Implement-neon-assembly-fo.patch Content-Disposition: attachment; filename="swscale-aarch64-output-Implement-neon-assembly-fo.patch"; size=14784; creation-date="Mon, 02 Jun 2025 04:34:53 GMT"; modification-date="Mon, 02 Jun 2025 04:35:12 GMT" Content-Transfer-Encoding: base64 RnJvbSA3MjYwODIyYTU3ODEzMGE3MTNjMTQ1NWNjYTZjZGQwNmYxNTQwZGI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYXJzaGl0aGEgU3VyZXNoIDxoYXJzaGl0aGFAbXVsdGljb3Jl d2FyZWluYy5jb20+CkRhdGU6IE1vbiwgMTkgTWF5IDIwMjUgMjI6Mzc6MjAgKzA1MzAKU3ViamVj dDogW1BBVENIXSBzd3NjYWxlL2FhcmNoNjQvb3V0cHV0OiBJbXBsZW1lbnQgbmVvbiBhc3NlbWJs eSBmb3IKIHl1djJudjEyY1hfYygpCgp5dXYybnYxMmNYXzJfNTEyX2FjY3VyYXRlX2M6ICAgICAg ICAgICAgICAgICAgICAgICAgICAzNTA4LjggKCAxLjAweCkKeXV2Mm52MTJjWF8yXzUxMl9hY2N1 cmF0ZV9uZW9uOiAgICAgICAgICAgICAgICAgICAgICAgIDM2OS4yICggOS41MHgpCnl1djJudjEy Y1hfMl81MTJfYXBwcm94aW1hdGVfYzogICAgICAgICAgICAgICAgICAgICAgIDM0OTkuMCAoIDEu MDB4KQp5dXYybnYxMmNYXzJfNTEyX2FwcHJveGltYXRlX25lb246ICAgICAgICAgICAgICAgICAg ICAgMzcwLjIgKCA5LjQ1eCkKeXV2Mm52MTJjWF80XzUxMl9hY2N1cmF0ZV9jOiAgICAgICAgICAg ICAgICAgICAgICAgICAgNDY4My4wICggMS4wMHgpCnl1djJudjEyY1hfNF81MTJfYWNjdXJhdGVf bmVvbjogICAgICAgICAgICAgICAgICAgICAgICA1NjguOCAoIDguMjN4KQp5dXYybnYxMmNYXzRf NTEyX2FwcHJveGltYXRlX2M6ICAgICAgICAgICAgICAgICAgICAgICA0NjgyLjYgKCAxLjAweCkK eXV2Mm52MTJjWF80XzUxMl9hcHByb3hpbWF0ZV9uZW9uOiAgICAgICAgICAgICAgICAgICAgIDU2 OS45ICggOC4yMngpCnl1djJudjEyY1hfOF81MTJfYWNjdXJhdGVfYzogICAgICAgICAgICAgICAg ICAgICAgICAgIDcyNDMuMCAoIDEuMDB4KQp5dXYybnYxMmNYXzhfNTEyX2FjY3VyYXRlX25lb246 ICAgICAgICAgICAgICAgICAgICAgICAgOTM3LjYgKCA3LjcyeCkKeXV2Mm52MTJjWF84XzUxMl9h cHByb3hpbWF0ZV9jOiAgICAgICAgICAgICAgICAgICAgICAgNzIzNS45ICggMS4wMHgpCnl1djJu djEyY1hfOF81MTJfYXBwcm94aW1hdGVfbmVvbjogICAgICAgICAgICAgICAgICAgICA5MzguMyAo IDcuNzF4KQp5dXYybnYxMmNYXzE2XzUxMl9hY2N1cmF0ZV9jOiAgICAgICAgICAgICAgICAgICAg ICAgIDEzNzQ5LjcgKCAxLjAweCkKeXV2Mm52MTJjWF8xNl81MTJfYWNjdXJhdGVfbmVvbjogICAg ICAgICAgICAgICAgICAgICAgMTcwOC4xICggOC4wNXgpCnl1djJudjEyY1hfMTZfNTEyX2FwcHJv eGltYXRlX2M6ICAgICAgICAgICAgICAgICAgICAgMTM3NTAuMCAoIDEuMDB4KQp5dXYybnYxMmNY XzE2XzUxMl9hcHByb3hpbWF0ZV9uZW9uOiAgICAgICAgICAgICAgICAgICAxNzA4LjYgKCA4LjA1 eCkKLS0tCiBsaWJzd3NjYWxlL2FhcmNoNjQvb3V0cHV0LlMgIHwgMzA4ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBsaWJzd3NjYWxlL2FhcmNoNjQvc3dzY2FsZS5jIHwgIDE4 ICsrCiAyIGZpbGVzIGNoYW5nZWQsIDMyNiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvbGli c3dzY2FsZS9hYXJjaDY0L291dHB1dC5TIGIvbGlic3dzY2FsZS9hYXJjaDY0L291dHB1dC5TCmlu ZGV4IDE5MGM0Mzg4NzAuLjhlYjg5ZThiNTQgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUvYWFyY2g2 NC9vdXRwdXQuUworKysgYi9saWJzd3NjYWxlL2FhcmNoNjQvb3V0cHV0LlMKQEAgLTIyNiwzICsy MjYsMzExIEBAIGZ1bmN0aW9uIGZmX3l1djJwbGFuZTFfOF9uZW9uLCBleHBvcnQ9MQogICAgICAg ICBiLmd0ICAgICAgICAgICAgMmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29w IHVudGlsIHdpZHRoIGNvbnN1bWVkCiAgICAgICAgIHJldAogZW5kZnVuYworCisvLyB2b2lkIGZm X3l1djJudjEyY1hfbmVvbihlbnVtIEFWUGl4ZWxGb3JtYXQgZHN0Rm9ybWF0LCBjb25zdCB1aW50 OF90ICpjaHJEaXRoZXIsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90 ICpjaHJGaWx0ZXIsIGludCBjaHJGaWx0ZXJTaXplLAorLy8gICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgaW50MTZfdCAqKmNoclVTcmMsIGNvbnN0IGludDE2X3QgKipjaHJWU3JjLAorLy8g ICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGVzdCwgaW50IGNockRzdFcpCisKK2Z1 bmN0aW9uIGZmX3l1djJudjEyY1hfbm90c3dhcHBlZF9uZW9uLCBleHBvcnQ9MQorICAgIC8vIHgw IC0gZHN0Rm9ybWF0ICh1bnVzZWQpCisgICAgLy8geDEgLSB1aW50OF90ICpjaHJEaXRoZXIKKyAg ICAvLyB4MiAtIGludDE2X3QgKmNockZpbHRlcgorICAgIC8vIHgzIC0gaW50IGNockZpbHRlclNp emUKKyAgICAvLyB4NCAtIGludDE2X3QgKipjaHJVU3JjCisgICAgLy8geDUgLSBpbnQxNl90ICoq Y2hyVlNyYworICAgIC8vIHg2IC0gdWludDhfdCAqZGVzdAorICAgIC8vIHg3IC0gaW50IGNockRz dFcKKworICAgIC8vIExvYWQgZGl0aGVyIHBhdHRlcm4gYW5kIGNvbXB1dGUgVSBhbmQgViBkaXRo ZXIgdmVjdG9ycworICAgIGxkMSAgICAge3YwLjhifSwgW3gxXSAgICAgICAgICAgICAgIC8vIGNo ckRpdGhlclswLi43XQorICAgIGV4dCAgICAgdjEuOGIsIHYwLjhiLCB2MC44YiwgIzMgICAgICAv LyBSb3RhdGUgZm9yIFY6IChpKzMpJjcKKworICAgIHV4dGwgICAgdjAuOGgsIHYwLjhiCisgICAg dXh0bCAgICB2MS44aCwgdjEuOGIKKworICAgIHVzaGxsICAgIHYyLjRzLCB2MC40aCwgIzEyICAg ICAgICAgLy8gVSBkaXRoZXIgbG93CisgICAgdXNobGwyICAgdjMuNHMsIHYwLjhoLCAjMTIgICAg ICAgICAvLyBVIGRpdGhlciBoaWdoCisgICAgdXNobGwgICAgdjQuNHMsIHYxLjRoLCAjMTIgICAg ICAgICAvLyBWIGRpdGhlciBsb3cKKyAgICB1c2hsbDIgICB2NS40cywgdjEuOGgsICMxMiAgICAg ICAgIC8vIFYgZGl0aGVyIGhpZ2gKKworICAgIC8vIENoZWNrIGlmIHdlIGNhbiBwcm9jZXNzIDE2 IHBpeGVscyBhdCBhIHRpbWUKKyAgICB0c3QgICAgIHc3LCAjMTUgICAgICAgICAgICAgICAgICAg IC8vIENoZWNrIGlmIGNockRzdFcgJSAxNiA9PSAwCisgICAgYi5uZSAgICAuTHByb2Nlc3NfOF9w aXhlbHMgICAgICAgICAgLy8gSWYgbm90LCB1c2UgOC1waXhlbCB2ZXJzaW9uCisKKyAgICAvLyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyAxNi1w aXhlbCBwcm9jZXNzaW5nIHBhdGgKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKyAgICBtb3YgICAgIHg4LCAjMCAgICAgICAgICAgICAgICAgICAg IC8vIGkgPSAwCisuTGxvb3BfMTZfcGl4ZWxzOgorCisgICAgbW92ICAgICB2MTYuMTZiLCB2Mi4x NmIgICAgICAgICAgICAvLyBVIGFjYyBsb3cKKyAgICBtb3YgICAgIHYxNy4xNmIsIHYzLjE2YiAg ICAgICAgICAgIC8vIFUgYWNjIGhpZ2gKKyAgICBtb3YgICAgIHYxOC4xNmIsIHY0LjE2YiAgICAg ICAgICAgIC8vIFYgYWNjIGxvdworICAgIG1vdiAgICAgdjE5LjE2YiwgdjUuMTZiICAgICAgICAg ICAgLy8gViBhY2MgaGlnaAorCisgICAgbW92ICAgICB2MjAuMTZiLCB2Mi4xNmIKKyAgICBtb3Yg ICAgIHYyMS4xNmIsIHYzLjE2YgorICAgIG1vdiAgICAgdjIyLjE2YiwgdjQuMTZiCisgICAgbW92 ICAgICB2MjMuMTZiLCB2NS4xNmIKKworICAgIG1vdiAgICAgdzksIHczICAgICAgICAgICAgICAg ICAgICAgIC8vIGNockZpbHRlclNpemUgY291bnRlcgorICAgIG1vdiAgICAgeDEwLCB4MiAgICAg ICAgICAgICAgICAgICAgIC8vIGNockZpbHRlciBwb2ludGVyCisgICAgbW92ICAgICB4MTEsIHg0 ICAgICAgICAgICAgICAgICAgICAgLy8gY2hyVVNyYyBiYXNlCisgICAgbW92ICAgICB4MTIsIHg1 ICAgICAgICAgICAgICAgICAgICAgLy8gY2hyVlNyYyBiYXNlCisKKy5MZmlsdGVyX2xvb3BfMTY6 CisgICAgbGRyICAgICBoNiwgW3gxMF0sICMyICAgICAgICAgICAgICAgLy8gTG9hZCBmaWx0ZXIg Y29lZmZpY2llbnQKKworICAgIGxkciAgICAgeDEzLCBbeDExXSwgIzggICAgICAgICAgICAgIC8v IGNoclVTcmNbal0KKyAgICBsZHIgICAgIHgxNCwgW3gxMl0sICM4ICAgICAgICAgICAgICAvLyBj aHJWU3JjW2pdCisgICAgYWRkICAgICB4MTMsIHgxMywgeDgsIGxzbCAjMSAgICAgICAgLy8gJmNo clVTcmNbal1baV0KKyAgICBhZGQgICAgIHgxNCwgeDE0LCB4OCwgbHNsICMxICAgICAgICAvLyAm Y2hyVlNyY1tqXVtpXSAgCisgICAgYWRkICAgICB4MTUsIHgxMywgIzE2ICAgICAgICAgICAgICAg Ly8geDE1ID0gJmNoclVTcmNbal1baSs4XSAoOCBzYW1wbGVzICogMiBieXRlcykKKyAgICBhZGQg ICAgIHgxNiwgeDE0LCAjMTYgCisKKyAgICBsZDEgICAgIHt2MjQuOGh9LCBbeDEzXSAgICAgICAg ICAgICAvLyBVIHNhbXBsZXMgMC03CisgICAgbGQxICAgICB7djI1LjhofSwgW3gxNF0gICAgICAg ICAgICAgLy8gViBzYW1wbGVzIDAtNworCisgICAgbGQxICAgICB7djI2LjhofSwgW3gxNV0gICAg ICAgICAgICAgLy8gVSBzYW1wbGVzIDgtMTUKKyAgICBsZDEgICAgIHt2MjcuOGh9LCBbeDE2XSAg ICAgICAgICAgICAvLyBWIHNhbXBsZXMgOC0xNQorCisgICAgc21sYWwgICB2MTYuNHMsIHYyNC40 aCwgdjYuaFswXQorICAgIHNtbGFsMiAgdjE3LjRzLCB2MjQuOGgsIHY2LmhbMF0KKyAgICBzbWxh bCAgIHYxOC40cywgdjI1LjRoLCB2Ni5oWzBdCisgICAgc21sYWwyICB2MTkuNHMsIHYyNS44aCwg djYuaFswXQorCisgICAgc21sYWwgICB2MjAuNHMsIHYyNi40aCwgdjYuaFswXQorICAgIHNtbGFs MiAgdjIxLjRzLCB2MjYuOGgsIHY2LmhbMF0KKyAgICBzbWxhbCAgIHYyMi40cywgdjI3LjRoLCB2 Ni5oWzBdCisgICAgc21sYWwyICB2MjMuNHMsIHYyNy44aCwgdjYuaFswXQorCisgICAgc3VicyAg ICB3OSwgdzksICMxCisgICAgYi5ndCAgICAuTGZpbHRlcl9sb29wXzE2CisKKyAgICAvLyBQcm9j ZXNzIGFuZCBzdG9yZSBmaXJzdCA4IHBpeGVscworICAgIHNxc2hydW4gIHYyOC40aCwgdjE2LjRz LCAjMTYKKyAgICBzcXNocnVuMiB2MjguOGgsIHYxNy40cywgIzE2CisgICAgc3FzaHJ1biAgdjI5 LjRoLCB2MTguNHMsICMxNgorICAgIHNxc2hydW4yIHYyOS44aCwgdjE5LjRzLCAjMTYKKyAgICB1 cXNocm4gICB2MzAuOGIsIHYyOC44aCwgIzMgICAgICAgIC8vIFUKKyAgICB1cXNocm4gICB2MzEu OGIsIHYyOS44aCwgIzMgICAgICAgIC8vIFYKKworICAgIC8vIFByb2Nlc3MgYW5kIHN0b3JlIG5l eHQgOCBwaXhlbHMKKyAgICBzcXNocnVuICB2MjguNGgsIHYyMC40cywgIzE2CisgICAgc3FzaHJ1 bjIgdjI4LjhoLCB2MjEuNHMsICMxNgorICAgIHNxc2hydW4gIHYyOS40aCwgdjIyLjRzLCAjMTYK KyAgICBzcXNocnVuMiB2MjkuOGgsIHYyMy40cywgIzE2CisgICAgdXFzaHJuICAgdjI0LjhiLCB2 MjguOGgsICMzICAgICAgICAvLyBVCisgICAgdXFzaHJuICAgdjI1LjhiLCB2MjkuOGgsICMzICAg ICAgICAvLyBWCisKKyAgICAvLyBTdG9yZSBib3RoIDgtcGl4ZWwgYmxvY2tzCisgICAgc3QyICAg ICB7djMwLjhiLCB2MzEuOGJ9LCBbeDZdLCAjMTYKKyAgICBzdDIgICAgIHt2MjQuOGIsIHYyNS44 Yn0sIFt4Nl0sICMxNgorCisgICAgc3VicyAgICB3NywgdzcsICMxNgorICAgIGFkZCAgICAgeDgs IHg4LCAjMTYKKyAgICBiLmd0ICAgIC5MbG9vcF8xNl9waXhlbHMKKyAgICByZXQKKworICAgIC8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIDgt cGl4ZWwgcHJvY2Vzc2luZyBwYXRoIChvcmlnaW5hbCBjb2RlKQorICAgIC8vID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLkxwcm9jZXNzXzhfcGl4ZWxzOgor ICAgIG1vdiAgICAgeDgsICMwICAgICAgICAgICAgICAgICAgICAgLy8gaSA9IDAKKy5MbG9vcF84 X3BpeGVsczoKKyAgICAvLyBJbml0aWFsaXplIGFjY3VtdWxhdG9ycyB3aXRoIGRpdGhlcgorICAg IG1vdiAgICAgdjE2LjE2YiwgdjIuMTZiICAgICAgICAgICAgLy8gVSBhY2MgbG93CisgICAgbW92 ICAgICB2MTcuMTZiLCB2My4xNmIgICAgICAgICAgICAvLyBVIGFjYyBoaWdoCisgICAgbW92ICAg ICB2MTguMTZiLCB2NC4xNmIgICAgICAgICAgICAvLyBWIGFjYyBsb3cKKyAgICBtb3YgICAgIHYx OS4xNmIsIHY1LjE2YiAgICAgICAgICAgIC8vIFYgYWNjIGhpZ2gKKworICAgIG1vdiAgICAgdzks IHczICAgICAgICAgICAgICAgICAgICAgIC8vIGNockZpbHRlclNpemUgY291bnRlcgorICAgIG1v diAgICAgeDEwLCB4MiAgICAgICAgICAgICAgICAgICAgIC8vIGNockZpbHRlciBwb2ludGVyCisg ICAgbW92ICAgICB4MTEsIHg0ICAgICAgICAgICAgICAgICAgICAgLy8gY2hyVVNyYyBiYXNlCisg ICAgbW92ICAgICB4MTIsIHg1ICAgICAgICAgICAgICAgICAgICAgLy8gY2hyVlNyYyBiYXNlCisK Ky5MZmlsdGVyX2xvb3BfODoKKyAgICBsZHIgICAgIGg2LCBbeDEwXSwgIzIgICAgICAgICAgICAg ICAvLyBMb2FkIGZpbHRlciBjb2VmZmljaWVudAorICAgIAorICAgIGxkciAgICAgeDEzLCBbeDEx XSwgIzggICAgICAgICAgICAgIC8vIGNoclVTcmNbal0KKyAgICBsZHIgICAgIHgxNCwgW3gxMl0s ICM4ICAgICAgICAgICAgICAvLyBjaHJWU3JjW2pdCisgICAgYWRkICAgICB4MTMsIHgxMywgeDgs IGxzbCAjMSAgICAgICAgLy8gJmNoclVTcmNbal1baV0KKyAgICBhZGQgICAgIHgxNCwgeDE0LCB4 OCwgbHNsICMxICAgICAgICAvLyAmY2hyVlNyY1tqXVtpXQorCisgICAgbGQxICAgICB7djIwLjho fSwgW3gxM10gICAgICAgICAgICAgLy8gVSBzYW1wbGVzCisgICAgbGQxICAgICB7djIxLjhofSwg W3gxNF0gICAgICAgICAgICAgLy8gViBzYW1wbGVzCisKKyAgICBzbWxhbCAgIHYxNi40cywgdjIw LjRoLCB2Ni5oWzBdCisgICAgc21sYWwyICB2MTcuNHMsIHYyMC44aCwgdjYuaFswXQorICAgIHNt bGFsICAgdjE4LjRzLCB2MjEuNGgsIHY2LmhbMF0KKyAgICBzbWxhbDIgIHYxOS40cywgdjIxLjho LCB2Ni5oWzBdCisKKyAgICBzdWJzICAgIHc5LCB3OSwgIzEKKyAgICBiLmd0ICAgIC5MZmlsdGVy X2xvb3BfOAorCisgICAgLy8gRmluYWwgcHJvY2Vzc2luZyBhbmQgc3RvcmUKKyAgICBzcXNocnVu ICB2MjYuNGgsIHYxNi40cywgIzE2CisgICAgc3FzaHJ1bjIgdjI2LjhoLCB2MTcuNHMsICMxNgor ICAgIHNxc2hydW4gIHYyNy40aCwgdjE4LjRzLCAjMTYKKyAgICBzcXNocnVuMiB2MjcuOGgsIHYx OS40cywgIzE2CisgICAgdXFzaHJuICAgdjI4LjhiLCB2MjYuOGgsICMzICAgICAgICAvLyBVCisg ICAgdXFzaHJuICAgdjI5LjhiLCB2MjcuOGgsICMzICAgICAgICAvLyBWCisKKyAgICBzdDIgICAg IHt2MjguOGIsIHYyOS44Yn0sIFt4Nl0sICMxNgorCisgICAgc3VicyAgICB3NywgdzcsICM4Cisg ICAgYWRkICAgICB4OCwgeDgsICM4CisgICAgYi5ndCAgICAuTGxvb3BfOF9waXhlbHMKKyAgICBy ZXQKK2VuZGZ1bmMKKworZnVuY3Rpb24gZmZfeXV2Mm52MTJjWF9zd2FwcGVkX25lb24sIGV4cG9y dD0xCisgICAgLy8geDAgLSBkc3RGb3JtYXQgKHVudXNlZCkKKyAgICAvLyB4MSAtIHVpbnQ4X3Qg KmNockRpdGhlcgorICAgIC8vIHgyIC0gaW50MTZfdCAqY2hyRmlsdGVyCisgICAgLy8geDMgLSBp bnQgY2hyRmlsdGVyU2l6ZQorICAgIC8vIHg0IC0gaW50MTZfdCAqKmNoclVTcmMKKyAgICAvLyB4 NSAtIGludDE2X3QgKipjaHJWU3JjCisgICAgLy8geDYgLSB1aW50OF90ICpkZXN0CisgICAgLy8g eDcgLSBpbnQgY2hyRHN0VworCisgICAgbGQxICAgICB7djAuOGJ9LCBbeDFdICAgICAgICAgICAg ICAgLy8gY2hyRGl0aGVyWzAuLjddCisgICAgZXh0ICAgICB2MS44YiwgdjAuOGIsIHYwLjhiLCAj MyAgICAgIC8vIFJvdGF0ZSBmb3IgVjogKGkrMykmNworCisgICAgdXh0bCAgICB2MC44aCwgdjAu OGIKKyAgICB1eHRsICAgIHYxLjhoLCB2MS44YgorCisgICAgdXNobGwgICAgdjIuNHMsIHYwLjRo LCAjMTIgICAgICAgICAvLyBVIGRpdGhlciBsb3cKKyAgICB1c2hsbDIgICB2My40cywgdjAuOGgs ICMxMiAgICAgICAgIC8vIFUgZGl0aGVyIGhpZ2gKKyAgICB1c2hsbCAgICB2NC40cywgdjEuNGgs ICMxMiAgICAgICAgIC8vIFYgZGl0aGVyIGxvdworICAgIHVzaGxsMiAgIHY1LjRzLCB2MS44aCwg IzEyICAgICAgICAgLy8gViBkaXRoZXIgaGlnaAorCisgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIHBy b2Nlc3MgMTYgcGl4ZWxzIGF0IGEgdGltZQorICAgIHRzdCAgICAgdzcsICMxNSAgICAgICAgICAg ICAgICAgICAgLy8gQ2hlY2sgaWYgY2hyRHN0VyAlIDE2ID09IDAKKyAgICBiLm5lICAgIC5Mc3dh cHBlZF9wcm9jZXNzXzhfcGl4ZWxzIC8vIElmIG5vdCwgdXNlIDgtcGl4ZWwgdmVyc2lvbgorCisg ICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAg Ly8gMTYtcGl4ZWwgcHJvY2Vzc2luZyBwYXRoCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgbW92ICAgICB4OCwgIzAgICAgICAgICAgICAg ICAgICAgICAvLyBpID0gMAorLkxzd2FwcGVkX2xvb3BfMTZfcGl4ZWxzOgorCisgICAgbW92ICAg ICB2MTYuMTZiLCB2Mi4xNmIgICAgICAgICAgICAvLyBVIGFjYyBsb3cKKyAgICBtb3YgICAgIHYx Ny4xNmIsIHYzLjE2YiAgICAgICAgICAgIC8vIFUgYWNjIGhpZ2gKKyAgICBtb3YgICAgIHYxOC4x NmIsIHY0LjE2YiAgICAgICAgICAgIC8vIFYgYWNjIGxvdworICAgIG1vdiAgICAgdjE5LjE2Yiwg djUuMTZiICAgICAgICAgICAgLy8gViBhY2MgaGlnaAorCisgICAgbW92ICAgICB2MjAuMTZiLCB2 Mi4xNmIKKyAgICBtb3YgICAgIHYyMS4xNmIsIHYzLjE2YgorICAgIG1vdiAgICAgdjIyLjE2Yiwg djQuMTZiCisgICAgbW92ICAgICB2MjMuMTZiLCB2NS4xNmIKKworICAgIG1vdiAgICAgdzksIHcz ICAgICAgICAgICAgICAgICAgICAgIC8vIGNockZpbHRlclNpemUgY291bnRlcgorICAgIG1vdiAg ICAgeDEwLCB4MiAgICAgICAgICAgICAgICAgICAgIC8vIGNockZpbHRlciBwb2ludGVyCisgICAg bW92ICAgICB4MTEsIHg0ICAgICAgICAgICAgICAgICAgICAgLy8gY2hyVVNyYyBiYXNlCisgICAg bW92ICAgICB4MTIsIHg1ICAgICAgICAgICAgICAgICAgICAgLy8gY2hyVlNyYyBiYXNlCisKKy5M c3dhcHBlZF9maWx0ZXJfbG9vcF8xNjoKKyAgICBsZHIgICAgIGg2LCBbeDEwXSwgIzIgICAgICAg ICAgICAgICAvLyBMb2FkIGZpbHRlciBjb2VmZmljaWVudAorCisgICAgLy8gTG9hZCBwb2ludGVy cyBmb3IgZmlyc3QgOCBwaXhlbHMKKyAgICBsZHIgICAgIHgxMywgW3gxMV0sICM4ICAgICAgICAg ICAgICAvLyBjaHJVU3JjW2pdCisgICAgbGRyICAgICB4MTQsIFt4MTJdLCAjOCAgICAgICAgICAg ICAgLy8gY2hyVlNyY1tqXQorICAgIGFkZCAgICAgeDEzLCB4MTMsIHg4LCBsc2wgIzEgICAgICAg IC8vICZjaHJVU3JjW2pdW2ldCisgICAgYWRkICAgICB4MTQsIHgxNCwgeDgsIGxzbCAjMSAgICAg ICAgLy8gJmNoclZTcmNbal1baV0gIAorICAgIGFkZCAgICAgeDE1LCB4MTMsICMxNiAgICAgICAg ICAgICAgIC8vIHgxNSA9ICZjaHJVU3JjW2pdW2krOF0gKDggc2FtcGxlcyAqIDIgYnl0ZXMpCisg ICAgYWRkICAgICB4MTYsIHgxNCwgIzE2IAorCisgICAgbGQxICAgICB7djI0LjhofSwgW3gxM10g ICAgICAgICAgICAgLy8gVSBzYW1wbGVzIDAtNworICAgIGxkMSAgICAge3YyNS44aH0sIFt4MTRd ICAgICAgICAgICAgIC8vIFYgc2FtcGxlcyAwLTcKKworICAgIGxkMSAgICAge3YyNi44aH0sIFt4 MTVdICAgICAgICAgICAgIC8vIFUgc2FtcGxlcyA4LTE1CisgICAgbGQxICAgICB7djI3LjhofSwg W3gxNl0gICAgICAgICAgICAgLy8gViBzYW1wbGVzIDgtMTUKKworICAgIHNtbGFsICAgdjE2LjRz LCB2MjQuNGgsIHY2LmhbMF0KKyAgICBzbWxhbDIgIHYxNy40cywgdjI0LjhoLCB2Ni5oWzBdCisg ICAgc21sYWwgICB2MTguNHMsIHYyNS40aCwgdjYuaFswXQorICAgIHNtbGFsMiAgdjE5LjRzLCB2 MjUuOGgsIHY2LmhbMF0KKworICAgIHNtbGFsICAgdjIwLjRzLCB2MjYuNGgsIHY2LmhbMF0KKyAg ICBzbWxhbDIgIHYyMS40cywgdjI2LjhoLCB2Ni5oWzBdCisgICAgc21sYWwgICB2MjIuNHMsIHYy Ny40aCwgdjYuaFswXQorICAgIHNtbGFsMiAgdjIzLjRzLCB2MjcuOGgsIHY2LmhbMF0KKworICAg IHN1YnMgICAgdzksIHc5LCAjMQorICAgIGIuZ3QgICAgLkxzd2FwcGVkX2ZpbHRlcl9sb29wXzE2 CisKKyAgICBzcXNocnVuICB2MjguNGgsIHYxNi40cywgIzE2CisgICAgc3FzaHJ1bjIgdjI4Ljho LCB2MTcuNHMsICMxNgorICAgIHNxc2hydW4gIHYyOS40aCwgdjE4LjRzLCAjMTYKKyAgICBzcXNo cnVuMiB2MjkuOGgsIHYxOS40cywgIzE2CisgICAgdXFzaHJuICAgdjMwLjhiLCB2MjguOGgsICMz ICAgICAgICAvLyBVCisgICAgdXFzaHJuICAgdjMxLjhiLCB2MjkuOGgsICMzICAgICAgICAvLyBW CisKKyAgICBzcXNocnVuICB2MjguNGgsIHYyMC40cywgIzE2CisgICAgc3FzaHJ1bjIgdjI4Ljho LCB2MjEuNHMsICMxNgorICAgIHNxc2hydW4gIHYyOS40aCwgdjIyLjRzLCAjMTYKKyAgICBzcXNo cnVuMiB2MjkuOGgsIHYyMy40cywgIzE2CisgICAgdXFzaHJuICAgdjI0LjhiLCB2MjguOGgsICMz ICAgICAgICAvLyBVCisgICAgdXFzaHJuICAgdjI1LjhiLCB2MjkuOGgsICMzICAgICAgICAvLyBW CisKKyAgICAvLyBTdG9yZSBib3RoIDgtcGl4ZWwgYmxvY2tzCisgICAgc3QyICAgICB7djMwLjhi LCB2MzEuOGJ9LCBbeDZdLCAjMTYKKyAgICBzdDIgICAgIHt2MjQuOGIsIHYyNS44Yn0sIFt4Nl0s ICMxNgorCisgICAgc3VicyAgICB3NywgdzcsICMxNgorICAgIGFkZCAgICAgeDgsIHg4LCAjMTYK KyAgICBiLmd0ICAgIC5Mc3dhcHBlZF9sb29wXzE2X3BpeGVscworICAgIHJldAorCisgICAgLy8g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gOC1w aXhlbCBwcm9jZXNzaW5nIHBhdGgKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKy5Mc3dhcHBlZF9wcm9jZXNzXzhfcGl4ZWxzOgorICAgIG1vdiAg ICAgeDgsICMwICAgICAgICAgICAgICAgICAgICAgLy8gaSA9IDAKKy5Mc3dhcHBlZF9sb29wXzhf cGl4ZWxzOgorICAgIC8vIEluaXRpYWxpemUgYWNjdW11bGF0b3JzIHdpdGggZGl0aGVyCisgICAg bW92ICAgICB2MTYuMTZiLCB2Mi4xNmIgICAgICAgICAgICAvLyBVIGFjYyBsb3cKKyAgICBtb3Yg ICAgIHYxNy4xNmIsIHYzLjE2YiAgICAgICAgICAgIC8vIFUgYWNjIGhpZ2gKKyAgICBtb3YgICAg IHYxOC4xNmIsIHY0LjE2YiAgICAgICAgICAgIC8vIFYgYWNjIGxvdworICAgIG1vdiAgICAgdjE5 LjE2YiwgdjUuMTZiICAgICAgICAgICAgLy8gViBhY2MgaGlnaAorCisgICAgbW92ICAgICB3OSwg dzMgICAgICAgICAgICAgICAgICAgICAgLy8gY2hyRmlsdGVyU2l6ZSBjb3VudGVyCisgICAgbW92 ICAgICB4MTAsIHgyICAgICAgICAgICAgICAgICAgICAgLy8gY2hyRmlsdGVyIHBvaW50ZXIKKyAg ICBtb3YgICAgIHgxMSwgeDQgICAgICAgICAgICAgICAgICAgICAvLyBjaHJVU3JjIGJhc2UKKyAg ICBtb3YgICAgIHgxMiwgeDUgICAgICAgICAgICAgICAgICAgICAvLyBjaHJWU3JjIGJhc2UKKwor Lkxzd2FwcGVkX2ZpbHRlcl9sb29wXzg6CisgICAgbGRyICAgICBoNiwgW3gxMF0sICMyICAgICAg ICAgICAgICAgLy8gTG9hZCBmaWx0ZXIgY29lZmZpY2llbnQKKworICAgIGxkciAgICAgeDEzLCBb eDExXSwgIzggICAgICAgICAgICAgIC8vIGNoclVTcmNbal0KKyAgICBsZHIgICAgIHgxNCwgW3gx Ml0sICM4ICAgICAgICAgICAgICAvLyBjaHJWU3JjW2pdCisgICAgYWRkICAgICB4MTMsIHgxMywg eDgsIGxzbCAjMSAgICAgICAgLy8gJmNoclVTcmNbal1baV0KKyAgICBhZGQgICAgIHgxNCwgeDE0 LCB4OCwgbHNsICMxICAgICAgICAvLyAmY2hyVlNyY1tqXVtpXQorCisgICAgbGQxICAgICB7djIw LjhofSwgW3gxM10gICAgICAgICAgICAgLy8gVSBzYW1wbGVzCisgICAgbGQxICAgICB7djIxLjho fSwgW3gxNF0gICAgICAgICAgICAgLy8gViBzYW1wbGVzCisKKyAgICBzbWxhbCAgIHYxNi40cywg djIwLjRoLCB2Ni5oWzBdCisgICAgc21sYWwyICB2MTcuNHMsIHYyMC44aCwgdjYuaFswXQorICAg IHNtbGFsICAgdjE4LjRzLCB2MjEuNGgsIHY2LmhbMF0KKyAgICBzbWxhbDIgIHYxOS40cywgdjIx LjhoLCB2Ni5oWzBdCisKKyAgICBzdWJzICAgIHc5LCB3OSwgIzEKKyAgICBiLmd0ICAgIC5Mc3dh cHBlZF9maWx0ZXJfbG9vcF84CisKKyAgICBzcXNocnVuICB2MjYuNGgsIHYxNi40cywgIzE2Cisg ICAgc3FzaHJ1bjIgdjI2LjhoLCB2MTcuNHMsICMxNgorICAgIHNxc2hydW4gIHYyNy40aCwgdjE4 LjRzLCAjMTYKKyAgICBzcXNocnVuMiB2MjcuOGgsIHYxOS40cywgIzE2CisgICAgdXFzaHJuICAg djI4LjhiLCB2MjYuOGgsICMzICAgICAgICAvLyBVCisgICAgdXFzaHJuICAgdjI5LjhiLCB2Mjcu OGgsICMzICAgICAgICAvLyBWCisKKyAgICBzdDIgICAgIHt2MjguOGIsIHYyOS44Yn0sIFt4Nl0s ICMxNgorCisgICAgc3VicyAgICB3NywgdzcsICM4CisgICAgYWRkICAgICB4OCwgeDgsICM4Cisg ICAgYi5ndCAgICAuTHN3YXBwZWRfbG9vcF84X3BpeGVscworICAgIHJldAorZW5kZnVuYwpkaWZm IC0tZ2l0IGEvbGlic3dzY2FsZS9hYXJjaDY0L3N3c2NhbGUuYyBiL2xpYnN3c2NhbGUvYWFyY2g2 NC9zd3NjYWxlLmMKaW5kZXggNmU1YTcyMWMxZi4uMGU1NzExMmY0MiAxMDA2NDQKLS0tIGEvbGli c3dzY2FsZS9hYXJjaDY0L3N3c2NhbGUuYworKysgYi9saWJzd3NjYWxlL2FhcmNoNjQvc3dzY2Fs ZS5jCkBAIC0xNjgsNiArMTY4LDE2IEBAIHZvaWQgZmZfeXV2MnBsYW5lMV84X25lb24oCiAgICAg ICAgIGNvbnN0IHVpbnQ4X3QgKmRpdGhlciwKICAgICAgICAgaW50IG9mZnNldCk7CiAKK3ZvaWQg ZmZfeXV2Mm52MTJjWF9ub3Rzd2FwcGVkX25lb24oZW51bSBBVlBpeGVsRm9ybWF0IGRzdEZvcm1h dCwgY29uc3QgdWludDhfdCAqY2hyRGl0aGVyLAorICAgIGNvbnN0IGludDE2X3QgKmNockZpbHRl ciwgaW50IGNockZpbHRlclNpemUsCisgICAgY29uc3QgaW50MTZfdCAqKmNoclVTcmMsIGNvbnN0 IGludDE2X3QgKipjaHJWU3JjLAorICAgIHVpbnQ4X3QgKmRlc3QsIGludCBjaHJEc3RXKTsKKwor dm9pZCBmZl95dXYybnYxMmNYX3N3YXBwZWRfbmVvbihlbnVtIEFWUGl4ZWxGb3JtYXQgZHN0Rm9y bWF0LCBjb25zdCB1aW50OF90ICpjaHJEaXRoZXIsCisgICAgY29uc3QgaW50MTZfdCAqY2hyRmls dGVyLCBpbnQgY2hyRmlsdGVyU2l6ZSwKKyAgICBjb25zdCBpbnQxNl90ICoqY2hyVVNyYywgY29u c3QgaW50MTZfdCAqKmNoclZTcmMsCisgICAgdWludDhfdCAqZGVzdCwgaW50IGNockRzdFcpOwor CiAjZGVmaW5lIEFTU0lHTl9TQ0FMRV9GVU5DMihoc2NhbGVmbiwgZmlsdGVyc2l6ZSwgb3B0KSBk byB7ICAgICAgICAgICAgICBcCiAgICAgaWYgKGMtPnNyY0JwYyA9PSA4KSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmKGMtPmRzdEJw YyA8PSAxNCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBA IC0yMDEsNiArMjExLDEyIEBAIHZvaWQgZmZfeXV2MnBsYW5lMV84X25lb24oCiAgICAgZGVmYXVs dDogYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCiAgICAgfQogCisjZGVmaW5lIEFTU0lHTl9ZVVYyTlYxMl9GVU5DKHl1djJudjEyZm4s IG9wdCwgZHN0Rm9ybWF0KSAgICAgICAgICAgICAgIFwKKyAgICBpZighaXNTd2FwcGVkQ2hyb21h KGRzdEZvcm1hdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICB5dXYybnYxMmZuID0gZmZfeXV2Mm52MTJjWF9ub3Rzd2FwcGVkXyAgIyMgb3B0OyAgICAgICAg ICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXV2Mm52MTJmbiA9IGZmX3l1djJu djEyY1hfc3dhcHBlZF8gICMjIG9wdDsKKwogI2RlZmluZSBORU9OX0lOUFVUKG5hbWUpIFwKIHZv aWQgZmZfIyNuYW1lIyNUb1lfbmVvbih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywg Y29uc3QgdWludDhfdCAqLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90 ICosIGludCB3LCB1aW50MzJfdCAqY29lZmZzLCB2b2lkICopOyBcCkBAIC0yNzUsNyArMjkxLDkg QEAgYXZfY29sZCB2b2lkIGZmX3N3c19pbml0X3N3c2NhbGVfYWFyY2g2NChTd3NJbnRlcm5hbCAq YykKICAgICAgICAgQVNTSUdOX1ZTQ0FMRV9GVU5DKGMtPnl1djJwbGFuZTEsIG5lb24pOwogICAg ICAgICBpZiAoYy0+ZHN0QnBjID09IDgpIHsKICAgICAgICAgICAgIGMtPnl1djJwbGFuZVggPSBm Zl95dXYycGxhbmVYXzhfbmVvbjsKKyAgICAgICAgICAgIEFTU0lHTl9ZVVYyTlYxMl9GVU5DKGMt Pnl1djJudjEyY1gsIG5lb24sIGMtPm9wdHMuZHN0X2Zvcm1hdCk7CiAgICAgICAgIH0KKwogICAg ICAgICBzd2l0Y2ggKGMtPm9wdHMuc3JjX2Zvcm1hdCkgewogICAgICAgICBjYXNlIEFWX1BJWF9G TVRfQUJHUjoKICAgICAgICAgICAgIGMtPmx1bVRvWVYxMiA9IGZmX2FiZ3IzMlRvWV9uZW9uOwot LSAKMi4zNi4wLndpbmRvd3MuMQoK --_004_PN2P287MB11658545ACDE2C3F246E5568D662APN2P287MB1165INDP_ 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_PN2P287MB11658545ACDE2C3F246E5568D662APN2P287MB1165INDP_--