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 E19A449CD7 for ; Fri, 7 Jun 2024 17:38:49 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C477968D7F1; Fri, 7 Jun 2024 20:38:46 +0300 (EEST) Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C6A0B68D2C8 for ; Fri, 7 Jun 2024 20:38:40 +0300 (EEST) Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-2c2039db0c6so1694694a91.1 for ; Fri, 07 Jun 2024 10:38:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717781919; x=1718386719; 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=TE/W6/1LXQCR6AkdZrjYi4P9M8VTWltNDYz0iS75FnQ=; b=alWkqVuE3Pmx9Gz7NFiWiU2GzsmAJ8l+63cl9iqIfMLjfG8JoNuwXtwd/xSTTDCv/K A0AZTylEcrSk0Z2f3tlcjfaWWqbM76sV5dOeI3yLANqjO46GTME3fZySBV/ydlga0u2/ eCY4NXtaay13euoI+5F+CBnAoy74jlVPAwFTn9AicZk3KJSiaely8ojVlwFAoVc6JbcF LS9KDKMqMTEtiYgJtWQA8B4ealXa4Kp6kACn8ZKnH4oYHr2AUnZnVmc41oHQX8XGwljI sY9fzgRPsDUVAOkndeHqBec32mtQyTiN0NyLNqwreCJMJ+I6pYcDS2FwLzoYLKoHRxlj bp7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717781919; x=1718386719; 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=TE/W6/1LXQCR6AkdZrjYi4P9M8VTWltNDYz0iS75FnQ=; b=QuTrt366CKvfGTfYaHtiN4dbzo0DUbg60UkEZeKG896FMezbzlBGOcEq5/JC+Re9UL 7SwlnRpQV+bWtij5wZ5Qy0d0AoOsJ3Q4L7Fbe5ar7QPVznEHgxTxvdQpFKOqT6DF5qdS fjbHSzBhwpB1s3j81F8XLKxbFp/h3TQmkYLeWJka5c9cN0pbqmM+OngDKorpg+3vKnxe 6rWUNcASlzrBEV2LyTFXvdk+CPnz3Mt0S/E7PFtMlTLE5mI4KBIrh7Rl32GE2YJNVxUu qLpcnwHrlal4ZBgaSJlo0onynIYOl9v/LPn0tM6eMg9+FPk9TzMfoOIpAh4K6wDPAicJ Tb1A== X-Gm-Message-State: AOJu0YyPQ8om4PIJGKiaMFeTNGu67WO6PokqbTIDnf1BJSE5CKa7DF9+ aItVRElECyuL4eMYUxonc1kyFwZLWUr0JWfwWc5h0dL3YFZEkjgzKOcC4zXJoS0fYU6yEslHsNQ mSsSlEly18YiNl4KTcjiSaygD1L0yOQ== X-Google-Smtp-Source: AGHT+IFAeYlMpLyrsIpJhD0YO2j6MM4WDUq0O9tgyq3nhkBB2mC4txGHqK5kHz1Ib/HkgV00kbMAsY6tXcK4YMOTO4I= X-Received: by 2002:a17:90a:528e:b0:2c0:d4d:837 with SMTP id 98e67ed59e1d1-2c2b89aadbemr4681299a91.12.1717781918182; Fri, 07 Jun 2024 10:38:38 -0700 (PDT) MIME-Version: 1.0 References: <20240607140543.130761-1-ramiro.polla@gmail.com> <20240607140543.130761-3-ramiro.polla@gmail.com> In-Reply-To: <20240607140543.130761-3-ramiro.polla@gmail.com> From: Ramiro Polla Date: Fri, 7 Jun 2024 19:38:26 +0200 Message-ID: To: ffmpeg-devel@ffmpeg.org Content-Type: multipart/mixed; boundary="000000000000091fdc061a5045b9" Subject: Re: [FFmpeg-devel] [PATCH 3/4] swscale/x86: add sse4 {lum, chr}ConvertRange 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: --000000000000091fdc061a5045b9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jun 7, 2024 at 4:05=E2=80=AFPM Ramiro Polla wrote: > > chrRangeFromJpeg_8_c: 19.9 > chrRangeFromJpeg_8_sse4: 16.2 > chrRangeFromJpeg_24_c: 60.7 > chrRangeFromJpeg_24_sse4: 28.9 > chrRangeFromJpeg_128_c: 325.7 > chrRangeFromJpeg_128_sse4: 160.2 > chrRangeFromJpeg_144_c: 364.2 > chrRangeFromJpeg_144_sse4: 194.9 > chrRangeFromJpeg_256_c: 630.7 > chrRangeFromJpeg_256_sse4: 337.4 > chrRangeFromJpeg_512_c: 1240.4 > chrRangeFromJpeg_512_sse4: 668.4 > chrRangeToJpeg_8_c: 37.7 > chrRangeToJpeg_8_sse4: 19.7 > chrRangeToJpeg_24_c: 114.7 > chrRangeToJpeg_24_sse4: 30.2 > chrRangeToJpeg_128_c: 636.4 > chrRangeToJpeg_128_sse4: 161.7 > chrRangeToJpeg_144_c: 715.7 > chrRangeToJpeg_144_sse4: 272.9 > chrRangeToJpeg_256_c: 1256.7 > chrRangeToJpeg_256_sse4: 341.9 > chrRangeToJpeg_512_c: 2498.7 > chrRangeToJpeg_512_sse4: 668.4 > lumRangeFromJpeg_8_c: 11.7 > lumRangeFromJpeg_8_sse4: 12.4 > lumRangeFromJpeg_24_c: 36.9 > lumRangeFromJpeg_24_sse4: 17.7 > lumRangeFromJpeg_128_c: 228.4 > lumRangeFromJpeg_128_sse4: 85.2 > lumRangeFromJpeg_144_c: 272.9 > lumRangeFromJpeg_144_sse4: 96.9 > lumRangeFromJpeg_256_c: 463.4 > lumRangeFromJpeg_256_sse4: 183.9 > lumRangeFromJpeg_512_c: 879.9 > lumRangeFromJpeg_512_sse4: 355.9 > lumRangeToJpeg_8_c: 17.7 > lumRangeToJpeg_8_sse4: 15.4 > lumRangeToJpeg_24_c: 56.2 > lumRangeToJpeg_24_sse4: 18.4 > lumRangeToJpeg_128_c: 331.4 > lumRangeToJpeg_128_sse4: 84.4 > lumRangeToJpeg_144_c: 375.2 > lumRangeToJpeg_144_sse4: 96.9 > lumRangeToJpeg_256_c: 649.7 > lumRangeToJpeg_256_sse4: 184.4 > lumRangeToJpeg_512_c: 1281.9 > lumRangeToJpeg_512_sse4: 355.9 > --- > libswscale/swscale_internal.h | 1 + > libswscale/utils.c | 2 + > libswscale/x86/Makefile | 1 + > libswscale/x86/range_convert.asm | 100 +++++++++++++++++++++++++++++++ > libswscale/x86/swscale.c | 36 +++++++++++ > 5 files changed, 140 insertions(+) > create mode 100644 libswscale/x86/range_convert.asm > > diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.= h > index d4b0c3cee2..92f6105443 100644 > --- a/libswscale/swscale_internal.h > +++ b/libswscale/swscale_internal.h > @@ -698,6 +698,7 @@ void ff_updateMMXDitherTables(SwsContext *c, int dstY= ); > > av_cold void ff_sws_init_range_convert(SwsContext *c); > av_cold void ff_sws_init_range_convert_loongarch(SwsContext *c); > +av_cold void ff_sws_init_range_convert_x86(SwsContext *c); > > SwsFunc ff_yuv2rgb_init_x86(SwsContext *c); > SwsFunc ff_yuv2rgb_init_ppc(SwsContext *c); > diff --git a/libswscale/utils.c b/libswscale/utils.c > index 476a24fea5..8dfa57b5ff 100644 > --- a/libswscale/utils.c > +++ b/libswscale/utils.c > @@ -1082,6 +1082,8 @@ int sws_setColorspaceDetails(struct SwsContext *c, = const int inv_table[4], > ff_sws_init_range_convert(c); > #if ARCH_LOONGARCH64 > ff_sws_init_range_convert_loongarch(c); > +#elif ARCH_X86 > + ff_sws_init_range_convert_x86(c); > #endif > } > > diff --git a/libswscale/x86/Makefile b/libswscale/x86/Makefile > index 68391494be..f00154941d 100644 > --- a/libswscale/x86/Makefile > +++ b/libswscale/x86/Makefile > @@ -12,6 +12,7 @@ X86ASM-OBJS +=3D x86/input.o = \ > x86/output.o = \ > x86/scale.o = \ > x86/scale_avx2.o = \ > + x86/range_convert.o = \ > x86/rgb_2_rgb.o = \ > x86/yuv_2_rgb.o = \ > x86/yuv2yuvX.o = \ > diff --git a/libswscale/x86/range_convert.asm b/libswscale/x86/range_conv= ert.asm > new file mode 100644 > index 0000000000..333265fb65 > --- /dev/null > +++ b/libswscale/x86/range_convert.asm > @@ -0,0 +1,100 @@ > +;***********************************************************************= ******* > +;* 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-1= 301 USA > +;***********************************************************************= ******* > + > +%include "libavutil/x86/x86util.asm" > + > +; NOTE: there is no need to clamp the input when converting to jpeg rang= e > +; (like we do in the C code) because packssdw will saturate the ou= tput. > + > +;-----------------------------------------------------------------------= ------ > +; lumConvertRange > +; > +; void ff_lumRangeToJpeg_(int16_t *dst, int width); > +; void ff_lumRangeFromJpeg_(int16_t *dst, int width); > +; > +;-----------------------------------------------------------------------= ------ > + > +%macro LUMCONVERTRANGE 4 > +SECTION_RODATA > +mult_%1: times 4 dd %2 > +offset_%1: times 4 dd %3 > +SECTION .text > +cglobal %1, 2, 3, 3, dst, width, x > + movsxdifnidn widthq, widthd > + xor xq, xq > + mova m1, [mult_%1] > + mova m2, [offset_%1] > +.loop: > + pmovsxwd m0, [dstq+xq*2] > + pmulld m0, m1 > + paddd m0, m2 > + psrad m0, %4 > + packssdw m0, m0 > + movh [dstq+xq*2], m0 > + add xq, mmsize / 4 > + cmp xd, widthd > + jl .loop > + RET > +%endmacro > + > +;-----------------------------------------------------------------------= ------ > +; chrConvertRange > +; > +; void ff_chrRangeToJpeg_(int16_t *dstU, int16_t *dstV, int width); > +; void ff_chrRangeFromJpeg_(int16_t *dstU, int16_t *dstV, int width= ); > +; > +;-----------------------------------------------------------------------= ------ > + > +%macro CHRCONVERTRANGE 4 > +SECTION_RODATA > +mult_%1: times 4 dd %2 > +offset_%1: times 4 dd %3 > +SECTION .text > +cglobal %1, 3, 4, 4, dstU, dstV, width, x > + movsxdifnidn widthq, widthd > + xor xq, xq > + mova m1, [mult_%1] > + mova m2, [offset_%1] > +.loop: > + pmovsxwd m0, [dstUq+xq*2] > + pmulld m0, m1 > + paddd m0, m2 > + psrad m0, %4 > + packssdw m0, m0 > + movh [dstUq+xq*2], m0 > + pmovsxwd m0, [dstVq+xq*2] > + pmulld m0, m1 > + paddd m0, m2 > + psrad m0, %4 > + packssdw m0, m0 > + movh [dstVq+xq*2], m0 > + add xq, mmsize / 4 > + cmp xd, widthd > + jl .loop > + RET > +%endmacro > + > +%if ARCH_X86_64 > +INIT_XMM sse4 > +LUMCONVERTRANGE lumRangeToJpeg, 19077, -39057361, 14 > +CHRCONVERTRANGE chrRangeToJpeg, 4663, -9289992, 12 > +LUMCONVERTRANGE lumRangeFromJpeg, 14071, 33561947, 14 > +CHRCONVERTRANGE chrRangeFromJpeg, 1799, 4081085, 11 > +%endif > diff --git a/libswscale/x86/swscale.c b/libswscale/x86/swscale.c > index fff8bb4396..c5ddfb5605 100644 > --- a/libswscale/x86/swscale.c > +++ b/libswscale/x86/swscale.c > @@ -447,6 +447,38 @@ INPUT_PLANAR_RGB_UV_ALL_DECL(avx2); > INPUT_PLANAR_RGB_A_ALL_DECL(avx2); > #endif > > +#if ARCH_X86_64 > +#define RANGE_CONVERT_FUNCS(opt) do { = \ > + if (c->dstBpc <=3D 14) { = \ > + if (c->srcRange) { = \ > + c->lumConvertRange =3D ff_lumRangeFromJpeg_ ##opt; = \ > + c->chrConvertRange =3D ff_chrRangeFromJpeg_ ##opt; = \ > + } else { = \ > + c->lumConvertRange =3D ff_lumRangeToJpeg_ ##opt; = \ > + c->chrConvertRange =3D ff_chrRangeToJpeg_ ##opt; = \ > + } = \ > + } = \ > +} while (0) > + > +#define RANGE_CONVERT_FUNCS_DECL(opt) = \ > +void ff_lumRangeFromJpeg_ ##opt(int16_t *dst, int width); = \ > +void ff_chrRangeFromJpeg_ ##opt(int16_t *dstU, int16_t *dstV, int width)= ; \ > +void ff_lumRangeToJpeg_ ##opt(int16_t *dst, int width); = \ > +void ff_chrRangeToJpeg_ ##opt(int16_t *dstU, int16_t *dstV, int width); = \ > + > +RANGE_CONVERT_FUNCS_DECL(sse4); > + > +av_cold void ff_sws_init_range_convert_x86(SwsContext *c) > +{ > + if (c->srcRange !=3D c->dstRange && !isAnyRGB(c->dstFormat)) { > + int cpu_flags =3D av_get_cpu_flags(); > + if (EXTERNAL_SSE4(cpu_flags)) { > + RANGE_CONVERT_FUNCS(sse4); > + } > + } > +} > +#endif > + > av_cold void ff_sws_init_swscale_x86(SwsContext *c) > { > int cpu_flags =3D av_get_cpu_flags(); > @@ -805,4 +837,8 @@ switch(c->dstBpc){ \ > } > > #endif > + > +#if ARCH_X86_64 > + ff_sws_init_range_convert_x86(c); > +#endif > } > -- > 2.30.2 > Attached version is a little bit different, moving the consts out of the macro (so they can be reused by avx2) and processing twice the amount of data per loop. --000000000000091fdc061a5045b9 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-swscale-x86-add-sse4-lum-chr-ConvertRange.patch" Content-Disposition: attachment; filename="0001-swscale-x86-add-sse4-lum-chr-ConvertRange.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx4yxd0q0 RnJvbSBiOGY3MmIxYzRjODM5M2JlY2VhOTk2MjM3OGFmNmQ3ZGZmYWJiY2UyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYW1pcm8gUG9sbGEgPHJhbWlyby5wb2xsYUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgNiBKdW4gMjAyNCAxODozMzozNCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIHN3 c2NhbGUveDg2OiBhZGQgc3NlNCB7bHVtLGNocn1Db252ZXJ0UmFuZ2UKCmNoclJhbmdlRnJvbUpw ZWdfOF9jOiAxOS45CmNoclJhbmdlRnJvbUpwZWdfOF9zc2U0OiAxNi4yCmNoclJhbmdlRnJvbUpw ZWdfMjRfYzogNjAuNwpjaHJSYW5nZUZyb21KcGVnXzI0X3NzZTQ6IDI4LjkKY2hyUmFuZ2VGcm9t SnBlZ18xMjhfYzogMzI1LjcKY2hyUmFuZ2VGcm9tSnBlZ18xMjhfc3NlNDogMTYwLjIKY2hyUmFu Z2VGcm9tSnBlZ18xNDRfYzogMzY0LjIKY2hyUmFuZ2VGcm9tSnBlZ18xNDRfc3NlNDogMTk0LjkK Y2hyUmFuZ2VGcm9tSnBlZ18yNTZfYzogNjMwLjcKY2hyUmFuZ2VGcm9tSnBlZ18yNTZfc3NlNDog MzM3LjQKY2hyUmFuZ2VGcm9tSnBlZ181MTJfYzogMTI0MC40CmNoclJhbmdlRnJvbUpwZWdfNTEy X3NzZTQ6IDY2OC40CmNoclJhbmdlVG9KcGVnXzhfYzogMzcuNwpjaHJSYW5nZVRvSnBlZ184X3Nz ZTQ6IDE5LjcKY2hyUmFuZ2VUb0pwZWdfMjRfYzogMTE0LjcKY2hyUmFuZ2VUb0pwZWdfMjRfc3Nl NDogMzAuMgpjaHJSYW5nZVRvSnBlZ18xMjhfYzogNjM2LjQKY2hyUmFuZ2VUb0pwZWdfMTI4X3Nz ZTQ6IDE2MS43CmNoclJhbmdlVG9KcGVnXzE0NF9jOiA3MTUuNwpjaHJSYW5nZVRvSnBlZ18xNDRf c3NlNDogMjcyLjkKY2hyUmFuZ2VUb0pwZWdfMjU2X2M6IDEyNTYuNwpjaHJSYW5nZVRvSnBlZ18y NTZfc3NlNDogMzQxLjkKY2hyUmFuZ2VUb0pwZWdfNTEyX2M6IDI0OTguNwpjaHJSYW5nZVRvSnBl Z181MTJfc3NlNDogNjY4LjQKbHVtUmFuZ2VGcm9tSnBlZ184X2M6IDExLjcKbHVtUmFuZ2VGcm9t SnBlZ184X3NzZTQ6IDEyLjQKbHVtUmFuZ2VGcm9tSnBlZ18yNF9jOiAzNi45Cmx1bVJhbmdlRnJv bUpwZWdfMjRfc3NlNDogMTcuNwpsdW1SYW5nZUZyb21KcGVnXzEyOF9jOiAyMjguNApsdW1SYW5n ZUZyb21KcGVnXzEyOF9zc2U0OiA4NS4yCmx1bVJhbmdlRnJvbUpwZWdfMTQ0X2M6IDI3Mi45Cmx1 bVJhbmdlRnJvbUpwZWdfMTQ0X3NzZTQ6IDk2LjkKbHVtUmFuZ2VGcm9tSnBlZ18yNTZfYzogNDYz LjQKbHVtUmFuZ2VGcm9tSnBlZ18yNTZfc3NlNDogMTgzLjkKbHVtUmFuZ2VGcm9tSnBlZ181MTJf YzogODc5LjkKbHVtUmFuZ2VGcm9tSnBlZ181MTJfc3NlNDogMzU1LjkKbHVtUmFuZ2VUb0pwZWdf OF9jOiAxNy43Cmx1bVJhbmdlVG9KcGVnXzhfc3NlNDogMTUuNApsdW1SYW5nZVRvSnBlZ18yNF9j OiA1Ni4yCmx1bVJhbmdlVG9KcGVnXzI0X3NzZTQ6IDE4LjQKbHVtUmFuZ2VUb0pwZWdfMTI4X2M6 IDMzMS40Cmx1bVJhbmdlVG9KcGVnXzEyOF9zc2U0OiA4NC40Cmx1bVJhbmdlVG9KcGVnXzE0NF9j OiAzNzUuMgpsdW1SYW5nZVRvSnBlZ18xNDRfc3NlNDogOTYuOQpsdW1SYW5nZVRvSnBlZ18yNTZf YzogNjQ5LjcKbHVtUmFuZ2VUb0pwZWdfMjU2X3NzZTQ6IDE4NC40Cmx1bVJhbmdlVG9KcGVnXzUx Ml9jOiAxMjgxLjkKbHVtUmFuZ2VUb0pwZWdfNTEyX3NzZTQ6IDM1NS45Ci0tLQogbGlic3dzY2Fs ZS9zd3NjYWxlX2ludGVybmFsLmggICAgfCAgIDEgKwogbGlic3dzY2FsZS91dGlscy5jICAgICAg ICAgICAgICAgfCAgIDIgKwogbGlic3dzY2FsZS94ODYvTWFrZWZpbGUgICAgICAgICAgfCAgIDEg KwogbGlic3dzY2FsZS94ODYvcmFuZ2VfY29udmVydC5hc20gfCAxMzAgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogbGlic3dzY2FsZS94ODYvc3dzY2FsZS5jICAgICAgICAgfCAgMzYg KysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDE3MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGlic3dzY2FsZS94ODYvcmFuZ2VfY29udmVydC5hc20KCmRpZmYgLS1naXQgYS9s aWJzd3NjYWxlL3N3c2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN3c2NhbGUvc3dzY2FsZV9pbnRlcm5h bC5oCmluZGV4IGQ0YjBjM2NlZTIuLjkyZjYxMDU0NDMgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUv c3dzY2FsZV9pbnRlcm5hbC5oCisrKyBiL2xpYnN3c2NhbGUvc3dzY2FsZV9pbnRlcm5hbC5oCkBA IC02OTgsNiArNjk4LDcgQEAgdm9pZCBmZl91cGRhdGVNTVhEaXRoZXJUYWJsZXMoU3dzQ29udGV4 dCAqYywgaW50IGRzdFkpOwogCiBhdl9jb2xkIHZvaWQgZmZfc3dzX2luaXRfcmFuZ2VfY29udmVy dChTd3NDb250ZXh0ICpjKTsKIGF2X2NvbGQgdm9pZCBmZl9zd3NfaW5pdF9yYW5nZV9jb252ZXJ0 X2xvb25nYXJjaChTd3NDb250ZXh0ICpjKTsKK2F2X2NvbGQgdm9pZCBmZl9zd3NfaW5pdF9yYW5n ZV9jb252ZXJ0X3g4NihTd3NDb250ZXh0ICpjKTsKIAogU3dzRnVuYyBmZl95dXYycmdiX2luaXRf eDg2KFN3c0NvbnRleHQgKmMpOwogU3dzRnVuYyBmZl95dXYycmdiX2luaXRfcHBjKFN3c0NvbnRl eHQgKmMpOwpkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS91dGlscy5jIGIvbGlic3dzY2FsZS91dGls cy5jCmluZGV4IDQ3NmEyNGZlYTUuLjhkZmE1N2I1ZmYgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUv dXRpbHMuYworKysgYi9saWJzd3NjYWxlL3V0aWxzLmMKQEAgLTEwODIsNiArMTA4Miw4IEBAIGlu dCBzd3Nfc2V0Q29sb3JzcGFjZURldGFpbHMoc3RydWN0IFN3c0NvbnRleHQgKmMsIGNvbnN0IGlu dCBpbnZfdGFibGVbNF0sCiAgICAgICAgIGZmX3N3c19pbml0X3JhbmdlX2NvbnZlcnQoYyk7CiAj aWYgQVJDSF9MT09OR0FSQ0g2NAogICAgICAgICBmZl9zd3NfaW5pdF9yYW5nZV9jb252ZXJ0X2xv b25nYXJjaChjKTsKKyNlbGlmIEFSQ0hfWDg2CisgICAgICAgIGZmX3N3c19pbml0X3JhbmdlX2Nv bnZlcnRfeDg2KGMpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9saWJzd3NjYWxlL3g4 Ni9NYWtlZmlsZSBiL2xpYnN3c2NhbGUveDg2L01ha2VmaWxlCmluZGV4IDY4MzkxNDk0YmUuLmYw MDE1NDk0MWQgMTAwNjQ0Ci0tLSBhL2xpYnN3c2NhbGUveDg2L01ha2VmaWxlCisrKyBiL2xpYnN3 c2NhbGUveDg2L01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBAIFg4NkFTTS1PQkpTICAgICAgICAg ICAgICAgICAgICAgKz0geDg2L2lucHV0Lm8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDg2L291dHB1dC5vICAgICAgICAgICAg ICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDg2L3Nj YWxlLm8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeDg2L3NjYWxlX2F2eDIubyAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ODYvcmFuZ2VfY29udmVydC5vICAg ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ODYv cmdiXzJfcmdiLm8gICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB4ODYveXV2XzJfcmdiLm8gICAgICAgICAgICAgICAgICAgICAgXAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ODYveXV2Mnl1dlgubyAgICAgICAgICAg ICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbGlic3dzY2FsZS94ODYvcmFuZ2VfY29udmVydC5h c20gYi9saWJzd3NjYWxlL3g4Ni9yYW5nZV9jb252ZXJ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi4xMzk4M2EzODZiCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3dz Y2FsZS94ODYvcmFuZ2VfY29udmVydC5hc20KQEAgLTAsMCArMSwxMzAgQEAKKzsqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKzsqIENvcHlyaWdodCAoYykgMjAyNCBSYW1pcm8gUG9sbGEKKzsqCis7KiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCis7KgorOyogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworOyogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCis7KiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKzsqCis7KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKzsqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOyogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsqCis7KiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCis7KiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl Cis7KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCis7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyVpbmNs dWRlICJsaWJhdnV0aWwveDg2L3g4NnV0aWwuYXNtIgorCitTRUNUSU9OX1JPREFUQQorCitjaHJf dG9fbXVsdDogICAgICAgIHRpbWVzIDQgZGQgNDY2MworY2hyX3RvX29mZnNldDogICAgICB0aW1l cyA0IGRkIC05Mjg5OTkyCislZGVmaW5lIGNocl90b19zaGlmdCAxMgorCitjaHJfZnJvbV9tdWx0 OiAgICAgIHRpbWVzIDQgZGQgMTc5OQorY2hyX2Zyb21fb2Zmc2V0OiAgICB0aW1lcyA0IGRkIDQw ODEwODUKKyVkZWZpbmUgY2hyX2Zyb21fc2hpZnQgMTEKKworbHVtX3RvX211bHQ6ICAgICAgICB0 aW1lcyA0IGRkIDE5MDc3CitsdW1fdG9fb2Zmc2V0OiAgICAgIHRpbWVzIDQgZGQgLTM5MDU3MzYx CislZGVmaW5lIGx1bV90b19zaGlmdCAxNAorCitsdW1fZnJvbV9tdWx0OiAgICAgIHRpbWVzIDQg ZGQgMTQwNzEKK2x1bV9mcm9tX29mZnNldDogICAgdGltZXMgNCBkZCAzMzU2MTk0NworJWRlZmlu ZSBsdW1fZnJvbV9zaGlmdCAxNAorCitTRUNUSU9OIC50ZXh0CisKKzsgTk9URTogdGhlcmUgaXMg bm8gbmVlZCB0byBjbGFtcCB0aGUgaW5wdXQgd2hlbiBjb252ZXJ0aW5nIHRvIGpwZWcgcmFuZ2UK KzsgICAgICAgKGxpa2Ugd2UgZG8gaW4gdGhlIEMgY29kZSkgYmVjYXVzZSBwYWNrc3NkdyB3aWxs IHNhdHVyYXRlIHRoZSBvdXRwdXQuCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBsdW1Db252 ZXJ0UmFuZ2UKKzsKKzsgdm9pZCBmZl9sdW1SYW5nZVRvSnBlZ188b3B0PihpbnQxNl90ICpkc3Qs IGludCB3aWR0aCk7Cis7IHZvaWQgZmZfbHVtUmFuZ2VGcm9tSnBlZ188b3B0PihpbnQxNl90ICpk c3QsIGludCB3aWR0aCk7Cis7Cis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJW1hY3JvIExVTUNP TlZFUlRSQU5HRSA0CitjZ2xvYmFsICUxLCAyLCAzLCAzLCBkc3QsIHdpZHRoLCB4CisgICAgbW92 c3hkaWZuaWRuIHdpZHRocSwgd2lkdGhkCisgICAgeG9yICAgICAgICAgICAgICB4cSwgeHEKKyAg ICBtb3ZhICAgICAgICAgICAgIG00LCBbJTJdCisgICAgbW92YSAgICAgICAgICAgICBtNSwgWyUz XQorLmxvb3A6CisgICAgcG1vdnN4d2QgICAgICAgICBtMCwgW2RzdHEreHEqMl0KKyAgICBwbW92 c3h3ZCAgICAgICAgIG0xLCBbZHN0cSt4cSoyK21tc2l6ZS8yXQorICAgIHBtdWxsZCAgICAgICAg ICAgbTAsIG00CisgICAgcG11bGxkICAgICAgICAgICBtMSwgbTQKKyAgICBwYWRkZCAgICAgICAg ICAgIG0wLCBtNQorICAgIHBhZGRkICAgICAgICAgICAgbTEsIG01CisgICAgcHNyYWQgICAgICAg ICAgICBtMCwgJTQKKyAgICBwc3JhZCAgICAgICAgICAgIG0xLCAlNAorICAgIHBhY2tzc2R3ICAg ICAgICAgbTAsIG0wCisgICAgcGFja3NzZHcgICAgICAgICBtMSwgbTEKKyAgICBtb3ZxICAgIFtk c3RxK3hxKjJdLCBtMAorICAgIG1vdnEgICAgW2RzdHEreHEqMittbXNpemUvMl0sIG0xCisgICAg YWRkICAgICAgICAgICAgICB4cSwgbW1zaXplIC8gMgorICAgIGNtcCAgICAgICAgICAgICAgeGQs IHdpZHRoZAorICAgIGpsIC5sb29wCisgICAgUkVUCislZW5kbWFjcm8KKworOy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCis7IGNockNvbnZlcnRSYW5nZQorOworOyB2b2lkIGZmX2NoclJhbmdlVG9KcGVn XzxvcHQ+KGludDE2X3QgKmRzdFUsIGludDE2X3QgKmRzdFYsIGludCB3aWR0aCk7Cis7IHZvaWQg ZmZfY2hyUmFuZ2VGcm9tSnBlZ188b3B0PihpbnQxNl90ICpkc3RVLCBpbnQxNl90ICpkc3RWLCBp bnQgd2lkdGgpOworOworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVtYWNybyBDSFJDT05WRVJU UkFOR0UgNAorY2dsb2JhbCAlMSwgMywgNCwgNCwgZHN0VSwgZHN0Viwgd2lkdGgsIHgKKyAgICBt b3ZzeGRpZm5pZG4gd2lkdGhxLCB3aWR0aGQKKyAgICB4b3IgICAgICAgICAgICAgIHhxLCB4cQor ICAgIG1vdmEgICAgICAgICAgICAgbTQsIFslMl0KKyAgICBtb3ZhICAgICAgICAgICAgIG01LCBb JTNdCisubG9vcDoKKyAgICBwbW92c3h3ZCAgICAgICAgIG0wLCBbZHN0VXEreHEqMl0KKyAgICBw bW92c3h3ZCAgICAgICAgIG0xLCBbZHN0VXEreHEqMittbXNpemUvMl0KKyAgICBwbW92c3h3ZCAg ICAgICAgIG0yLCBbZHN0VnEreHEqMl0KKyAgICBwbW92c3h3ZCAgICAgICAgIG0zLCBbZHN0VnEr eHEqMittbXNpemUvMl0KKyAgICBwbXVsbGQgICAgICAgICAgIG0wLCBtNAorICAgIHBtdWxsZCAg ICAgICAgICAgbTEsIG00CisgICAgcG11bGxkICAgICAgICAgICBtMiwgbTQKKyAgICBwbXVsbGQg ICAgICAgICAgIG0zLCBtNAorICAgIHBhZGRkICAgICAgICAgICAgbTAsIG01CisgICAgcGFkZGQg ICAgICAgICAgICBtMSwgbTUKKyAgICBwYWRkZCAgICAgICAgICAgIG0yLCBtNQorICAgIHBhZGRk ICAgICAgICAgICAgbTMsIG01CisgICAgcHNyYWQgICAgICAgICAgICBtMCwgJTQKKyAgICBwc3Jh ZCAgICAgICAgICAgIG0xLCAlNAorICAgIHBzcmFkICAgICAgICAgICAgbTIsICU0CisgICAgcHNy YWQgICAgICAgICAgICBtMywgJTQKKyAgICBwYWNrc3NkdyAgICAgICAgIG0wLCBtMAorICAgIHBh Y2tzc2R3ICAgICAgICAgbTEsIG0xCisgICAgcGFja3NzZHcgICAgICAgICBtMiwgbTIKKyAgICBw YWNrc3NkdyAgICAgICAgIG0zLCBtMworICAgIG1vdnEgICBbZHN0VXEreHEqMl0sIG0wCisgICAg bW92cSAgIFtkc3RVcSt4cSoyK21tc2l6ZS8yXSwgbTEKKyAgICBtb3ZxICAgW2RzdFZxK3hxKjJd LCBtMgorICAgIG1vdnEgICBbZHN0VnEreHEqMittbXNpemUvMl0sIG0zCisgICAgYWRkICAgICAg ICAgICAgICB4cSwgbW1zaXplIC8gMgorICAgIGNtcCAgICAgICAgICAgICAgeGQsIHdpZHRoZAor ICAgIGpsIC5sb29wCisgICAgUkVUCislZW5kbWFjcm8KKworJWlmIEFSQ0hfWDg2XzY0CitJTklU X1hNTSBzc2U0CitMVU1DT05WRVJUUkFOR0UgbHVtUmFuZ2VUb0pwZWcsICAgbHVtX3RvX211bHQs ICAgbHVtX3RvX29mZnNldCwgICBsdW1fdG9fc2hpZnQKK0NIUkNPTlZFUlRSQU5HRSBjaHJSYW5n ZVRvSnBlZywgICBjaHJfdG9fbXVsdCwgICBjaHJfdG9fb2Zmc2V0LCAgIGNocl90b19zaGlmdAor TFVNQ09OVkVSVFJBTkdFIGx1bVJhbmdlRnJvbUpwZWcsIGx1bV9mcm9tX211bHQsIGx1bV9mcm9t X29mZnNldCwgbHVtX2Zyb21fc2hpZnQKK0NIUkNPTlZFUlRSQU5HRSBjaHJSYW5nZUZyb21KcGVn LCBjaHJfZnJvbV9tdWx0LCBjaHJfZnJvbV9vZmZzZXQsIGNocl9mcm9tX3NoaWZ0CislZW5kaWYK ZGlmZiAtLWdpdCBhL2xpYnN3c2NhbGUveDg2L3N3c2NhbGUuYyBiL2xpYnN3c2NhbGUveDg2L3N3 c2NhbGUuYwppbmRleCBmZmY4YmI0Mzk2Li5jNWRkZmI1NjA1IDEwMDY0NAotLS0gYS9saWJzd3Nj YWxlL3g4Ni9zd3NjYWxlLmMKKysrIGIvbGlic3dzY2FsZS94ODYvc3dzY2FsZS5jCkBAIC00NDcs NiArNDQ3LDM4IEBAIElOUFVUX1BMQU5BUl9SR0JfVVZfQUxMX0RFQ0woYXZ4Mik7CiBJTlBVVF9Q TEFOQVJfUkdCX0FfQUxMX0RFQ0woYXZ4Mik7CiAjZW5kaWYKIAorI2lmIEFSQ0hfWDg2XzY0Cisj ZGVmaW5lIFJBTkdFX0NPTlZFUlRfRlVOQ1Mob3B0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChjLT5kc3RCcGMgPD0gMTQpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGMt PnNyY1JhbmdlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICBjLT5sdW1Db252ZXJ0UmFuZ2UgPSBmZl9sdW1SYW5nZUZyb21K cGVnXyAjI29wdDsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYy0+Y2hyQ29udmVydFJh bmdlID0gZmZfY2hyUmFuZ2VGcm9tSnBlZ18gIyNvcHQ7ICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjLT5sdW1Db252ZXJ0UmFuZ2UgPSBmZl9sdW1S YW5nZVRvSnBlZ18gIyNvcHQ7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYy0+Y2hy Q29udmVydFJhbmdlID0gZmZfY2hyUmFuZ2VUb0pwZWdfICMjb3B0OyAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAo MCkKKworI2RlZmluZSBSQU5HRV9DT05WRVJUX0ZVTkNTX0RFQ0wob3B0KSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgZmZfbHVtUmFuZ2VGcm9tSnBlZ18gIyNv cHQoaW50MTZfdCAqZHN0LCBpbnQgd2lkdGgpOyAgICAgICAgICAgICAgICAgICBcCit2b2lkIGZm X2NoclJhbmdlRnJvbUpwZWdfICMjb3B0KGludDE2X3QgKmRzdFUsIGludDE2X3QgKmRzdFYsIGlu dCB3aWR0aCk7ICAgXAordm9pZCBmZl9sdW1SYW5nZVRvSnBlZ18gIyNvcHQoaW50MTZfdCAqZHN0 LCBpbnQgd2lkdGgpOyAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgZmZfY2hyUmFuZ2VUb0pw ZWdfICMjb3B0KGludDE2X3QgKmRzdFUsIGludDE2X3QgKmRzdFYsIGludCB3aWR0aCk7ICAgICBc CisKK1JBTkdFX0NPTlZFUlRfRlVOQ1NfREVDTChzc2U0KTsKKworYXZfY29sZCB2b2lkIGZmX3N3 c19pbml0X3JhbmdlX2NvbnZlcnRfeDg2KFN3c0NvbnRleHQgKmMpCit7CisgICAgaWYgKGMtPnNy Y1JhbmdlICE9IGMtPmRzdFJhbmdlICYmICFpc0FueVJHQihjLT5kc3RGb3JtYXQpKSB7CisgICAg ICAgIGludCBjcHVfZmxhZ3MgPSBhdl9nZXRfY3B1X2ZsYWdzKCk7CisgICAgICAgIGlmIChFWFRF Uk5BTF9TU0U0KGNwdV9mbGFncykpIHsKKyAgICAgICAgICAgIFJBTkdFX0NPTlZFUlRfRlVOQ1Mo c3NlNCk7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYKKwogYXZfY29sZCB2b2lkIGZmX3N3 c19pbml0X3N3c2NhbGVfeDg2KFN3c0NvbnRleHQgKmMpCiB7CiAgICAgaW50IGNwdV9mbGFncyA9 IGF2X2dldF9jcHVfZmxhZ3MoKTsKQEAgLTgwNSw0ICs4MzcsOCBAQCBzd2l0Y2goYy0+ZHN0QnBj KXsgXAogICAgIH0KIAogI2VuZGlmCisKKyNpZiBBUkNIX1g4Nl82NAorICAgIGZmX3N3c19pbml0 X3JhbmdlX2NvbnZlcnRfeDg2KGMpOworI2VuZGlmCiB9Ci0tIAoyLjMwLjIKCg== --000000000000091fdc061a5045b9 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". --000000000000091fdc061a5045b9--