From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id ADB874BCC6 for ; Thu, 15 Aug 2024 14:25:44 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C73D068DB9B; Thu, 15 Aug 2024 17:25:41 +0300 (EEST) Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9975368DB01 for ; Thu, 15 Aug 2024 17:25:35 +0300 (EEST) Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-2d3ce556df9so351488a91.0 for ; Thu, 15 Aug 2024 07:25:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723731934; x=1724336734; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=9QIwJDh+qkLS3dJAeoeR7NAcGNqNX73RxMEfl1TCIvE=; b=Kmig8qRh0V7ZqgCK7n8yVgPhSJvc7aJrcuOFgHD0IxMyXa/AsnXip2EzP3EZS465y1 62JieYlOvXdCd507x2E90BgVO0Ef9JB/nIsm8eVXxZTrjRXiXiCtuvGz3y3gUc99NigZ hVbHePrHmb9J3NoOutFEprKfKzaiMFat6TC9ZROQ0k/sRikZ5HFx5ZrqIR2FxfVI1/ga 0AZ7Xx46c2BihKT7T3rh+cDS0f3nNb9ZJr3LStpHdul++ua2NDwwWcUpYkvxelC8GWhk NnlFnwMaGg8Thll0vMiJQWe6C+9y43+KsrqRpASVFhLhi7kn/VH0Y77abSE6YteuaU22 h+Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723731934; x=1724336734; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9QIwJDh+qkLS3dJAeoeR7NAcGNqNX73RxMEfl1TCIvE=; b=TQnV7GqRb2jYrN8UgryBJL8+Kcy2ujCpZoea1LhHutxzJIAvZS5nQEKV0LOr4i/DIC TMEYrIc7i1GZAdPSfzqquCF3RHu6WE17bGF+266HUrwrVUA0KndwmydDTOZmaEkIHPeK bSeQZhY9xH6PqgzxMPALDpcSNYSoe6aoTuXbvsNFLyGUKSz8kufk7mtOTSDyaaMdpw7x A2DsBkR2fjmZI88ltxj9Zvy92rcpYdYnyqK9TBApYrK03HWOJJhSnM+JRR692xl6rD+M rCTdaAiR9g06naQ+Yb41fvk5ul+PNAbRUkKxYC1tDLY/7paEzUnu9dJ5JbtNV8t+teVa 37xw== X-Gm-Message-State: AOJu0YzATTBcoZOyrDoxX4qB5rxkGf69DjjWvJVbPXyWGdWu0ObGqgCi gCW91KWWkGQ8sW1mWzmhWI/ULiaONNld9jR7A+MEnX6XFxZxcEntuA+3uY9IsYk46uWFd8dUKIo SnwSXhV/Q7fSm2KRw8DhAFbaVX+tjv5rD X-Google-Smtp-Source: AGHT+IEI71TkDgjVde6QlrTj2PjJWFkb9oMO9n20aUcpsG/HXYT6wA1/7Fsgor5AwzO+2q3YjvB+V3zRMR90MhY0l7k= X-Received: by 2002:a17:90a:10d6:b0:2cd:3e75:4e51 with SMTP id 98e67ed59e1d1-2d3aab929bbmr7976146a91.39.1723731933351; Thu, 15 Aug 2024 07:25:33 -0700 (PDT) MIME-Version: 1.0 References: <20240809112612.107000-1-ramiro.polla@gmail.com> <20240809112612.107000-4-ramiro.polla@gmail.com> <79af6ca-f4b2-6f51-1b4d-e35f8331991@martin.st> In-Reply-To: <79af6ca-f4b2-6f51-1b4d-e35f8331991@martin.st> From: Ramiro Polla Date: Thu, 15 Aug 2024 16:25:21 +0200 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="000000000000936e87061fb99d62" Subject: Re: [FFmpeg-devel] [PATCH 4/4] swscale/aarch64: add nv24/nv42 to yuv420p unscaled converter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --000000000000936e87061fb99d62 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Aug 14, 2024 at 7:21=E2=80=AFPM Martin Storsj=C3=B6 wrote: > On Fri, 9 Aug 2024, Ramiro Polla wrote: > > checkasm --bench for Raspberry Pi 5 Model B Rev 1.0: > > nv24_yuv420p_128_c: 423.0 > > nv24_yuv420p_128_neon: 115.7 > > nv24_yuv420p_1920_c: 5939.5 > > nv24_yuv420p_1920_neon: 1339.7 > > nv42_yuv420p_128_c: 423.2 > > nv42_yuv420p_128_neon: 115.7 > > nv42_yuv420p_1920_c: 5907.5 > > nv42_yuv420p_1920_neon: 1342.5 > > --- > > libswscale/aarch64/Makefile | 1 + > > libswscale/aarch64/swscale_unscaled.c | 30 +++++++++ > > libswscale/aarch64/swscale_unscaled_neon.S | 75 ++++++++++++++++++++++ > > 3 files changed, 106 insertions(+) > > create mode 100644 libswscale/aarch64/swscale_unscaled_neon.S > > > diff --git a/libswscale/aarch64/swscale_unscaled_neon.S b/libswscale/aa= rch64/swscale_unscaled_neon.S > > new file mode 100644 > > index 0000000000..a206fda41f > > --- /dev/null > > +++ b/libswscale/aarch64/swscale_unscaled_neon.S > > @@ -0,0 +1,75 @@ > > +/* > > + * Copyright (c) 2024 Ramiro Polla > > + * > > + * This file is part of FFmpeg. > > + * > > + * FFmpeg is free software; you can redistribute it and/or > > + * modify it under the terms of the GNU Lesser General Public > > + * License as published by the Free Software Foundation; either > > + * version 2.1 of the License, or (at your option) any later version. > > + * > > + * FFmpeg is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + * Lesser General Public License for more details. > > + * > > + * You should have received a copy of the GNU Lesser General Public > > + * License along with FFmpeg; if not, write to the Free Software > > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110= -1301 USA > > + */ > > + > > +#include "libavutil/aarch64/asm.S" > > + > > +function ff_nv24_to_yuv420p_chroma_neon, export=3D1 > > +// x0 uint8_t *dst1 > > +// x1 int dstStride1 > > +// x2 uint8_t *dst2 > > +// x3 int dstStride2 > > +// x4 const uint8_t *src > > +// x5 int srcStride > > +// w6 int w > > +// w7 int h > > + > > + uxtw x1, w1 > > + uxtw x3, w3 > > + uxtw x5, w5 > > You can often avoid the explicit uxtw instructions, if you can fold an > uxtw attribute into the cases where the register is used. (If it's used > often, it may be slightly more performant to do it upfront like this > though, but often it can be omitted entirely.) And whenever you do an > operation with a wN register as destination, the upper half of the > register gets explicitly cleared, so these also may be avoided that way. > > > + > > + add x9, x4, x5 // x9 =3D src + sr= cStride > > + lsl w5, w5, #1 // srcStride *=3D = 2 > > + > > +1: > > + mov w10, w6 // w10 =3D w > > + mov x11, x4 // x11 =3D src1 (l= ine 1) > > + mov x12, x9 // x12 =3D src2 (l= ine 2) > > + mov x13, x0 // x13 =3D dst1 (d= stU) > > + mov x14, x2 // x14 =3D dst2 (d= stV) > > + > > +2: > > + ld2 { v0.16b, v1.16b }, [x11], #32 // v0 =3D U1, v= 1 =3D V1 > > + ld2 { v2.16b, v3.16b }, [x12], #32 // v2 =3D U2, v= 3 =3D V2 > > + > > + uaddlp v0.8h, v0.16b // pairwise add U1= into v0 > > + uaddlp v1.8h, v1.16b // pairwise add V1= into v1 > > + uadalp v0.8h, v2.16b // pairwise add U2= , accumulate into v0 > > + uadalp v1.8h, v3.16b // pairwise add V2= , accumulate into v1 > > + > > + shrn v0.8b, v0.8h, #2 // divide by 4 > > + shrn v1.8b, v1.8h, #2 // divide by 4 > > + > > + st1 { v0.8b }, [x13], #8 // store U into ds= t1 > > + st1 { v1.8b }, [x14], #8 // store V into ds= t2 > > + > > + subs w10, w10, #8 > > + b.gt 2b > > + > > + // next row > > + add x4, x4, x5 // src1 +=3D srcSt= ride * 2 > > + add x9, x9, x5 // src2 +=3D srcSt= ride * 2 > > + add x0, x0, x1 // dst1 +=3D dstSt= ride1 > > + add x2, x2, x3 // dst2 +=3D dstSt= ride2 > > It's often possible to avoid the extra step of moving the pointers back > into the the x11/x12/x13/x14 registers, if you subtract the width from th= e > stride at the start of the function. Then you don't need two separate > registers for each pointer, and shortens dependency chain when moving on > to the next line. > > If the width can be any uneven value, but we in practice write in > increments of 8 pixels, you may need to align the width up to 8 before > using it to decrement the stride that way though. Thank you for the review. New patch attached. --000000000000936e87061fb99d62 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0004-swscale-aarch64-add-nv24-nv42-to-yuv420p-unscaled.patch" Content-Disposition: attachment; filename="v2-0004-swscale-aarch64-add-nv24-nv42-to-yuv420p-unscaled.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lzvdg9770 RnJvbSBmNmVhMWVkYjA1OTBjMTRlMTY4ZmJjZTJhZTQyOTU4MjIwYjZlNzc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYW1pcm8gUG9sbGEgPHJhbWlyby5wb2xsYUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNyBBdWcgMjAyNCAxODo1MzoxMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg NC80XSBzd3NjYWxlL2FhcmNoNjQ6IGFkZCBudjI0L252NDIgdG8geXV2NDIwcCB1bnNjYWxlZAog Y29udmVydGVyCgpjaGVja2FzbSAtLWJlbmNoIGZvciBSYXNwYmVycnkgUGkgNSBNb2RlbCBCIFJl diAxLjA6Cm52MjRfeXV2NDIwcF8xMjhfYzogMTMyMC4yCm52MjRfeXV2NDIwcF8xMjhfbmVvbjog NzA5LjUKbnYyNF95dXY0MjBwXzE5MjBfYzogMTI0NDguMApudjI0X3l1djQyMHBfMTkyMF9uZW9u OiAyNjk4LjAKbnY0Ml95dXY0MjBwXzEyOF9jOiAxMzI5LjIKbnY0Ml95dXY0MjBwXzEyOF9uZW9u OiA4NDEuNwpudjQyX3l1djQyMHBfMTkyMF9jOiAxMTk2Ny41Cm52NDJfeXV2NDIwcF8xOTIwX25l b246IDI4NjYuNQotLS0KIGxpYnN3c2NhbGUvYWFyY2g2NC9NYWtlZmlsZSAgICAgICAgICAgICAg ICB8ICAxICsKIGxpYnN3c2NhbGUvYWFyY2g2NC9zd3NjYWxlX3Vuc2NhbGVkLmMgICAgICB8IDMw ICsrKysrKysrKysKIGxpYnN3c2NhbGUvYWFyY2g2NC9zd3NjYWxlX3Vuc2NhbGVkX25lb24uUyB8 IDcwICsrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTAxIGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzd3NjYWxlL2FhcmNoNjQvc3dzY2FsZV91bnNj YWxlZF9uZW9uLlMKCmRpZmYgLS1naXQgYS9saWJzd3NjYWxlL2FhcmNoNjQvTWFrZWZpbGUgYi9s aWJzd3NjYWxlL2FhcmNoNjQvTWFrZWZpbGUKaW5kZXggMzdhZDk2MDYxOS4uMWRlOGM5YzBkNiAx MDA2NDQKLS0tIGEvbGlic3dzY2FsZS9hYXJjaDY0L01ha2VmaWxlCisrKyBiL2xpYnN3c2NhbGUv YWFyY2g2NC9NYWtlZmlsZQpAQCAtNyw0ICs3LDUgQEAgTkVPTi1PQkpTICAgKz0gYWFyY2g2NC9o c2NhbGUubyAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgYWFyY2g2NC9vdXRwdXQu byAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgYWFyY2g2NC9yYW5nZV9jb252ZXJ0 X25lb24ubyAgICAgXAogICAgICAgICAgICAgICAgYWFyY2g2NC9yZ2IycmdiX25lb24ubyAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgYWFyY2g2NC9zd3NjYWxlX3Vuc2NhbGVkX25lb24ubyAg XAogICAgICAgICAgICAgICAgYWFyY2g2NC95dXYycmdiX25lb24ubyAgICAgICAgICAgXApkaWZm IC0tZ2l0IGEvbGlic3dzY2FsZS9hYXJjaDY0L3N3c2NhbGVfdW5zY2FsZWQuYyBiL2xpYnN3c2Nh bGUvYWFyY2g2NC9zd3NjYWxlX3Vuc2NhbGVkLmMKaW5kZXggYjMwOTNiYmM5ZC4uODdiYjAxMTcw OSAxMDA2NDQKLS0tIGEvbGlic3dzY2FsZS9hYXJjaDY0L3N3c2NhbGVfdW5zY2FsZWQuYworKysg Yi9saWJzd3NjYWxlL2FhcmNoNjQvc3dzY2FsZV91bnNjYWxlZC5jCkBAIC04Myw2ICs4MywzMSBA QCBzdGF0aWMgaW50IGlmbXQjI190b18jI29mbXQjI19uZW9uX3dyYXBwZXIoU3dzQ29udGV4dCAq YywgY29uc3QgdWludDhfdCAqc3JjW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYy0+eXV2MnJnYl95X2NvZWZmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCit2b2lkIGZmX252 MjRfdG9feXV2NDIwcF9jaHJvbWFfbmVvbih1aW50OF90ICpkc3QxLCBpbnQgZHN0U3RyaWRlMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRzdDIsIGludCBk c3RTdHJpZGUyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu dDhfdCAqc3JjLCBpbnQgc3JjU3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHcsIGludCBoKTsKKworc3RhdGljIGludCBudjI0X3RvX3l1djQyMHBfbmVvbl93 cmFwcGVyKFN3c0NvbnRleHQgKmMsIGNvbnN0IHVpbnQ4X3QgKnNyY1tdLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNTdHJpZGVbXSwgaW50IHNyY1NsaWNl WSwgaW50IHNyY1NsaWNlSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50OF90ICpkc3RbXSwgaW50IGRzdFN0cmlkZVtdKQoreworICAgIHVpbnQ4X3QgKmRzdDEg PSBkc3RbMV0gKyBkc3RTdHJpZGVbMV0gKiBzcmNTbGljZVkgLyAyOworICAgIHVpbnQ4X3QgKmRz dDIgPSBkc3RbMl0gKyBkc3RTdHJpZGVbMl0gKiBzcmNTbGljZVkgLyAyOworCisgICAgZmZfY29w eVBsYW5lKHNyY1swXSwgc3JjU3RyaWRlWzBdLCBzcmNTbGljZVksIHNyY1NsaWNlSCwgYy0+c3Jj VywKKyAgICAgICAgICAgICAgICAgZHN0WzBdLCBkc3RTdHJpZGVbMF0pOworCisgICAgaWYgKGMt PnNyY0Zvcm1hdCA9PSBBVl9QSVhfRk1UX05WMjQpCisgICAgICAgIGZmX252MjRfdG9feXV2NDIw cF9jaHJvbWFfbmVvbihkc3QxLCBkc3RTdHJpZGVbMV0sIGRzdDIsIGRzdFN0cmlkZVsyXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1sxXSwgc3JjU3RyaWRlWzFd LCBjLT5zcmNXIC8gMiwgc3JjU2xpY2VIKTsKKyAgICBlbHNlCisgICAgICAgIGZmX252MjRfdG9f eXV2NDIwcF9jaHJvbWFfbmVvbihkc3QyLCBkc3RTdHJpZGVbMl0sIGRzdDEsIGRzdFN0cmlkZVsx XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1sxXSwgc3JjU3Ry aWRlWzFdLCBjLT5zcmNXIC8gMiwgc3JjU2xpY2VIKTsKKworICAgIHJldHVybiBzcmNTbGljZUg7 Cit9CisKICNkZWZpbmUgREVDTEFSRV9GRl9OVlhfVE9fQUxMX1JHQlhfRlVOQ1MobnZ4KSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogREVDTEFSRV9GRl9O VlhfVE9fUkdCWF9GVU5DUyhudngsIGFyZ2IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCiBERUNMQVJFX0ZGX05WWF9UT19SR0JYX0ZVTkNTKG52 eCwgcmdiYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKQEAgLTExOSw2ICsxNDQsMTEgQEAgc3RhdGljIHZvaWQgZ2V0X3Vuc2NhbGVkX3N3c2Nh bGVfbmVvbihTd3NDb250ZXh0ICpjKSB7CiAgICAgU0VUX0ZGX05WWF9UT19BTExfUkdCWF9GVU5D KG52MjEsIE5WMjEsIGFjY3VyYXRlX3JuZCk7CiAgICAgU0VUX0ZGX05WWF9UT19BTExfUkdCWF9G VU5DKHl1djQyMHAsIFlVVjQyMFAsIGFjY3VyYXRlX3JuZCk7CiAgICAgU0VUX0ZGX05WWF9UT19B TExfUkdCWF9GVU5DKHl1djQyMnAsIFlVVjQyMlAsIGFjY3VyYXRlX3JuZCk7CisKKyAgICBpZiAo Yy0+ZHN0Rm9ybWF0ID09IEFWX1BJWF9GTVRfWVVWNDIwUCAmJgorICAgICAgICAoYy0+c3JjRm9y bWF0ID09IEFWX1BJWF9GTVRfTlYyNCB8fCBjLT5zcmNGb3JtYXQgPT0gQVZfUElYX0ZNVF9OVjQy KSAmJgorICAgICAgICAhKGMtPnNyY0ggJiAxKSAmJiAhKGMtPnNyY1cgJiAxNSkgJiYgIWFjY3Vy YXRlX3JuZCkKKyAgICAgICAgYy0+Y29udmVydF91bnNjYWxlZCA9IG52MjRfdG9feXV2NDIwcF9u ZW9uX3dyYXBwZXI7CiB9CiAKIHZvaWQgZmZfZ2V0X3Vuc2NhbGVkX3N3c2NhbGVfYWFyY2g2NChT d3NDb250ZXh0ICpjKQpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS9hYXJjaDY0L3N3c2NhbGVfdW5z Y2FsZWRfbmVvbi5TIGIvbGlic3dzY2FsZS9hYXJjaDY0L3N3c2NhbGVfdW5zY2FsZWRfbmVvbi5T Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjdmMTg5MGY1OGEKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJzd3NjYWxlL2FhcmNoNjQvc3dzY2FsZV91bnNjYWxlZF9uZW9uLlMK QEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyNCBSYW1pcm8gUG9sbGEK KyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy CisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2 dXRpbC9hYXJjaDY0L2FzbS5TIgorCitmdW5jdGlvbiBmZl9udjI0X3RvX3l1djQyMHBfY2hyb21h X25lb24sIGV4cG9ydD0xCisvLyB4MCAgdWludDhfdCAqZHN0MQorLy8geDEgIGludCBkc3RTdHJp ZGUxCisvLyB4MiAgdWludDhfdCAqZHN0MgorLy8geDMgIGludCBkc3RTdHJpZGUyCisvLyB4NCAg Y29uc3QgdWludDhfdCAqc3JjCisvLyB4NSAgaW50IHNyY1N0cmlkZQorLy8gdzYgIGludCB3Cisv LyB3NyAgaW50IGgKKworICAgICAgICBhZGQgICAgICAgICAgICAgeDksIHg0LCB3NSwgc3h0dyAg ICAgICAgICAgIC8vIHg5ID0gc3JjICsgc3JjU3RyaWRlCisgICAgICAgIGxzbCAgICAgICAgICAg ICB3NSwgdzUsICMxICAgICAgICAgICAgICAgICAgLy8gc3JjU3RyaWRlICo9IDIKKyAgICAgICAg c3ViICAgICAgICAgICAgIHc1LCB3NSwgdzYsIGxzbCAjMiAgICAgICAgICAvLyBzcmNQYWRkaW5n ID0gKDIgKiBzcmNTdHJpZGUpIC0gKDQgKiB3KQorICAgICAgICBzdWIgICAgICAgICAgICAgdzEs IHcxLCB3NiAgICAgICAgICAgICAgICAgIC8vIGRzdFBhZGRpbmcxID0gZHN0U3RyaWRlMSAtIHcK KyAgICAgICAgc3ViICAgICAgICAgICAgIHczLCB3MywgdzYgICAgICAgICAgICAgICAgICAvLyBk c3RQYWRkaW5nMiA9IGRzdFN0cmlkZTIgLSB3CisKKzE6CisgICAgICAgIG1vdiAgICAgICAgICAg ICB3MTAsIHc2ICAgICAgICAgICAgICAgICAgICAgLy8gdzEwID0gdworCisyOgorICAgICAgICBs ZDIgICAgICAgICAgICAgeyB2MC4xNmIsIHYxLjE2YiB9LCBbeDRdLCAjMzIgLy8gdjAgPSBVMSwg djEgPSBWMQorICAgICAgICBsZDIgICAgICAgICAgICAgeyB2Mi4xNmIsIHYzLjE2YiB9LCBbeDld LCAjMzIgLy8gdjIgPSBVMiwgdjMgPSBWMgorCisgICAgICAgIHVhZGRscCAgICAgICAgICB2MC44 aCwgdjAuMTZiICAgICAgICAgICAgICAgLy8gcGFpcndpc2UgYWRkIFUxIGludG8gdjAKKyAgICAg ICAgdWFkZGxwICAgICAgICAgIHYxLjhoLCB2MS4xNmIgICAgICAgICAgICAgICAvLyBwYWlyd2lz ZSBhZGQgVjEgaW50byB2MQorICAgICAgICB1YWRhbHAgICAgICAgICAgdjAuOGgsIHYyLjE2YiAg ICAgICAgICAgICAgIC8vIHBhaXJ3aXNlIGFkZCBVMiwgYWNjdW11bGF0ZSBpbnRvIHYwCisgICAg ICAgIHVhZGFscCAgICAgICAgICB2MS44aCwgdjMuMTZiICAgICAgICAgICAgICAgLy8gcGFpcndp c2UgYWRkIFYyLCBhY2N1bXVsYXRlIGludG8gdjEKKworICAgICAgICBzaHJuICAgICAgICAgICAg djAuOGIsIHYwLjhoLCAjMiAgICAgICAgICAgIC8vIGRpdmlkZSBieSA0CisgICAgICAgIHNocm4g ICAgICAgICAgICB2MS44YiwgdjEuOGgsICMyICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IDQKKwor ICAgICAgICBzdDEgICAgICAgICAgICAgeyB2MC44YiB9LCBbeDBdLCAjOCAgICAgICAgIC8vIHN0 b3JlIFUgaW50byBkc3QxCisgICAgICAgIHN0MSAgICAgICAgICAgICB7IHYxLjhiIH0sIFt4Ml0s ICM4ICAgICAgICAgLy8gc3RvcmUgViBpbnRvIGRzdDIKKworICAgICAgICBzdWJzICAgICAgICAg ICAgdzEwLCB3MTAsICM4CisgICAgICAgIGIuZ3QgICAgICAgICAgICAyYgorCisgICAgICAgIC8v IG5leHQgcm93CisgICAgICAgIGFkZCAgICAgICAgICAgICB4NCwgeDQsIHg1LCBzeHR3ICAgICAg ICAgICAgLy8gc3JjMSArPSBzcmNQYWRkaW5nCisgICAgICAgIGFkZCAgICAgICAgICAgICB4OSwg eDksIHg1LCBzeHR3ICAgICAgICAgICAgLy8gc3JjMiArPSBzcmNQYWRkaW5nCisgICAgICAgIGFk ZCAgICAgICAgICAgICB4MCwgeDAsIHgxLCBzeHR3ICAgICAgICAgICAgLy8gZHN0MSArPSBkc3RQ YWRkaW5nMQorICAgICAgICBhZGQgICAgICAgICAgICAgeDIsIHgyLCB4Mywgc3h0dyAgICAgICAg ICAgIC8vIGRzdDIgKz0gZHN0UGFkZGluZzIKKworICAgICAgICBzdWJzICAgICAgICAgICAgdzcs IHc3LCAjMgorICAgICAgICBiLmd0ICAgICAgICAgICAgMWIKKworICAgICAgICByZXQKK2VuZGZ1 bmMKLS0gCjIuMzkuMgoK --000000000000936e87061fb99d62 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". --000000000000936e87061fb99d62--